Changeset 1870


Ignore:
Timestamp:
03/27/03 11:37:39 (22 years ago)
Author:
hengsteb
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/manalysis/MRanForest.cc

    r1864 r1870  
    4343
    4444#include <TMatrix.h>
     45#include <TRandom3.h>
    4546
    4647#include "MHMatrix.h"
     
    6061    fName  = name  ? name  : "MRanForest";
    6162    fTitle = title ? title : "Storage container for Random Forest";
     63
     64    fForest=new TObjArray();
     65    fForest->SetOwner(kTRUE);
     66}
     67
     68// --------------------------------------------------------------------------
     69//
     70// Destructor.
     71//
     72MRanForest::~MRanForest()
     73{
     74    delete fForest;
    6275}
    6376
     
    88101{
    89102    Double_t hadroness=0;
    90     Double_t ntree=0;
     103    Int_t ntree=0;
    91104    MRanTree *tree;
     105
    92106    TIter forest(fForest);
     107    forest.Reset();
     108
    93109    while ((tree=(MRanTree*)forest.Next()))
    94110    {
     
    97113        ntree++;
    98114    }
    99     return hadroness/ntree;
    100 }
    101 
    102 void MRanForest::SetupForest()
    103 {
    104     fForest=new TObjArray();
    105     fForest->SetOwner(kTRUE);
    106 }
    107 
    108 void MRanForest::SetTree(MRanTree *rantree)
    109 {
    110     // initialize current tree for tree-growing loop in GrowForest
    111     // ndsize + numtry are set in MRanForestGrow!!
    112     fRanTree=rantree;
    113 }
    114 
    115 Bool_t MRanForest::AddTree()
    116 {
     115    return hadroness/Double_t(ntree);
     116}
     117
     118Bool_t MRanForest::AddTree(MRanTree *rantree=NULL)
     119{
     120    if (rantree)
     121        fRanTree=rantree;
    117122    if (!fRanTree)
    118123        return kFALSE;
    119     MRanTree *newtree=(MRanTree*)fRanTree->Clone();
    120     fForest->Add(newtree);
     124
     125    fForest->Add((MRanTree*)fRanTree->Clone());
    121126
    122127    return kTRUE;
     
    149154    fNTimesOutBag.Reset();
    150155
    151     fGiniDec.Set(fNumDim);
    152 
    153156    fDataSort.Set(fNumDim*fNumData);
    154157    fDataRang.Set(fNumDim*fNumData);
     
    175178    CreateDataSort();
    176179
    177     SetupForest();
    178 
    179     if(!fRanTree)return kFALSE;
     180    if(!fRanTree)
     181    {
     182        *fLog << err << dbginf << "MRanForest, fRanTree not initialized... aborting." << endl;
     183        return kFALSE;
     184    }
    180185    fRanTree->SetRules(fGammas->GetColumns());
    181186    fTreeNo=0;
     
    187192{
    188193    Int_t ninbag=0;
    189     TArrayI datsortinbag; 
    190     TArrayF classpopw; 
    191     TArrayI jinbag;     
    192     TArrayF winbag;     
     194    TArrayI datsortinbag;
     195    TArrayF classpopw;
     196    TArrayI jinbag;
     197    TArrayF winbag;
    193198
    194199    jinbag.Set(fNumData);
     
    220225    for (Int_t n=0;n<fNumData;n++)
    221226    {
    222         Int_t k=Int_t(fNumData*fRand.Rndm());
     227        if(!gRandom)
     228            gRandom=new TRandom3(0);
     229        Int_t k=Int_t(fNumData*gRandom->Rndm());
    223230
    224231        classpopw[fHadTrue[k]]+=fWeight[k];
     
    237244    // growing single tree
    238245    fRanTree->GrowTree(hadrons,gammas,fNumData,fNumDim,fHadTrue,datsortinbag,
    239                        fDataRang,fGiniDec,classpopw,jinbag,winbag,fWeight,fRand);
     246                       fDataRang,classpopw,jinbag,winbag,fWeight);
    240247
    241248    // error-estimates from out-of-bag data (oob data):
     
    267274    fErr=0;
    268275    for(Int_t ievt=0;ievt<fNumData;ievt++)
    269     {                                                                                               
    270276        if(fNTimesOutBag[ievt]!=0)
    271277        {
     
    273279            n++;
    274280        }
    275     }
     281
    276282    fErr/=Float_t(n);
    277283    fErr=TMath::Sqrt(fErr);
     
    305311    // value of all fData(m,.). There may be more then 1 event with rang r (due to bagging).
    306312
    307 
    308313    TArrayF v(fNumData);
    309314    TArrayI isort(fNumData);
     
    313318
    314319    for (Int_t j=0;j<fNumHad;j++)
    315     {
    316320        fHadTrue[j]=1;
    317     }
    318321
    319322    for (Int_t j=0;j<fNumGam;j++)
    320     {
    321323        fHadTrue[j+fNumHad]=0;
    322     }
    323 
    324324
    325325    for (Int_t mvar=0;mvar<fNumDim;mvar++)
  • trunk/MagicSoft/Mars/manalysis/MRanForest.h

    r1864 r1870  
    1818#endif
    1919
     20#ifndef ROOT_TObjArray
     21#include <TObjArray.h>
     22#endif
     23
    2024#ifndef ROOT_TRandom
    2125#include <TRandom.h>
     
    3236    Int_t fTreeNo;
    3337
    34     TRandom fRand;
    3538    MRanTree *fRanTree;
    3639    TObjArray *fForest;
     
    4245    Int_t   fNumGam;
    4346    Int_t   fNumHad;
    44     Int_t   fNumData;   
    45     Int_t   fNumDim; 
     47    Int_t   fNumData;
     48    Int_t   fNumDim;
    4649
    4750    // true  and estimated hadronness
    48     TArrayI fHadTrue; 
     51    TArrayI fHadTrue;
    4952    TArrayF fHadEst;
    5053
     
    5760    Bool_t  fUsePriors;
    5861    TArrayF fPrior;
    59     TArrayF fWeight;   
     62    TArrayF fWeight;
    6063    TArrayI fNTimesOutBag;
    6164
     
    6366    TArrayD fTreeHad;
    6467    Float_t fErr;
    65 
    66     // decrease in Gini-index
    67     TArrayF fGiniDec;   
    6868
    6969protected:
     
    7474public:
    7575    MRanForest(const char *name=NULL, const char *title=NULL);
     76    ~MRanForest();
    7677
    7778    // initialize forest
     
    8081
    8182    // tree growing
    82     void   SetupForest();
    83     void   SetTree(MRanTree *rantree);
    84     Bool_t AddTree();
     83    //void   SetupForest();
    8584    Bool_t SetupGrow(MHMatrix *mhad,MHMatrix *mgam);
    8685    Bool_t GrowForest();
     86    void SetCurTree(MRanTree *rantree) { fRanTree=rantree; }
     87    Bool_t AddTree(MRanTree *rantree);
    8788
    8889    // getter methods
    8990    TObjArray *GetForest() { return fForest; }
     91    MRanTree *GetCurTree() { return fRanTree; }
    9092    Int_t      GetNumTrees() const { return fNumTrees; }
    9193    Int_t      GetNumData() const { return fNumData; }
    9294    Int_t      GetNumDim() const { return fNumDim; }
    9395    Double_t   GetTreeHad(Int_t i) const { return fTreeHad.At(i); }
    94     Float_t    GetGiniDec(Int_t i) const { return fGiniDec.At(i); }
    95 
     96 
    9697    // use forest to calculate hadronness of event
    9798    Double_t CalcHadroness(TVector &event);
  • trunk/MagicSoft/Mars/manalysis/MRanForestCalc.cc

    r1864 r1870  
    3737
    3838#include "MHMatrix.h" // must be before MLogManip.h
     39#include "MDataArray.h"
    3940
    4041#include "MLog.h"
     
    104105    }
    105106
    106     fData = fRanTree->GetData();
     107    /*if(!fRanForest->GetCurTree())
     108    {
     109        *fLog << err << dbginf << "MRanForest does not contain trees... aborting." << endl;
     110        return kFALSE;
     111    }*/
     112
     113    fData = fRanTree->GetRules();
    107114
    108115    if (!fData)
  • trunk/MagicSoft/Mars/manalysis/MRanForestFill.cc

    r1864 r1870  
    4646
    4747static const TString gsDefName  = "MRanForestFill";
    48 static const TString gsDefTitle = "Tree Classification Loop 1/2";
     48static const TString gsDefTitle = "Tree Classification Loop";
    4949
    5050// --------------------------------------------------------------------------
     
    8686    }
    8787
    88     fRanForest->SetupForest();
    8988    fNum=0;
    9089
     
    9897{
    9998    fNum++;
    100     fRanForest->SetTree(fRanTree);
    101     if(!(fRanForest->AddTree()))
     99    if(!(fRanForest->AddTree(fRanTree)))
    102100        return kFALSE;
    103101
  • trunk/MagicSoft/Mars/manalysis/MRanForestGrow.cc

    r1864 r1870  
    9696
    9797    fRanTree = (MRanTree*)plist->FindCreateObj("MRanTree");
    98     if (!fRanTree)                                                             
    99     {                                                                           
    100         *fLog << err << dbginf << "MRanTree not found... aborting." << endl;   
    101         return kFALSE;                                                         
     98    if (!fRanTree)
     99    {
     100        *fLog << err << dbginf << "MRanTree not found... aborting." << endl;
     101        return kFALSE;
    102102    }
    103103
     
    111111    fRanTree->SetNumTry(fNumTry);
    112112    fRanTree->SetNdSize(fNdSize);
    113 
     113    fRanForest->SetCurTree(fRanTree);
    114114    fRanForest->SetNumTrees(fNumTrees);
    115     fRanForest->SetTree(fRanTree);
    116115
    117116    return fRanForest->SetupGrow(fMHadrons,fMGammas);
     
    136135    return kTRUE;
    137136}
    138 
    139 void MRanForestGrow::SetNumTrees(Int_t n)
    140 {
    141     fNumTrees=n;
    142 }
    143 
    144 void MRanForestGrow::SetNumTry(Int_t n)
    145 {
    146     fNumTry=n;
    147 }
    148 
    149 void MRanForestGrow::SetNdSize(Int_t n)
    150 {
    151     fNdSize=n;
    152 }
  • trunk/MagicSoft/Mars/manalysis/MRanForestGrow.h

    r1864 r1870  
    3434    MRanForestGrow(const char *name=NULL, const char *title=NULL);
    3535
    36     void SetNumTrees(Int_t n);
    37     void SetNumTry(Int_t n);
    38     void SetNdSize(Int_t n);
     36    void SetNumTrees(Int_t n){    fNumTrees=n;}
     37    void SetNumTry(Int_t n)  {    fNumTry=n;  }
     38    void SetNdSize(Int_t n)  {    fNdSize=n;  }
    3939
    4040    Bool_t PreProcess(MParList *pList);
  • trunk/MagicSoft/Mars/manalysis/MRanTree.cc

    r1866 r1870  
    4747// Default constructor.
    4848//
    49 MRanTree::MRanTree(const char *name, const char *title):fData(NULL)
    50 {
     49MRanTree::MRanTree(const char *name, const char *title):fNdSize(0), fNumTry(3), fData(NULL)
     50{
     51
    5152    fName  = name  ? name  : "MRanTree";
    52     fTitle = title ? title : "Storage container for structure of a single tree and additional information";
     53    fTitle = title ? title : "Storage container for structure of a single tree";
    5354}
    5455
    5556void MRanTree::SetNdSize(Int_t n)
    5657{
    57     // minimum nodesize of terminal nodes
     58    // threshold nodesize of terminal nodes, i.e. the training data is splitted
     59    // until there is only pure date in the subsets(=terminal nodes) or the
     60    // subset size is LE n
     61
    5862    fNdSize=TMath::Max(1,n);//at least 1 event per node
    5963}
     
    6266{
    6367    // number of trials in random split selection:
    64     // choose at least 1 variable to split in...
     68    // choose at least 1 variable to split in
     69
    6570    fNumTry=TMath::Max(1,n);
    66     // and not more candidates than available
    67     if(fData)
    68         fNumTry=TMath::Min(fData->GetNumEntries(),n);
    69 }
    70 
    71 void MRanTree::GrowTree(TMatrix &mhad,TMatrix &mgam,Int_t numdata, Int_t numdim,TArrayI &hadtrue,TArrayI &datasort,
    72                         TArrayI &datarang,TArrayF &ginidec,TArrayF &tclasspop,TArrayI &jinbag,
    73                         TArrayF &winbag,TArrayF &weight,TRandom &rand)
    74 {
    75     //Int_t nrnodes=2*(numdata/fNdSize)+1;
     71}
     72
     73void MRanTree::GrowTree(TMatrix &mhad,TMatrix &mgam,Int_t numdata, Int_t numdim,TArrayI &hadtrue,
     74                        TArrayI &datasort,TArrayI &datarang,TArrayF &tclasspop,TArrayI &jinbag,
     75                        TArrayF &winbag,TArrayF &weight)
     76{
     77    // arrays have to be initialized with generous size, so number of total nodes (nrnodes)
     78    // is estimated for worst case
    7679    Int_t nrnodes=2*numdata+1;
     80
     81    // number of events in bootstrap sample
    7782    Int_t ninbag=0;
    7883    for (Int_t n=0;n<numdata;n++)
    7984        if(jinbag[n]==1) ninbag++;
    8085
     86    // weighted class populations after split
     87    TArrayF wl(2); // left node
     88    TArrayF wc(2);
     89    TArrayF wr(2); // right node
     90    TArrayI nc(2);
    8191
    8292    TArrayI bestsplit(nrnodes);
    83     TArrayF wl(2);
    84     TArrayF wc(2);
    85     TArrayF wr(2);
    86     TArrayI nc(2);
    87 
    8893    TArrayI bestsplitnext(nrnodes);
    8994    TArrayI nodepop(nrnodes);
     
    107112    fBestSplit.Reset();
    108113
     114    fGiniDec.Set(numdim);
     115    fGiniDec.Reset();
     116
    109117    // tree growing
    110118    BuildTree(datasort,datarang,hadtrue,numdim,numdata,bestsplit,
    111               bestsplitnext,ginidec,nodepop,nodestart,tclasspop,nrnodes,
    112               idmove,ncase,parent,jinbag,iv,winbag,wr,wc,wl,ninbag,rand);
    113 
     119              bestsplitnext,nodepop,nodestart,tclasspop,nrnodes,
     120              idmove,ncase,parent,jinbag,iv,winbag,wr,wc,wl,ninbag);
     121
     122    // post processing, determine cut (or split) values fBestSplit
    114123    Int_t nhad=mhad.GetNrows();
    115124
     
    128137    }
    129138
     139    // resizing arrays to save memory
    130140    fBestVar.Set(fNumNodes);
    131141    fTreeMap1.Set(fNumNodes);
     
    138148                             Int_t &msplit,Float_t &decsplit,Int_t &nbest,TArrayI &ncase,
    139149                             TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,
    140                              TArrayF &wc,TArrayF &wl,Int_t kbuild,TRandom &rand)
    141 {
    142     // For the best split, msplit is the variable split on. decsplit is the dec. in impurity.
     150                             TArrayF &wc,TArrayF &wl,Int_t kbuild)
     151{
     152    // For the best split, msplit is the index of the variable (e.g Hillas par., zenith angle ,...)
     153    // split on. decsplit is the decreae in impurity measured by Gini-index.
    143154    // nsplit is the case number of value of msplit split on,
    144155    // and nsplitnext is the case number of the next larger value of msplit.
     
    148159    Float_t rrn, rrd, rln, rld, u;
    149160
    150     // compute initial values of numerator and denominator of Gini
     161    // compute initial values of numerator and denominator of Gini-index,
     162    // Gini index= pno/dno
    151163    Float_t pno=0;
    152164    Float_t pdo=0;
     
    160172    jstat=0;
    161173
    162     // start main loop through variables to find best split
     174    // start main loop through variables to find best split,
     175    // (Gini-index as criterium crit)
    163176
    164177    critmax=-1.0e20;
     178
     179    // random split selection, number of trials = fNumTry
    165180    for(Int_t mt=0;mt<fNumTry;mt++)
    166181    {
    167         mvar=Int_t(mdim*rand.Rndm());
    168 
     182        mvar=Int_t(mdim*gRandom->Rndm());
     183
     184        // Gini index = rrn/rrd+rln/rld
    169185        rrn=pno;
    170186        rrd=pdo;
     
    263279        for (Int_t n=ndstart;n<=ndend;n++)
    264280        {
    265 
    266281            ih=datasort[msh*numdata+n];
    267             if (idmove[ih]==0)
    268             {
     282            if (idmove[ih]==0){
    269283                k++;
    270284                tdatasort[k]=datasort[msh*numdata+n];
     
    272286        }
    273287        for(Int_t k=ndstart;k<=ndend;k++)
    274         {
    275288            datasort[msh*numdata+k]=tdatasort[k];
    276         }
    277     }
    278  
     289    }
     290
    279291    // compute case nos. for right and left nodes.
    280292
    281293    for(Int_t n=ndstart;n<=ndend;n++)
    282     {
    283294        ncase[n]=datasort[msplit*numdata+n];
    284     }
    285295
    286296    return;
     
    289299void MRanTree::BuildTree(TArrayI &datasort,TArrayI &datarang,TArrayI &hadtrue,Int_t mdim,
    290300                         Int_t numdata,TArrayI &bestsplit,TArrayI &bestsplitnext,
    291                          TArrayF &ginidec,TArrayI &nodepop,TArrayI &nodestart,TArrayF &tclasspop,
     301                         TArrayI &nodepop,TArrayI &nodestart,TArrayF &tclasspop,
    292302                         Int_t nrnodes,TArrayI &idmove,TArrayI &ncase,TArrayI &parent,
    293303                         TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,TArrayF &wc,
    294                          TArrayF &wl,Int_t ninbag,TRandom &rand)
     304                         TArrayF &wl,Int_t ninbag)
    295305{
    296306    // Buildtree consists of repeated calls to two void functions, FindBestSplit and MoveData.
     
    336346          if (kbuild>ncur) break;
    337347          if (nodestatus[kbuild]!=2) continue;
    338        
     348
    339349          // initialize for next call to FindBestSplit
    340350
     
    342352          ndend=ndstart+nodepop[kbuild]-1;
    343353          for (Int_t j=0;j<2;j++)
    344           {
    345354            tclasspop[j]=classpop[j*nrnodes+kbuild];
    346           }
    347355
    348356          jstat=FindBestSplit(datasort,datarang,hadtrue,mdim,numdata,
    349357                              ndstart,ndend,tclasspop,msplit,decsplit,
    350358                              nbest,ncase,jinbag,iv,winbag,wr,wc,wl,
    351                               kbuild,rand);
     359                              kbuild);
    352360
    353361          if(jstat==1) {
     
    356364          }else{
    357365              fBestVar[kbuild]=msplit;
    358               ginidec[msplit]+=decsplit;
     366              fGiniDec[msplit]+=decsplit;
    359367
    360368              bestsplit[kbuild]=datasort[msplit*numdata+nbest];
     
    373381
    374382          // find class populations in both nodes
    375        
     383
    376384          for (Int_t n=ndstart;n<=ndendl;n++)
    377385          {
     
    386394              Int_t j=hadtrue[nc];
    387395              classpop[j*nrnodes+ncur+2]+=winbag[nc];
    388        
    389396          }
    390397
    391398          // check on nodestatus
    392  
     399
    393400          nodestatus[ncur+1]=2;
    394401          nodestatus[ncur+2]=2;
     
    402409            popt2+=classpop[j*nrnodes+ncur+2];
    403410          }
    404          
     411
    405412          for (Int_t j=0;j<2;j++)
    406413          {
     
    408415            if (classpop[j*nrnodes+ncur+2]==popt2) nodestatus[ncur+2]=-1;
    409416          }
    410  
     417
    411418          fTreeMap1[kbuild]=ncur+1;
    412419          fTreeMap2[kbuild]=ncur+2;
     
    428435    fNumEndNodes=0;
    429436    for (Int_t kn=0;kn<fNumNodes;kn++)
    430     {
    431437        if(nodestatus[kn]==-1)
    432438        {
     
    438444                {
    439445                    // class + status of node kn coded into fBestVar[kn]
    440                     fBestVar[kn]=j-2; 
     446                    fBestVar[kn]=j-2;
    441447                    pp=classpop[j*nrnodes+kn];
    442448                }
     
    445451            fBestSplit[kn]/=(classpop[0*nrnodes+kn]+classpop[1*nrnodes+kn]);
    446452        }
    447     }
     453
    448454    return;
    449455}
     
    468474
    469475        Int_t m=fBestVar[kt];
     476
    470477        if (event(m)<=fBestSplit[kt])
    471         {
    472478            kt=fTreeMap1[kt];
    473         }else{
     479        else
    474480            kt=fTreeMap2[kt];
    475         }
    476     }
     481    }
     482
    477483    return fBestSplit[kt];
    478484}
     
    500506
    501507        Int_t m=fBestVar[kt];
     508
    502509        if (event(m)<=fBestSplit[kt])
    503         {
    504510            kt=fTreeMap1[kt];
    505         }else{
     511        else
    506512            kt=fTreeMap2[kt];
    507         }
    508     }
     513
     514    }
     515
    509516    return fBestSplit[kt];
    510517}
  • trunk/MagicSoft/Mars/manalysis/MRanTree.h

    r1866 r1870  
    3030
    3131    TArrayI fBestVar;
    32     TArrayI fTreeMap1; 
    33     TArrayI fTreeMap2; 
     32    TArrayI fTreeMap1;
     33    TArrayI fTreeMap2;
    3434    TArrayF fBestSplit;
     35
     36    TArrayF fGiniDec;
    3537
    3638public:
     
    4143    void SetRules(MDataArray *rules);
    4244
    43     MDataArray *GetData() { return fData;}
     45    MDataArray *GetRules() { return fData;}
    4446
    4547    Int_t GetNdSize() const { return fNdSize; }
     
    5557    Float_t GetBestSplit(Int_t i)const { return fBestSplit.At(i); }
    5658
     59    Float_t GetGiniDec(Int_t i)  const { return fGiniDec.At(i); }
     60
    5761    // functions used in tree growing process
    5862    void GrowTree(TMatrix &mhad,TMatrix &mgam,Int_t numdata, Int_t numdim,TArrayI &hadtrue,
    59                   TArrayI &datasort,TArrayI &datarang,TArrayF &ginidec,TArrayF &classpopw,
    60                   TArrayI &jinbag,TArrayF &winbag,TArrayF &weight,TRandom &rand);
     63                  TArrayI &datasort,TArrayI &datarang,TArrayF &tclasspop,TArrayI &jinbag,
     64                  TArrayF &winbag,TArrayF &weight);
    6165
    6266    Int_t FindBestSplit(TArrayI &datasort,TArrayI &datarang,TArrayI &hadtrue,Int_t mdim,
     
    6468                        Int_t &msplit,Float_t &decsplit,Int_t &nbest,TArrayI &ncase,
    6569                        TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,
    66                         TArrayF &wc,TArrayF &wl,Int_t kbuild,TRandom &rand);
     70                        TArrayF &wc,TArrayF &wl,Int_t kbuild);
    6771
    6872    void MoveData(TArrayI &datasort,Int_t mdim,Int_t numdata,Int_t ndstart,
     
    7276    void BuildTree(TArrayI &datasort,TArrayI &datarang,TArrayI &hadtrue,Int_t mdim,
    7377                   Int_t numdata,TArrayI &bestsplit,TArrayI &bestsplitnext,
    74                    TArrayF &ginidec,TArrayI &nodepop,TArrayI &nodestart,TArrayF &tclasspop,
     78                   TArrayI &nodepop,TArrayI &nodestart,TArrayF &tclasspop,
    7579                   Int_t nrnodes,TArrayI &idmove,TArrayI &ncase,TArrayI &parent,
    7680                   TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,TArrayF &wc,
    77                    TArrayF &wl,Int_t ninbag,TRandom &rand);
     81                   TArrayF &wl,Int_t ninbag);
    7882
    7983    Double_t TreeHad(TVector &event);
  • trunk/MagicSoft/Mars/mhist/MHRanForest.cc

    r1866 r1870  
    114114
    115115    Int_t ntrees=fRanForest->GetNumTrees();
    116 
     116    //cout<<"filling"<<endl;
    117117    for (Int_t i=0;i<ntrees;i++)
    118118    {
  • trunk/MagicSoft/Mars/mhist/MHRanForestGini.cc

    r1866 r1870  
    4141#include "MParList.h"
    4242#include "MBinning.h"
     43#include "MRanTree.h"
    4344#include "MRanForest.h"
    4445
    4546#include "MLog.h"
    4647#include "MLogManip.h"
    47 
    48 #include "MMcEvt.hxx"
    4948
    5049ClassImp(MHRanForestGini);
     
    8483Bool_t MHRanForestGini::SetupFill(const MParList *plist)
    8584{
    86     fMcEvt = (MMcEvt*)plist->FindObject("MMcEvt");
    87     if (!fMcEvt)
    88     {
    89         *fLog << err << dbginf << "MMcEvt not found... aborting." << endl;
    90         return kFALSE;
    91     }
    92 
    9385    fRanForest = (MRanForest*)plist->FindObject("MRanForest");
    9486    if (!fRanForest)
     
    111103{
    112104    for (Int_t i=0;i<fRanForest->GetNumDim();i++)
    113         fGini[i]+=fRanForest->GetGiniDec(i);
     105        fGini[i]+=fRanForest->GetCurTree()->GetGiniDec(i);
    114106
    115107    return kTRUE;
     
    163155    {
    164156        g.GetXaxis()->SetRangeUser(0, fRanForest->GetNumTrees());
    165         g.GetXaxis()->SetTitle("No. of RF-input parameter parameter");
     157        g.GetXaxis()->SetTitle("No. of RF-input parameter");
    166158        g.GetYaxis()->SetTitle("Mean decrease in Gini-index [a.u.]");
    167159        g.SetMarkerStyle(kFullDotlarge);
     
    193185    {
    194186        fGraphGini->GetXaxis()->SetRangeUser(0, 1);
    195         fGraphGini->GetXaxis()->SetTitle("No. of parameter");
     187        fGraphGini->GetXaxis()->SetTitle("No. of RF-input parameter");
    196188        fGraphGini->GetYaxis()->SetTitle("Mean decrease in Gini-index [a.u.]");
    197189
  • trunk/MagicSoft/Mars/mhist/MHRanForestGini.h

    r1866 r1870  
    1313class TGraph;
    1414class MParList;
    15 class MMcEvt;
    1615class MRanForest;
     16class MRanTree;
    1717
    1818class MHRanForestGini : public MH
    1919{
    2020private:
    21     const MMcEvt *fMcEvt;          //!
    22     const MRanForest *fRanForest;  //!
     21    MRanForest *fRanForest;
    2322
    24     TArrayF fGini;                 //!
    25     TGraph *fGraphGini;            //->
     23    TArrayF fGini;
     24    TGraph *fGraphGini;
    2625
    2726public:
Note: See TracChangeset for help on using the changeset viewer.