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 |
|
|
}
|