ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/LeptonSelection/src/bdtiface.cc
Revision: 1.1
Committed: Mon Feb 13 09:35:20 2012 UTC (13 years, 3 months ago) by khahn
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 khahn 1.1 #include "bdtiface.h"
2    
3     bdtiface::bdtiface(TString weightDir, TString cutfile)
4     {
5     binnamev.push_back("s0_pt0");
6     binnamev.push_back("s0_pt1");
7     binnamev.push_back("s1_pt0");
8     binnamev.push_back("s1_pt1");
9     binnamev.push_back("s2_pt0");
10     binnamev.push_back("s2_pt1");
11    
12     for(UInt_t i=0; i<binnamev.size(); i++) {
13     readers[binnamev[i]] = new TMVA::Reader( "!Color:!Silent" );
14     }
15    
16     map<TString,TMVA::Reader*>::iterator it;
17     for(it=readers.begin(); it!=readers.end(); it++) {
18     (*it).second->AddVariable( "SigmaIEtaIEta", &bdtvarEleSigmaIEtaIEta );
19     (*it).second->AddVariable( "DEtaIn", &bdtvarEleDEtaIn );
20     (*it).second->AddVariable( "DPhiIn", &bdtvarEleDPhiIn );
21     (*it).second->AddVariable( "D0", &bdtvarEleD0 );
22     (*it).second->AddVariable( "FBrem", &bdtvarEleFBrem );
23     (*it).second->AddVariable( "EOverP", &bdtvarEleEOverP );
24     (*it).second->AddVariable( "ESeedClusterOverPout", &bdtvarEleESeedClusterOverPout );
25     (*it).second->AddVariable( "SigmaIPhiIPhi", &bdtvarEleSigmaIPhiIPhi );
26     (*it).second->AddVariable( "NBrem", &bdtvarEleNBrem );
27     (*it).second->AddVariable( "OneOverEMinusOneOverP", &bdtvarEleOneOverEMinusOneOverP );
28     (*it).second->AddVariable( "ESeedClusterOverPIn", &bdtvarEleESeedClusterOverPIn );
29     (*it).second->AddSpectator("IP3d", &bdtvarEleIP3d);
30     (*it).second->AddSpectator("IP3dSig", &bdtvarEleIP3dSig);
31     (*it).second->AddSpectator("StandardLikelihood", &bdtvarStandardLikelihood);
32     (*it).second->AddSpectator("CicPass", &bdtvarCicPass);
33     (*it).second->AddSpectator("pt", &bdtvarPt);
34     (*it).second->AddSpectator("eta", &bdtvarEta);
35     (*it).second->AddSpectator("sceta", &bdtvarSCeta);
36     (*it).second->AddSpectator("pfiso", &bdtvarPFIso);
37     (*it).second->AddSpectator("isconv", &bdtvarIsConv);
38     (*it).second->AddSpectator("ptweight", &bdtvarWeight);
39     (*it).second->AddSpectator("nexphits", &bdtvarNExpHits);
40    
41     (*it).second->BookMVA("BDTG",weightDir+"/vN_"+(*it).first+"_BDTG.weights.xml");
42     }
43    
44     readBDTCuts(cutfile);
45     }
46     //----------------------------------------------------------------------------------------
47     TString bdtiface::getBinName(double pt, double sceta)
48     {
49     //classify by eta and pt bins
50     TString subdet;
51     if(fabs(sceta) < 1) subdet = "0";
52     else if (fabs(sceta) < 1.479) subdet = "1";
53     else subdet = "2";
54     TString ptBin("0");
55     if(pt > 20) ptBin = "1";
56    
57     return "s" + subdet + "_pt" + ptBin;
58     }
59     //----------------------------------------------------------------------------------------
60     void bdtiface::readBDTCuts(TString file)
61     {
62     // get bdt cut values from file
63     ifstream ifs;
64     ifs.open(file.Data());
65     assert(ifs.is_open());
66     string line;
67     while(getline(ifs,line)) {
68     stringstream ss(line);
69     string binname;
70     Double_t loosecut,mediumcut,tightcut;
71     ss >> binname >> loosecut >> mediumcut >> tightcut;
72     loosecuts[binname] = loosecut;
73     mediumcuts[binname] = mediumcut;
74     tightcuts[binname] = tightcut;
75     }
76     }
77     //----------------------------------------------------------------------------------------
78     double bdtiface::getBDTCut(double pt, double sceta, TString tightness)
79     {
80     TString binname = getBinName(pt,sceta);
81     if(tightness=="loose") return loosecuts[binname];
82     else if(tightness=="medium") return mediumcuts[binname];
83     else if(tightness=="tight") return tightcuts[binname];
84     else {cout << "error! bad tightness" << endl; assert(0); return -1;}
85     }
86     //----------------------------------------------------------------------------------------
87     Bool_t bdtiface::passBDT(Double_t pt, Double_t eta, TString tightness)
88     {
89     double bdtcut = getBDTCut(pt,eta,tightness);
90     TMVA::Reader *reader = readers[getBinName(pt,eta)];
91     double bdtval = reader->EvaluateMVA("BDTG");
92     // cout << "new bdt val: " << bdtval << " new bdt cut: " << bdtcut << endl;
93    
94     return bdtval > bdtcut;
95     }