ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/Angles/src/BdtInfo.cc
Revision: 1.1
Committed: Thu Feb 7 08:58:29 2013 UTC (12 years, 3 months ago) by dkralph
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Error occurred while calculating annotation data.
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "BdtInfo.h"
2 //----------------------------------------------------------------------------------------
3 BdtInfo::BdtInfo(TString varStr, TString weightFile, filestuff *fs, bool translatePar)
4 {
5 translate = translatePar;
6 // variables
7 varStr.ReplaceAll(":"," ");
8 stringstream ss(varStr.Data());
9 while(!ss.eof()) {
10 TString var;
11 ss >> var;
12 vars.push_back(var);
13 setVar(var,fs);
14 cout << "VAR: " << var << endl;
15 reader.AddVariable(translate ? trans(var) : var, vals[var]);
16 }
17 // spectators
18 TString specStr("m4l");
19 if(!translate) specStr += " run lumi evt";
20 stringstream ssSpec(specStr.Data());
21 while(!ssSpec.eof()) {
22 TString spec;
23 ssSpec >> spec;
24 specs.push_back(spec);
25 setSpec(spec,fs);
26 reader.AddSpectator(spec, vals[spec]);
27 }
28
29 // reader = new TMVA::Reader("V");
30 reader.BookMVA("BDTG", weightFile);
31 }
32 //----------------------------------------------------------------------------------------
33 void BdtInfo::setVar(TString name, filestuff *fs)
34 {
35 if(name=="costheta1") vals[name] = &fs->angles->costheta1;
36 else if(name=="costheta2") vals[name] = &fs->angles->costheta2;
37 else if(name=="costhetastar") vals[name] = &fs->angles->costhetastar;
38 else if(name=="Phi") vals[name] = &fs->angles->Phi;
39 else if(name=="Phi1") vals[name] = &fs->angles->Phi1;
40 else if(name=="mZ1") vals[name] = &fs->kine->mZ1;
41 else if(name=="mZ2") vals[name] = &fs->kine->mZ2;
42 // pt variables
43 else if(name=="ZZpt" || name=="ZZpt/m4l") vals[name] = new float(0);
44 else if(name=="ZZdotZ1" || name=="Z1pt/m4l") vals[name] = new float(0);
45 else if(name=="ZZdotZ2" || name=="Z2pt/m4l") vals[name] = new float(0);
46 else if(name=="ZZptCosDphiZ1pt" || name=="ZZdotZ1/(m4l*mZ1)") vals[name] = &fs->kine->ZZptZ1ptCosDphi;
47 else if(name=="ZZptCosDphiZ2pt" || name=="ZZdotZ2/(m4l*mZ2)") vals[name] = &fs->kine->ZZptZ2ptCosDphi;
48 else if(name=="Z1pt") vals[name] = new float(0);
49 else if(name=="Z2pt") vals[name] = new float(0);
50 else if(name=="ZZy") vals[name] = &fs->kine->ZZy;
51 // jet variables
52 else if(name=="nJets" ) vals[name] = fs->vk->getFloatValAddr("nJets" );
53 else if(name=="mjj" ) vals[name] = fs->vk->getFloatValAddr("mjj" );
54 else if(name=="dEta" ) vals[name] = fs->vk->getFloatValAddr("dEta" );
55 else if(name=="etaProd" ) vals[name] = fs->vk->getFloatValAddr("etaProd" );
56 else if(name=="dphiJ1HiPtZ" ) vals[name] = fs->vk->getFloatValAddr("dphiJ1HiPtZ" );
57 else if(name=="dphiJ1LoPtZ" ) vals[name] = fs->vk->getFloatValAddr("dphiJ1LoPtZ" );
58 else if(name=="dEtaJ1HiPtZ" ) vals[name] = fs->vk->getFloatValAddr("dEtaJ1HiPtZ" );
59 else if(name=="dEtaJ1LoPtZ" ) vals[name] = fs->vk->getFloatValAddr("dEtaJ1LoPtZ" );
60 else if(name=="J1dotHiPtZ" ) vals[name] = fs->vk->getFloatValAddr("J1dotHiPtZ" );
61 else if(name=="J1dotLoPtZ" ) vals[name] = fs->vk->getFloatValAddr("J1dotLoPtZ" );
62 else if(name=="dphiJ2HiPtZ" ) vals[name] = fs->vk->getFloatValAddr("dphiJ2HiPtZ" );
63 else if(name=="dphiJ2LoPtZ" ) vals[name] = fs->vk->getFloatValAddr("dphiJ2LoPtZ" );
64 else if(name=="dEtaJ2HiPtZ" ) vals[name] = fs->vk->getFloatValAddr("dEtaJ2HiPtZ" );
65 else if(name=="dEtaJ2LoPtZ" ) vals[name] = fs->vk->getFloatValAddr("dEtaJ2LoPtZ" );
66 else if(name=="J2dotHiPtZ" ) vals[name] = fs->vk->getFloatValAddr("J2dotHiPtZ" );
67 else if(name=="J2dotLoPtZ" ) vals[name] = fs->vk->getFloatValAddr("J2dotLoPtZ" );
68 else { cout << name << " not found!" << endl; assert(0); }
69 }
70 //----------------------------------------------------------------------------------------
71 void BdtInfo::setSpec(TString name, filestuff *fs)
72 {
73 if(name=="m4l") vals[name] = &fs->kine->m4l;
74 else if(name=="run") vals[name] = new float(0);
75 else if(name=="lumi") vals[name] = new float(0);
76 else if(name=="evt") vals[name] = new float(0);
77 else { cout << name << " not found!" << endl; assert(0); }
78 }
79 //----------------------------------------------------------------------------------------
80 void BdtInfo::setVals(filestuff *fs)
81 {
82 // all the rest of them are set automatically with TTree::GetEntry
83 if(vals.find(trans("ZZpt")) != vals.end()) {
84 *vals[trans("ZZpt")] = fs->kine->ZZpt/fs->kine->m4l;
85 *vals[trans("Z1pt")] = fs->kine->Z1pt/fs->kine->m4l;
86 *vals[trans("Z2pt")] = fs->kine->Z2pt/fs->kine->m4l;
87 *vals[trans("ZZdotZ1")] = fs->kine->ZZdotZ1/(fs->kine->m4l*fs->kine->mZ1);
88 *vals[trans("ZZdotZ2")] = fs->kine->ZZdotZ2/(fs->kine->m4l*fs->kine->mZ2);
89 }
90 if(!translate) {
91 *vals["run"] = fs->info->run;
92 *vals["lumi"] = fs->info->lumi;
93 *vals["evt"] = fs->info->evt;
94 }
95 }
96 //----------------------------------------------------------------------------------------
97 TString BdtInfo::trans(TString name)
98 {
99 if(!translate) return name;
100
101 if(name=="ZZpt") return "ZZpt/m4l";
102 else if(name=="Z1pt") return "Z1pt/m4l";
103 else if(name=="Z2pt") return "Z2pt/m4l";
104 else if(name=="ZZdotZ1") return "ZZdotZ1/(m4l*mZ1)";
105 else if(name=="ZZdotZ2") return "ZZdotZ2/(m4l*mZ2)";
106 else return name;
107 }