ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Utils/src/MuonIDMVA.cc
Revision: 1.1
Committed: Fri Dec 16 12:58:13 2011 UTC (13 years, 4 months ago) by sixie
Content type: text/plain
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 sixie 1.1 #include "MitPhysics/Utils/interface/MuonIDMVA.h"
2     #include "MitPhysics/Utils/interface/MuonTools.h"
3     #include "MitPhysics/Utils/interface/IsolationTools.h"
4     #include "MitAna/DataTree/interface/StableData.h"
5     #include <TFile.h>
6     #include <TRandom3.h>
7     #include "TMVA/Tools.h"
8     #include "TMVA/Reader.h"
9    
10    
11     ClassImp(mithep::MuonIDMVA)
12    
13     using namespace mithep;
14    
15     //--------------------------------------------------------------------------------------------------
16     MuonIDMVA::MuonIDMVA() :
17     fMethodname("BDTG method"),
18     fIsInitialized(kFALSE)
19     {
20     // Constructor.
21     for(UInt_t i=0; i<6; ++i) {
22     fTMVAReader[i] = 0;
23     }
24     }
25    
26    
27     //--------------------------------------------------------------------------------------------------
28     MuonIDMVA::~MuonIDMVA()
29     {
30     for(UInt_t i=0; i<6; ++i) {
31     if (fTMVAReader[i]) delete fTMVAReader[i];
32     }
33     }
34    
35     //--------------------------------------------------------------------------------------------------
36     void MuonIDMVA::Initialize( TString methodName,
37     TString Subdet0Pt10To14p5Weights ,
38     TString Subdet1Pt10To14p5Weights ,
39     TString Subdet0Pt14p5To20Weights,
40     TString Subdet1Pt14p5To20Weights,
41     TString Subdet0Pt20ToInfWeights,
42     TString Subdet1Pt20ToInfWeights,
43     MuonIDMVA::MVAType type) {
44    
45     fIsInitialized = kTRUE;
46    
47     fMethodname = methodName;
48    
49     for(UInt_t i=0; i<6; ++i) {
50     if (fTMVAReader[i]) delete fTMVAReader[i];
51    
52     fTMVAReader[i] = new TMVA::Reader( "!Color:!Silent:Error" );
53     fTMVAReader[i]->SetVerbose(kTRUE);
54    
55     if (type == kV3) {
56     fTMVAReader[i]->AddVariable( "TkNchi2", &fMVAVar_MuTkNchi2 );
57     fTMVAReader[i]->AddVariable( "GlobalNchi2", &fMVAVar_MuGlobalNchi2 );
58     fTMVAReader[i]->AddVariable( "NValidHits", &fMVAVar_MuNValidHits );
59     fTMVAReader[i]->AddVariable( "NTrackerHits", &fMVAVar_MuNTrackerHits );
60     fTMVAReader[i]->AddVariable( "NPixelHits", &fMVAVar_MuNPixelHits );
61     fTMVAReader[i]->AddVariable( "NMatches", &fMVAVar_MuNMatches );
62     fTMVAReader[i]->AddVariable( "D0", &fMVAVar_MuD0 );
63     fTMVAReader[i]->AddVariable( "IP3d", &fMVAVar_MuIP3d );
64     fTMVAReader[i]->AddVariable( "IP3dSig", &fMVAVar_MuIP3dSig );
65     fTMVAReader[i]->AddVariable( "TrkKink", &fMVAVar_MuTrkKink );
66     fTMVAReader[i]->AddVariable( "SegmentCompatibility", &fMVAVar_MuSegmentCompatibility );
67     fTMVAReader[i]->AddVariable( "CaloCompatibility", &fMVAVar_MuCaloCompatibility );
68     fTMVAReader[i]->AddVariable( "HadEnergyOverPt", &fMVAVar_MuHadEnergyOverPt );
69     if (i==0 || i==2 || i==4) {
70     fTMVAReader[i]->AddVariable( "HoEnergyOverPt", &fMVAVar_MuHoEnergyOverPt );
71     }
72     fTMVAReader[i]->AddVariable( "EmEnergyOverPt", &fMVAVar_MuEmEnergyOverPt );
73     fTMVAReader[i]->AddVariable( "HadS9EnergyOverPt", &fMVAVar_MuHadS9EnergyOverPt );
74     if (i==0 || i==2 || i==4) {
75     fTMVAReader[i]->AddVariable( "HoS9EnergyOverPt", &fMVAVar_MuHoS9EnergyOverPt );
76     }
77     fTMVAReader[i]->AddVariable( "EmS9EnergyOverPt", &fMVAVar_MuEmS9EnergyOverPt );
78     }
79    
80     if (i==0) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt10To14p5Weights );
81     if (i==1) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt10To14p5Weights );
82     if (i==2) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt14p5To20Weights );
83     if (i==3) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt14p5To20Weights );
84     if (i==4) fTMVAReader[i]->BookMVA(fMethodname , Subdet0Pt20ToInfWeights );
85     if (i==5) fTMVAReader[i]->BookMVA(fMethodname , Subdet1Pt20ToInfWeights );
86    
87     }
88    
89     std::cout << "Muon ID MVA Initialization\n";
90     std::cout << "MethodName : " << fMethodname << " , type == " << type << std::endl;
91     std::cout << "Load weights file : " << Subdet0Pt10To14p5Weights << std::endl;
92     std::cout << "Load weights file : " << Subdet1Pt10To14p5Weights << std::endl;
93     std::cout << "Load weights file : " << Subdet0Pt14p5To20Weights << std::endl;
94     std::cout << "Load weights file : " << Subdet1Pt14p5To20Weights << std::endl;
95     std::cout << "Load weights file : " << Subdet0Pt20ToInfWeights << std::endl;
96     std::cout << "Load weights file : " << Subdet1Pt20ToInfWeights << std::endl;
97    
98     }
99    
100     //--------------------------------------------------------------------------------------------------
101     Double_t MuonIDMVA::MVAValue(Double_t MuPt , Double_t MuEta,
102     Double_t MuTkNchi2,
103     Double_t MuGlobalNchi2,
104     Double_t MuNValidHits,
105     Double_t MuNTrackerHits,
106     Double_t MuNPixelHits,
107     Double_t MuNMatches,
108     Double_t MuD0,
109     Double_t MuIP3d,
110     Double_t MuIP3dSig,
111     Double_t MuTrkKink,
112     Double_t MuSegmentCompatibility,
113     Double_t MuCaloCompatibility,
114     Double_t MuHadEnergyOverPt,
115     Double_t MuHoEnergyOverPt,
116     Double_t MuEmEnergyOverPt,
117     Double_t MuHadS9EnergyOverPt,
118     Double_t MuHoS9EnergyOverPt,
119     Double_t MuEmS9EnergyOverPt
120     ) {
121    
122     if (!fIsInitialized) {
123     std::cout << "Error: MuonIDMVA not properly initialized.\n";
124     return -9999;
125     }
126    
127     Int_t subdet = 0;
128     if (fabs(MuEta) < 1.479) subdet = 0;
129     else subdet = 1;
130     Int_t ptBin = 0;
131     if (MuPt > 14.5) ptBin = 1;
132     if (MuPt > 20.0) ptBin = 2;
133    
134    
135     //set all input variables
136     fMVAVar_MuTkNchi2 = MuTkNchi2;
137     fMVAVar_MuGlobalNchi2 = MuGlobalNchi2;
138     fMVAVar_MuNValidHits = MuNValidHits;
139     fMVAVar_MuNTrackerHits = MuNTrackerHits;
140     fMVAVar_MuNPixelHits = MuNPixelHits;
141     fMVAVar_MuNMatches = MuNMatches;
142     fMVAVar_MuD0 = MuD0;
143     fMVAVar_MuIP3d = MuIP3d;
144     fMVAVar_MuIP3dSig = MuIP3dSig;
145     fMVAVar_MuTrkKink = MuTrkKink;
146     fMVAVar_MuSegmentCompatibility = MuSegmentCompatibility;
147     fMVAVar_MuCaloCompatibility = MuCaloCompatibility;
148     fMVAVar_MuHadEnergyOverPt = MuHadEnergyOverPt;
149     fMVAVar_MuHoEnergyOverPt = MuHoEnergyOverPt;
150     fMVAVar_MuEmEnergyOverPt = MuEmEnergyOverPt;
151     fMVAVar_MuHadS9EnergyOverPt = MuHadS9EnergyOverPt;
152     fMVAVar_MuHoS9EnergyOverPt = MuHoS9EnergyOverPt;
153     fMVAVar_MuEmS9EnergyOverPt = MuEmS9EnergyOverPt;
154    
155    
156     Double_t mva = -9999;
157     TMVA::Reader *reader = 0;
158    
159     Int_t MVABin = -1;
160     if (subdet == 0 && ptBin == 0) MVABin = 0;
161     if (subdet == 1 && ptBin == 0) MVABin = 1;
162     if (subdet == 0 && ptBin == 1) MVABin = 2;
163     if (subdet == 1 && ptBin == 1) MVABin = 3;
164     if (subdet == 0 && ptBin == 2) MVABin = 4;
165     if (subdet == 1 && ptBin == 2) MVABin = 5;
166     assert(MVABin >= 0 && MVABin <= 5);
167     reader = fTMVAReader[MVABin];
168    
169     mva = reader->EvaluateMVA( fMethodname );
170    
171     return mva;
172     }
173    
174    
175    
176     // //--------------------------------------------------------------------------------------------------
177     // Double_t MuonIDMVA::MVAValue(const Muon *ele, const Vertex *vertex) {
178    
179     // if (!fIsInitialized) {
180     // std::cout << "Error: MuonIDMVA not properly initialized.\n";
181     // return -9999;
182     // }
183    
184     // Int_t subdet = 0;
185     // if (ele->SCluster()->AbsEta() < 1.0) subdet = 0;
186     // else if (ele->SCluster()->AbsEta() < 1.479) subdet = 1;
187     // else subdet = 2;
188     // Int_t ptBin = 0;
189     // if (ele->Pt() > 20.0) ptBin = 1;
190    
191     // //set all input variables
192     // fMVAVar_EleSigmaIEtaIEta = ele->CoviEtaiEta() ;
193     // fMVAVar_EleDEtaIn = ele->DeltaEtaSuperClusterTrackAtVtx();
194     // fMVAVar_EleDPhiIn = ele->DeltaPhiSuperClusterTrackAtVtx();
195     // fMVAVar_EleHoverE = ele->HadronicOverEm();
196     // fMVAVar_EleD0 = ele->BestTrk()->D0Corrected(*vertex);
197     // fMVAVar_EleDZ = ele->BestTrk()->DzCorrected(*vertex);
198     // fMVAVar_EleFBrem = ele->FBrem();
199     // fMVAVar_EleEOverP = ele->ESuperClusterOverP();
200     // fMVAVar_EleESeedClusterOverPout = ele->ESeedClusterOverPout();
201     // if (!TMath::IsNaN(ele->SCluster()->Seed()->CoviPhiiPhi())) fMVAVar_EleSigmaIPhiIPhi = TMath::Sqrt(ele->SCluster()->Seed()->CoviPhiiPhi());
202     // else fMVAVar_EleSigmaIPhiIPhi = ele->CoviEtaiEta();
203     // fMVAVar_EleNBrem = ele->NumberOfClusters() - 1;
204     // fMVAVar_EleOneOverEMinusOneOverP = (1.0/(ele->SCluster()->Energy())) - 1.0 / ele->BestTrk()->P();
205     // fMVAVar_EleESeedClusterOverPIn = ele->ESeedClusterOverPIn();
206     // fMVAVar_EleIP3d = ele->Ip3dPV();
207     // fMVAVar_EleIP3dSig = ele->Ip3dPVSignificance();
208    
209     // Double_t mva = -9999;
210     // TMVA::Reader *reader = 0;
211     // Int_t MVABin = -1;
212     // if (subdet == 0 && ptBin == 0) MVABin = 0;
213     // if (subdet == 1 && ptBin == 0) MVABin = 1;
214     // if (subdet == 2 && ptBin == 0) MVABin = 2;
215     // if (subdet == 0 && ptBin == 1) MVABin = 3;
216     // if (subdet == 1 && ptBin == 1) MVABin = 4;
217     // if (subdet == 2 && ptBin == 1) MVABin = 5;
218     // assert(MVABin >= 0 && MVABin <= 5);
219     // reader = fTMVAReader[MVABin];
220    
221     // mva = reader->EvaluateMVA( fMethodname );
222    
223     // return mva;
224     // }