Ignore:
Timestamp:
07/29/03 13:18:57 (21 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mranforest
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mranforest/MHRanForest.cc

    r2173 r2296  
    6868    fGraphSigma = new TGraph;
    6969    fGraphSigma->SetTitle("Evolution of Standard deviation of estimated hadronness in tree combination");
    70     fGraphSigma->SetMaximum(1);
    7170    fGraphSigma->SetMarkerStyle(kFullDotSmall);
    7271}
     
    113112{
    114113    fNumEvent++;
     114
    115115    Double_t hest=0;
    116116    Double_t htrue=fMcEvt->GetPartId()==kGAMMA ? 0. : 1.;
     
    124124
    125125        hest/=i+1;
    126         fSigma[i]+=(htrue-hest)*(htrue-hest);
     126
     127        const Double_t val = htrue-hest;
     128        fSigma[i] += val*val;
    127129    }
    128130
     
    145147    for (Int_t i=0; i<n; i++)
    146148    {
    147         Stat_t ip = i+1.;
    148         fSigma[i] = TMath::Sqrt(fSigma[i]/Stat_t(fNumEvent));
    149         Stat_t ig = fSigma[i];
    150         max=TMath::Max(max,ig);
    151         min=TMath::Min(min,ig);
    152         fGraphSigma->SetPoint(i,ip,ig);
     149        fSigma[i] = TMath::Sqrt(fSigma[i]/fNumEvent);
     150
     151        const Stat_t ig = fSigma[i];
     152        if (ig>max) max = ig;
     153        if (ig<min) min = ig;
     154        fGraphSigma->SetPoint(i, i+1, ig);
    153155    }
     156
     157    // This is used in root>3.04/? so that SetMaximum/Minimum can succeed
     158    fGraphSigma->GetHistogram();
     159
    154160    fGraphSigma->SetMaximum(1.05*max);
    155161    fGraphSigma->SetMinimum(0.95*min);
     
    180186        return;
    181187
    182     h->GetXaxis()->SetRangeUser(0, 1);
     188    //h->GetXaxis()->SetRangeUser(0, fNumEvent+1);
    183189    h->SetXTitle("No.of Trees");
    184190    h->SetYTitle("\\sigma of est.hadronness");
  • trunk/MagicSoft/Mars/mranforest/MHRanForestGini.cc

    r2173 r2296  
    6666    fGraphGini = new TGraph;
    6767    fGraphGini->SetTitle("Importance of RF-input parameters measured by mean Gini decrease");
    68     fGraphGini->SetMaximum(1);
    6968    fGraphGini->SetMarkerStyle(kFullDotSmall);
    7069}
     
    116115Bool_t MHRanForestGini::Finalize()
    117116{
    118     Int_t n = fGini.GetSize();
     117    const Int_t n = fGini.GetSize();
    119118
    120119    fGraphGini->Set(n);
    121120
    122     Stat_t max=0.;
    123     Stat_t min=0.;
     121    Stat_t max=0;
     122    Stat_t min=0;
    124123    for (Int_t i=0; i<n; i++)
    125124    {
    126         fGini[i]/=fRanForest->GetNumTrees();
    127         fGini[i]/=fRanForest->GetNumData();
     125        fGini[i] /= fRanForest->GetNumTrees();
     126        fGini[i] /= fRanForest->GetNumData();
    128127
    129         Stat_t ip = i+1.;
    130         Stat_t ig = fGini[i];
     128        const Stat_t ip = i+1;
     129        const Stat_t ig = fGini[i];
    131130
    132         max=TMath::Max(max,ig);
    133         min=TMath::Min(min,ig);
     131        if (ig>max) max=ig;
     132        if (ig<min) min=ig;
    134133
    135134        fGraphGini->SetPoint(i,ip,ig);
    136135    }
     136
     137    // This is used in root>3.04/? so that SetMaximum/Minimum can succeed
     138    fGraphGini->GetHistogram();
     139
    137140    fGraphGini->SetMaximum(1.05*max);
    138141    fGraphGini->SetMinimum(0.95*min);
     
    163166        return;
    164167
    165     h->GetXaxis()->SetRangeUser(0, 1);
     168    //h->GetXaxis()->SetRangeUser(0, fGini.GetSize()+1);
    166169    h->SetXTitle("No.of RF-input parameter");
    167170    h->SetYTitle("Mean decrease in Gini-index [a.u.]");
  • trunk/MagicSoft/Mars/mranforest/MRanForest.cc

    r2173 r2296  
    103103    Int_t ntree=0;
    104104
    105     TIter forest(fForest);
     105    TIter Next(fForest);
    106106
    107107    MRanTree *tree;
    108     while ((tree=(MRanTree*)forest.Next()))
     108    while ((tree=(MRanTree*)Next()))
    109109    {
    110110        fTreeHad[ntree]=tree->TreeHad(event);
     
    112112        ntree++;
    113113    }
    114     return hadroness/Double_t(ntree);
     114    return hadroness/ntree;
    115115}
    116116
     
    190190Bool_t MRanForest::GrowForest()
    191191{
    192     Int_t ninbag=0;
    193     TArrayI datsortinbag;
    194     TArrayF classpopw;
    195     TArrayI jinbag;
    196     TArrayF winbag;
    197 
    198     jinbag.Set(fNumData);
    199     winbag.Set(fNumData);
    200     classpopw.Set(2);
    201 
    202     TMatrix hadrons=fHadrons->GetM();
    203     TMatrix gammas=fGammas->GetM();
     192    if(!gRandom)
     193    {
     194        *fLog << err << dbginf << "gRandom not initialized... aborting." << endl;
     195        return kFALSE;
     196    }
    204197
    205198    fTreeNo++;
    206199
    207200    // initialize running output
    208     if(fTreeNo==1)
    209     {
    210         cout<<endl<<endl<<"1st col.: no. of tree"<<endl;
    211         cout<<"2nd col.: error in % (calulated using oob-data -> overestim. of error)"<<endl;
    212     }
    213 
    214     jinbag.Reset();
    215     classpopw.Reset();
    216     winbag.Reset();
     201    if (fTreeNo==1)
     202    {
     203        *fLog << inf << endl;
     204        *fLog << underline; // << "1st col        2nd col" << endl;
     205        *fLog << "no. of tree    error in % (calulated using oob-data -> overestim. of error)" << endl;
     206    }
     207
     208    TArrayF classpopw(2);
     209    TArrayI jinbag(fNumData); // Initialization includes filling with 0
     210    TArrayF winbag(fNumData); // Initialization includes filling with 0
    217211
    218212    // bootstrap aggregating (bagging) -> sampling with replacement:
     
    221215    // {0,1,...,fNumData-1}, which is the set of the index numbers of
    222216    // all events in the training sample
    223 
    224     for (Int_t n=0;n<fNumData;n++)
    225     {
    226         if(!gRandom)
    227         {
    228             *fLog << err << dbginf << "gRandom not initialized... aborting." << endl;
    229             return kFALSE;
    230         }
    231 
    232         Int_t k=Int_t(fNumData*gRandom->Rndm());
     217    for (Int_t n=0; n<fNumData; n++)
     218    {
     219        const Int_t k = Int_t(gRandom->Rndm()*fNumData);
    233220
    234221        classpopw[fHadTrue[k]]+=fWeight[k];
     
    241228    // In bagging procedure ca. 2/3 of all elements in the original
    242229    // training sample are used to build the in-bag data
    243     datsortinbag=fDataSort;
    244 
    245     ModifyDataSort(datsortinbag,ninbag,jinbag);
     230    TArrayI datsortinbag=fDataSort;
     231    Int_t ninbag=0;
     232
     233    ModifyDataSort(datsortinbag, ninbag, jinbag);
     234
     235    const TMatrix &hadrons=fHadrons->GetM();
     236    const TMatrix &gammas =fGammas->GetM();
    246237
    247238    // growing single tree
     
    258249    // determined from oob-data is underestimated, but can still be taken as upper limit.
    259250
    260     TVector event(fNumDim);
    261     for(Int_t ievt=0;ievt<fNumHad;ievt++)
    262     {
    263         if(jinbag[ievt]>0)continue;
    264         event=TMatrixRow(hadrons,ievt);
    265         fHadEst[ievt]+=fRanTree->TreeHad(event);
     251    for (Int_t ievt=0;ievt<fNumHad;ievt++)
     252    {
     253        if (jinbag[ievt]>0)
     254            continue;
     255        fHadEst[ievt] += fRanTree->TreeHad(hadrons, ievt);
    266256        fNTimesOutBag[ievt]++;
    267257    }
    268     for(Int_t ievt=0;ievt<fNumGam;ievt++)
    269     {
    270         if(jinbag[fNumHad+ievt]>0)continue;
    271         event=TMatrixRow(gammas,ievt);
    272         fHadEst[fNumHad+ievt]+=fRanTree->TreeHad(event);
     258    for (Int_t ievt=0;ievt<fNumGam;ievt++)
     259    {
     260        if (jinbag[fNumHad+ievt]>0)
     261            continue;
     262        fHadEst[fNumHad+ievt] += fRanTree->TreeHad(gammas, ievt);
    273263        fNTimesOutBag[fNumHad+ievt]++;
    274264    }
    275265
    276266    Int_t n=0;
    277     fErr=0;
    278     for(Int_t ievt=0;ievt<fNumData;ievt++)
    279         if(fNTimesOutBag[ievt]!=0)
     267    Double_t ferr=0;
     268    for (Int_t ievt=0;ievt<fNumData;ievt++)
     269        if (fNTimesOutBag[ievt]!=0)
    280270        {
    281             fErr+=TMath::Power(fHadEst[ievt]/fNTimesOutBag[ievt]-fHadTrue[ievt],2.);
     271            const Double_t val = fHadEst[ievt]/fNTimesOutBag[ievt]-fHadTrue[ievt];
     272            ferr += val*val;
    282273            n++;
    283274        }
    284275
    285     fErr/=Float_t(n);
    286     fErr=TMath::Sqrt(fErr);
     276    ferr = TMath::Sqrt(ferr/n);
    287277
    288278    // give running output
    289     cout << setw(5) << fTreeNo << setw(15) << Form("%.2f",100.*fErr) << endl;
     279    *fLog << inf << setw(5) << fTreeNo << Form("%15.2f", ferr*100) << endl;
    290280
    291281    // adding tree to forest
    292282    AddTree();
    293283
    294     return(fTreeNo<fNumTrees);
     284    return fTreeNo<fNumTrees;
    295285}
    296286
     
    315305    TArrayI isort(fNumData);
    316306
    317     TMatrix hadrons=fHadrons->GetM();
    318     TMatrix gammas=fGammas->GetM();
     307    const TMatrix &hadrons=fHadrons->GetM();
     308    const TMatrix &gammas=fGammas->GetM();
    319309
    320310    for (Int_t j=0;j<fNumHad;j++)
     
    346336        for(Int_t n=0;n<fNumData-1;n++)
    347337        {
    348             Int_t n1=isort[n];
    349             Int_t n2=isort[n+1];
     338            const Int_t n1=isort[n];
     339            const Int_t n2=isort[n+1];
     340
    350341            fDataSort[mvar*fNumData+n]=n1;
    351342            if(n==0) fDataRang[mvar*fNumData+n1]=0;
     
    359350        fDataSort[(mvar+1)*fNumData-1]=isort[fNumData-1];
    360351    }
    361 
    362     return;
    363 }
    364 
    365 void MRanForest::ModifyDataSort(TArrayI &datsortinbag,Int_t ninbag,TArrayI &jinbag)
     352}
     353
     354void MRanForest::ModifyDataSort(TArrayI &datsortinbag, Int_t ninbag, const TArrayI &jinbag)
    366355{
    367356    ninbag=0;
     
    394383        }
    395384    }
    396     return;
    397385}
    398386
  • trunk/MagicSoft/Mars/mranforest/MRanForest.h

    r2114 r2296  
    6565    // estimates for classification error of growing forest
    6666    TArrayD fTreeHad;
    67     Float_t fErr;
    6867
    6968protected:
    7069    // create and modify (->due to bagging) fDataSort
    7170    void CreateDataSort();
    72     void ModifyDataSort(TArrayI &datsortinbag,Int_t ninbag,TArrayI &jinbag);
     71    void ModifyDataSort(TArrayI &datsortinbag, Int_t ninbag, const TArrayI &jinbag);
    7372
    7473public:
  • trunk/MagicSoft/Mars/mranforest/MRanForestCalc.cc

    r2207 r2296  
    8484// Needs:
    8585//  - MatrixGammas  [MHMatrix]
    86 //  - MatrixHadrons {MHMatrix]
     86//  - MatrixHadrons [MHMatrix]
    8787//  - MHadronness
    8888//  - all data containers used to build the matrixes
  • trunk/MagicSoft/Mars/mranforest/MRanTree.cc

    r2173 r2296  
    7676}
    7777
    78 void MRanTree::GrowTree(TMatrix &mhad,TMatrix &mgam,Int_t numdata, Int_t numdim,TArrayI &hadtrue,
     78void MRanTree::GrowTree(const TMatrix &mhad, const TMatrix &mgam,Int_t numdata, Int_t numdim,TArrayI &hadtrue,
    7979                        TArrayI &datasort,TArrayI &datarang,TArrayF &tclasspop,TArrayI &jinbag,
    8080                        TArrayF &winbag,TArrayF &weight)
     
    8888    for (Int_t n=0;n<numdata;n++)
    8989        if(jinbag[n]==1) ninbag++;
    90 
    91     // weighted class populations after split
    92     TArrayF wl(2); // left node
    93     TArrayF wc(2);
    94     TArrayF wr(2); // right node
    95     TArrayI nc(2);
    9690
    9791    TArrayI bestsplit(nrnodes);
     
    106100    TArrayI idmove(numdata);
    107101
    108     idmove.Reset();
    109 
    110102    fBestVar.Set(nrnodes);
    111103    fTreeMap1.Set(nrnodes);
     
    123115    BuildTree(datasort,datarang,hadtrue,numdim,numdata,bestsplit,
    124116              bestsplitnext,nodepop,nodestart,tclasspop,nrnodes,
    125               idmove,ncase,parent,jinbag,iv,winbag,wr,wc,wl,ninbag);
     117              idmove,ncase,parent,jinbag,iv,winbag,ninbag);
    126118
    127119    // post processing, determine cut (or split) values fBestSplit
    128120    Int_t nhad=mhad.GetNrows();
    129121
    130     for(Int_t k=0;k<nrnodes;k++)
    131     {
    132         Int_t bsp=bestsplit[k];
    133         Int_t bspn=bestsplitnext[k];
    134         Int_t msp=fBestVar[k];
    135 
    136         if (GetNodeStatus(k)!=-1)
    137         {
    138             fBestSplit[k] = bsp<nhad ? mhad(bsp,msp):mgam(bsp-nhad,msp);
    139             fBestSplit[k] += bspn<nhad ? mhad(bspn,msp):mgam(bspn-nhad,msp);
    140             fBestSplit[k] /=2.;
    141         }
     122    for(Int_t k=0; k<nrnodes; k++)
     123    {
     124        if (GetNodeStatus(k)==-1)
     125            continue;
     126
     127        const Int_t &bsp =bestsplit[k];
     128        const Int_t &bspn=bestsplitnext[k];
     129        const Int_t &msp =fBestVar[k];
     130
     131        fBestSplit[k]  = bsp<nhad  ? mhad(bsp, msp):mgam(bsp-nhad, msp);
     132        fBestSplit[k] += bspn<nhad ? mhad(bspn,msp):mgam(bspn-nhad,msp);
     133        fBestSplit[k] /= 2;
    142134    }
    143135
     
    152144                             Int_t numdata,Int_t ndstart,Int_t ndend,TArrayF &tclasspop,
    153145                             Int_t &msplit,Float_t &decsplit,Int_t &nbest,TArrayI &ncase,
    154                              TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,
    155                              TArrayF &wc,TArrayF &wl,Int_t kbuild)
    156 {
     146                             TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,Int_t kbuild)
     147{
     148    if(!gRandom)
     149    {
     150        *fLog << err << dbginf << "gRandom not initialized... aborting." << endl;
     151        return kFALSE;
     152    }
     153
     154    // weighted class populations after split
     155    TArrayF wc(2);
     156    TArrayF wr(2); // right node
     157
    157158    // For the best split, msplit is the index of the variable (e.g Hillas par., zenith angle ,...)
    158159    // split on. decsplit is the decreae in impurity measured by Gini-index.
     
    160161    // and nsplitnext is the case number of the next larger value of msplit.
    161162
    162     Int_t mvar,nc,nbestvar=0,jstat,k;
    163     Float_t crit,crit0,critmax,critvar=0;
     163    Int_t nc,nbestvar=0,k;
     164    Float_t crit;
    164165    Float_t rrn, rrd, rln, rld, u;
    165166
     
    171172    for (Int_t j=0;j<2;j++)
    172173    {
    173           pno+=tclasspop[j]*tclasspop[j];
    174           pdo+=tclasspop[j];
    175     }
    176     crit0=pno/pdo;
    177     jstat=0;
     174        pno+=tclasspop[j]*tclasspop[j];
     175        pdo+=tclasspop[j];
     176    }
     177
     178    const Double_t crit0=pno/pdo;
     179    Int_t jstat=0;
    178180
    179181    // start main loop through variables to find best split,
    180182    // (Gini-index as criterium crit)
    181183
    182     critmax=-1.0e20;  // FIXME: Replace by a constant from limits.h
     184    Double_t critmax=-1.0e20;  // FIXME: Replace by a constant from limits.h
    183185
    184186    // random split selection, number of trials = fNumTry
    185     if(!gRandom)
    186     {
    187         *fLog << err << dbginf << "gRandom not initialized... aborting." << endl;
    188         return kFALSE;
    189     }
    190187    for(Int_t mt=0;mt<fNumTry;mt++)
    191188    {
    192         mvar=Int_t(mdim*gRandom->Rndm());
     189        Int_t mvar=Int_t(gRandom->Rndm()*mdim);
    193190
    194191        // Gini index = rrn/rrd+rln/rld
     
    197194        rln=0;
    198195        rld=0;
    199         wl.Reset();
    200 
    201         for (Int_t j=0;j<2;j++)
    202         {
    203             wr[j]=tclasspop[j];
    204         }
    205 
    206         critvar=-1.0e20;
     196
     197        TArrayF wl(2); // left node
     198        wr = tclasspop;
     199
     200        Double_t critvar=-1.0e20;
    207201
    208202        for(Int_t nsp=ndstart;nsp<=ndend-1;nsp++)
     
    223217            if (datarang[mvar*numdata+nc]<datarang[mvar*numdata+datasort[mvar*numdata+nsp+1]])
    224218            {
    225                 if(TMath::Min(rrd,rld)>1.0e-5)
     219                if (TMath::Min(rrd,rld)>1.0e-5)
    226220                {
    227221                    crit=(rln/rld)+(rrn/rrd);
     
    309303                         TArrayI &nodepop,TArrayI &nodestart,TArrayF &tclasspop,
    310304                         Int_t nrnodes,TArrayI &idmove,TArrayI &ncase,TArrayI &parent,
    311                          TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,TArrayF &wc,
    312                          TArrayF &wl,Int_t ninbag)
     305                         TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,Int_t ninbag)
    313306{
    314307    // Buildtree consists of repeated calls to two void functions, FindBestSplit and MoveData.
     
    326319    // returns.
    327320
    328     Int_t msplit,nbest,ndendl,nc,jstat,ndend,ndstart;
     321    Int_t msplit, nbest, ndendl;
    329322    Float_t decsplit=0;
    330     Float_t popt1,popt2,pp;
    331     TArrayF classpop;
    332     TArrayI nodestatus;
    333 
    334     nodestatus.Set(nrnodes);
    335     classpop.Set(2*nrnodes);
    336 
    337     nodestatus.Reset();
     323    TArrayF classpop(2*nrnodes);
     324    TArrayI nodestatus(nrnodes);
     325
    338326    nodestart.Reset();
    339327    nodepop.Reset();
    340     classpop.Reset();
    341 
    342328
    343329    for (Int_t j=0;j<2;j++)
     
    357343          // initialize for next call to FindBestSplit
    358344
    359           ndstart=nodestart[kbuild];
    360           ndend=ndstart+nodepop[kbuild]-1;
     345          const Int_t ndstart=nodestart[kbuild];
     346          const Int_t ndend=ndstart+nodepop[kbuild]-1;
    361347          for (Int_t j=0;j<2;j++)
    362348            tclasspop[j]=classpop[j*nrnodes+kbuild];
    363349
    364           jstat=FindBestSplit(datasort,datarang,hadtrue,mdim,numdata,
    365                               ndstart,ndend,tclasspop,msplit,decsplit,
    366                               nbest,ncase,jinbag,iv,winbag,wr,wc,wl,
    367                               kbuild);
     350          const Int_t jstat=FindBestSplit(datasort,datarang,hadtrue,mdim,numdata,
     351                                          ndstart,ndend,tclasspop,msplit,decsplit,
     352                                          nbest,ncase,jinbag,iv,winbag,kbuild);
    368353
    369354          if(jstat==1) {
     
    392377          for (Int_t n=ndstart;n<=ndendl;n++)
    393378          {
    394               nc=ncase[n];
    395               Int_t j=hadtrue[nc];
     379              const Int_t nc=ncase[n];
     380              const Int_t j=hadtrue[nc];
    396381              classpop[j*nrnodes+ncur+1]+=winbag[nc];
    397382          }
     
    399384          for (Int_t n=ndendl+1;n<=ndend;n++)
    400385          {
    401               nc=ncase[n];
    402               Int_t j=hadtrue[nc];
     386              const Int_t nc=ncase[n];
     387              const Int_t j=hadtrue[nc];
    403388              classpop[j*nrnodes+ncur+2]+=winbag[nc];
    404389          }
     
    410395          if (nodepop[ncur+1]<=fNdSize) nodestatus[ncur+1]=-1;
    411396          if (nodepop[ncur+2]<=fNdSize) nodestatus[ncur+2]=-1;
    412           popt1=0;
    413           popt2=0;
     397
     398          Double_t popt1=0;
     399          Double_t popt2=0;
    414400          for (Int_t j=0;j<2;j++)
    415401          {
    416             popt1+=classpop[j*nrnodes+ncur+1];
    417             popt2+=classpop[j*nrnodes+ncur+2];
     402              popt1+=classpop[j*nrnodes+ncur+1];
     403              popt2+=classpop[j*nrnodes+ncur+2];
    418404          }
    419405
    420406          for (Int_t j=0;j<2;j++)
    421407          {
    422             if (classpop[j*nrnodes+ncur+1]==popt1) nodestatus[ncur+1]=-1;
    423             if (classpop[j*nrnodes+ncur+2]==popt2) nodestatus[ncur+2]=-1;
     408              if (classpop[j*nrnodes+ncur+1]==popt1) nodestatus[ncur+1]=-1;
     409              if (classpop[j*nrnodes+ncur+2]==popt2) nodestatus[ncur+2]=-1;
    424410          }
    425411
     
    446432        {
    447433            fNumEndNodes++;
    448             pp=0;
     434            Double_t pp=0;
    449435            for (Int_t j=0;j<2;j++)
    450436            {
     
    482468
    483469        const Int_t m=fBestVar[kt];
    484 
    485470        kt = event(m)<=fBestSplit[kt] ? fTreeMap1[kt] : fTreeMap2[kt];
    486471    }
    487472
    488473    return fBestSplit[kt];
     474}
     475
     476Double_t MRanTree::TreeHad(const TMatrixRow &event)
     477{
     478    Int_t kt=0;
     479    // to optimize on storage space node status and node class
     480    // are coded into fBestVar:
     481    // status of node kt = TMath::Sign(1,fBestVar[kt])
     482    // class  of node kt = fBestVar[kt]+2 (class defined by larger
     483    //  node population, actually not used)
     484    // hadronness assigned to node kt = fBestSplit[kt]
     485
     486    for (Int_t k=0;k<fNumNodes;k++)
     487    {
     488        if (fBestVar[kt]<0)
     489            break;
     490
     491        const Int_t m=fBestVar[kt];
     492        kt = event(m)<=fBestSplit[kt] ? fTreeMap1[kt] : fTreeMap2[kt];
     493    }
     494
     495    return fBestSplit[kt];
     496}
     497
     498Double_t MRanTree::TreeHad(const TMatrix &m, Int_t ievt)
     499{
     500    return TreeHad(TMatrixRow(m, ievt));
    489501}
    490502
  • trunk/MagicSoft/Mars/mranforest/MRanTree.h

    r2114 r2296  
    1515
    1616class TMatrix;
     17class TMatrixRow;
    1718class TVector;
    1819class TRandom;
     
    6061
    6162    // functions used in tree growing process
    62     void GrowTree(TMatrix &mhad,TMatrix &mgam,Int_t numdata, Int_t numdim,TArrayI &hadtrue,
     63    void GrowTree(const TMatrix &mhad, const TMatrix &mgam,Int_t numdata,
     64                  Int_t numdim,TArrayI &hadtrue,
    6365                  TArrayI &datasort,TArrayI &datarang,TArrayF &tclasspop,TArrayI &jinbag,
    6466                  TArrayF &winbag,TArrayF &weight);
     
    6769                        Int_t numdata,Int_t ndstart,Int_t ndend,TArrayF &tclasspop,
    6870                        Int_t &msplit,Float_t &decsplit,Int_t &nbest,TArrayI &ncase,
    69                         TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,
    70                         TArrayF &wc,TArrayF &wl,Int_t kbuild);
     71                        TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,Int_t kbuild);
    7172
    7273    void MoveData(TArrayI &datasort,Int_t mdim,Int_t numdata,Int_t ndstart,
     
    7879                   TArrayI &nodepop,TArrayI &nodestart,TArrayF &tclasspop,
    7980                   Int_t nrnodes,TArrayI &idmove,TArrayI &ncase,TArrayI &parent,
    80                    TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,TArrayF &wr,TArrayF &wc,
    81                    TArrayF &wl,Int_t ninbag);
     81                   TArrayI &jinbag,TArrayI &iv,TArrayF &winbag,Int_t ninbag);
    8282
    8383    Double_t TreeHad(const TVector &event);
     84    Double_t TreeHad(const TMatrixRow &event);
     85    Double_t TreeHad(const TMatrix &m, Int_t ievt);
    8486    Double_t TreeHad();
    8587
Note: See TracChangeset for help on using the changeset viewer.