Ignore:
Timestamp:
05/05/06 10:53:03 (18 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mranforest
Files:
2 edited

Legend:

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

    r7693 r7697  
    9999
    100100void MRanTree::GrowTree(TMatrix *mat, const MArrayF &hadtrue, const MArrayI &idclass,
    101                         MArrayI &datasort, const MArrayI &datarang, MArrayF &tclasspop,
     101                        MArrayI &datasort, const MArrayI &datarang, const MArrayF &tclasspop,
    102102                        const Float_t &mean, const Float_t &square, const MArrayI &jinbag, const MArrayF &winbag,
    103103                        const int nclass)
     
    192192    for (Int_t mt=0; mt<fNumTry; mt++)
    193193    {
    194         const Int_t mvar=Int_t(gRandom->Rndm()*mdim);
     194        const Int_t mvar= gRandom->Integer(mdim);
    195195        const Int_t mn  = mvar*numdata;
    196196
     
    201201        Double_t rld=0;
    202202
    203         MArrayF wl(nclass); // left node //nclass
     203        MArrayF wl(nclass);     // left node //nclass
    204204        MArrayF wr(tclasspop);  // right node//nclass
    205205
     
    212212
    213213            // do classification, Gini index as split rule
    214             rln+=u*(2*wl[k]+u);
     214            rln+=u*( 2*wl[k]+u);
    215215            rrn+=u*(-2*wr[k]+u);
    216216
     
    445445void MRanTree::BuildTree(MArrayI &datasort,const MArrayI &datarang, const MArrayF &hadtrue,
    446446                         const MArrayI &idclass, MArrayI &bestsplit, MArrayI &bestsplitnext,
    447                          MArrayF &tclasspop, const Float_t &tmean, const Float_t &tsquare, const MArrayF &winbag,
     447                         const MArrayF &tclasspop, const Float_t &tmean, const Float_t &tsquare, const MArrayF &winbag,
    448448                         Int_t ninbag, const int nclass)
    449449{
     
    481481    MArrayF mean(nrnodes);
    482482    MArrayF square(nrnodes);
     483    MArrayF lclasspop(tclasspop);
    483484
    484485    mean[0]=tmean;
     
    502503
    503504          for (Int_t j=0;j<nclass;j++)
    504               tclasspop[j]=classpop[j*nrnodes+kbuild];
     505              lclasspop[j]=classpop[j*nrnodes+kbuild];
    505506
    506507          Int_t msplit, nbest;
     
    508509
    509510          if ((this->*FindBestSplit)(datasort,datarang,hadtrue,idclass,ndstart,
    510                                      ndend, tclasspop,mean[kbuild],square[kbuild],msplit,decsplit,
     511                                     ndend, lclasspop,mean[kbuild],square[kbuild],msplit,decsplit,
    511512                                     nbest,winbag,nclass))
    512513          {
     
    621622}
    622623
    623 Double_t MRanTree::TreeHad(const TVector &event)
    624 {
    625     Int_t kt=0;
     624Double_t MRanTree::TreeHad(const Float_t *evt)
     625{
    626626    // to optimize on storage space node status and node class
    627627    // are coded into fBestVar:
     
    631631    // hadronness assigned to node kt = fBestSplit[kt]
    632632
    633     for (Int_t k=0;k<fNumNodes;k++)
    634     {
    635         if (fBestVar[kt]<0)
     633    // To get rid of the range check of the root classes
     634    const Float_t *split = fBestSplit.GetArray();
     635    const Int_t   *map1  = fTreeMap1.GetArray();
     636    const Int_t   *map2  = fTreeMap2.GetArray();
     637    const Int_t   *best  = fBestVar.GetArray();
     638
     639    Int_t kt=0;
     640    for (Int_t k=0; k<fNumNodes; k++)
     641    {
     642        if (best[kt]<0)
    636643            break;
    637644
    638         const Int_t m=fBestVar[kt];
    639         kt = event(m)<=fBestSplit[kt] ? fTreeMap1[kt] : fTreeMap2[kt];
    640     }
    641 
    642     return fBestSplit[kt];
     645        const Int_t m=best[kt];
     646        kt = evt[m]<=split[kt] ? map1[kt] : map2[kt];
     647    }
     648
     649    return split[kt];
     650}
     651
     652Double_t MRanTree::TreeHad(const TVector &event)
     653{
     654    return TreeHad(event.GetMatrixArray());
    643655}
    644656
    645657Double_t MRanTree::TreeHad(const TMatrixRow &event)
    646658{
    647     Int_t kt=0;
    648     // to optimize on storage space node status and node class
    649     // are coded into fBestVar:
    650     // status of node kt = TMath::Sign(1,fBestVar[kt])
    651     // class  of node kt = fBestVar[kt]+2 (class defined by larger
    652     //  node population, actually not used)
    653     // hadronness assigned to node kt = fBestSplit[kt]
    654 
    655     for (Int_t k=0;k<fNumNodes;k++)
    656     {
    657         if (fBestVar[kt]<0)
    658             break;
    659 
    660         const Int_t m=fBestVar[kt];
    661         kt = event(m)<=fBestSplit[kt] ? fTreeMap1[kt] : fTreeMap2[kt];
    662     }
    663 
    664     return fBestSplit[kt];
     659    return TreeHad(event.GetPtr());
    665660}
    666661
  • trunk/MagicSoft/Mars/mranforest/MRanTree.h

    r7693 r7697  
    4545         Int_t &, const MArrayF &, const int); //!
    4646
     47    Double_t TreeHad(const Float_t *evt);
    4748
    4849    int FindBestSplitGini(const MArrayI &datasort, const MArrayI &datarang,
     
    6667    void BuildTree(MArrayI &datasort, const MArrayI &datarang, const MArrayF &hadtrue,
    6768                   const MArrayI &idclass,MArrayI &bestsplit,MArrayI &bestsplitnext,
    68                    MArrayF &tclasspop, const Float_t &tmean, const Float_t &tsquare, const MArrayF &winbag,
     69                   const MArrayF &tclasspop, const Float_t &tmean, const Float_t &tsquare, const MArrayF &winbag,
    6970                   Int_t ninbag, const int nclass);
    7071
     
    9798    // functions used in tree growing process
    9899    void GrowTree(TMatrix *mat, const MArrayF &hadtrue, const MArrayI &idclass,
    99                   MArrayI &datasort, const MArrayI &datarang,MArrayF &tclasspop,
     100                  MArrayI &datasort, const MArrayI &datarang,const MArrayF &tclasspop,
    100101                  const Float_t &mean, const Float_t &square, const MArrayI &jinbag, const MArrayF &winbag,
    101102                  const int nclass);
Note: See TracChangeset for help on using the changeset viewer.