ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/grimes/VHbbAnalysisCode/src/VHbbCandidateVariables.cpp
Revision: 1.1
Committed: Wed Aug 15 22:37:47 2012 UTC (12 years, 8 months ago) by grimes
Branch: MAIN
CVS Tags: HEAD
Log Message:
Long overdue commit with several new files

File Contents

# User Rev Content
1 grimes 1.1 #include "TrkUpgradeAnalysis/VHbb/interface/VHbbCandidateVariables.h"
2    
3     #include <sstream>
4     #include <stdexcept>
5     #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbCandidate.h"
6     #include "TrkUpgradeAnalysis/VHbb/interface/tools.h" // required for trkupgradeanalysis::tools::NTupleRow
7    
8     // Required to work out deltaPhi
9     #include "DataFormats/GeometryVector/interface/VectorUtil.h"
10    
11    
12     trkupgradeanalysis::variables::VHbbCandidateVariable::VHbbCandidateVariable( const std::string& name, size_t suggestedNumberOfBins, double suggestedLowerEdge, double suggestedUpperEdge ) :
13     name_(name), suggestedNumberOfBins_(suggestedNumberOfBins), suggestedLowerEdge_(suggestedLowerEdge), suggestedUpperEdge_(suggestedUpperEdge)
14     {
15     // No operation besides the initialiser list
16     }
17    
18     trkupgradeanalysis::variables::VHbbCandidateVariable::~VHbbCandidateVariable()
19     {
20     // No operation
21     }
22    
23     std::string trkupgradeanalysis::variables::VHbbCandidateVariable::variableName() const
24     {
25     return name_;
26     }
27    
28     double trkupgradeanalysis::variables::VHbbCandidateVariable::histogrammableValue() const
29     {
30     return value_;
31     }
32    
33     size_t trkupgradeanalysis::variables::VHbbCandidateVariable::suggestedNumberOfBins() const
34     {
35     return suggestedNumberOfBins_;
36     }
37    
38     double trkupgradeanalysis::variables::VHbbCandidateVariable::suggestedLowerEdge() const
39     {
40     return suggestedLowerEdge_;
41     }
42    
43     double trkupgradeanalysis::variables::VHbbCandidateVariable::suggestedUpperEdge() const
44     {
45     return suggestedUpperEdge_;
46     }
47    
48     void trkupgradeanalysis::variables::VHbbCandidateVariable::set( const trkupgradeanalysis::tools::NTupleRow& ntupleRow )
49     {
50     // The default implementation assumes the variable was saved with a branch name of the variable name
51     value_=ntupleRow.getDouble(name_);
52     }
53    
54    
55    
56    
57    
58     trkupgradeanalysis::variables::NumberOfAdditionalJets::NumberOfAdditionalJets( bool applyCleaning ) :
59     VHbbCandidateVariable("NumberOfAdditionalJets",91,-0.5,90.5), applyCleaning_(applyCleaning)
60     {
61     // No operation besides the initialiser list
62     }
63    
64     void trkupgradeanalysis::variables::NumberOfAdditionalJets::set( const VHbbCandidate& vhbbCandidate )
65     {
66     if( !applyCleaning_ ) value_=vhbbCandidate.additionalJets.size();
67     else
68     {
69     value_=0;
70     for( std::vector<VHbbEvent::SimpleJet>::const_iterator iJet=vhbbCandidate.additionalJets.begin(); iJet!=vhbbCandidate.additionalJets.end(); ++iJet )
71     {
72     if( jetId( *iJet )==true && fabs(iJet->p4.Eta()) < 2.5 && iJet->p4.Pt() > 20 ) ++value_;
73     }
74     }
75    
76     }
77    
78     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::NumberOfAdditionalJets::copy() const
79     {
80     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::NumberOfAdditionalJets(*this) );
81     }
82    
83     bool trkupgradeanalysis::variables::NumberOfAdditionalJets::jetId( const VHbbEvent::SimpleJet& jet ) const
84     {
85     if( jet.neutralHadronEFraction > 0.99 ) return false;
86     if( jet.neutralEmEFraction > 0.99 ) return false;
87     if( jet.nConstituents <= 1 ) return false;
88     if( fabs(jet.p4.Eta()) < 2.5 )
89     {
90     if( jet.chargedEmEFraction > 0.99 ) return false;
91     if( jet.chargedHadronEFraction == 0 ) return false;
92     if( jet.ntracks== 0 ) return false;
93     }
94    
95     return true;
96     }
97    
98    
99    
100    
101    
102    
103    
104     trkupgradeanalysis::variables::DiJetMass::DiJetMass() :
105     VHbbCandidateVariable("DiJetMass",60,0,250)
106     {
107     // No operation besides the initialiser list
108     }
109    
110     void trkupgradeanalysis::variables::DiJetMass::set( const VHbbCandidate& vhbbCandidate )
111     {
112     value_=vhbbCandidate.H.p4.M();
113     }
114    
115     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::DiJetMass::copy() const
116     {
117     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::DiJetMass(*this) );
118     }
119    
120    
121    
122    
123    
124    
125    
126     trkupgradeanalysis::variables::HighestCSV::HighestCSV( size_t maximumJetNumber ) :
127     VHbbCandidateVariable("HighestCSV",60,-1,1.5), maximumJetNumber_(maximumJetNumber)
128     {
129     // Overwrite the name with more information
130     std::stringstream nameStream;
131     nameStream << "HighestCSVOf";
132    
133     if( maximumJetNumber_==0 ) nameStream << "AllJets";
134     else nameStream << "First" << maximumJetNumber_ << "Jets";
135    
136     name_=nameStream.str();
137     }
138    
139     void trkupgradeanalysis::variables::HighestCSV::set( const VHbbCandidate& vhbbCandidate )
140     {
141     unsigned int numberOfJetsToCheck=maximumJetNumber_;
142     if( maximumJetNumber_==0 || numberOfJetsToCheck>vhbbCandidate.H.jets.size() ) numberOfJetsToCheck=vhbbCandidate.H.jets.size();
143    
144     value_=-1; // Start off with a nonsensical default so I know if things go wrong
145     for( unsigned int a=0; a<numberOfJetsToCheck; ++a )
146     {
147     if( vhbbCandidate.H.jets.at(a).csv > value_ ) value_=vhbbCandidate.H.jets.at(a).csv;
148     }
149    
150     }
151    
152     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::HighestCSV::copy() const
153     {
154     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::HighestCSV(*this) );
155     }
156    
157    
158    
159    
160    
161    
162    
163     trkupgradeanalysis::variables::LowestCSV::LowestCSV( size_t maximumJetNumber ) :
164     VHbbCandidateVariable("LowestCSV",60,-1,1.5), maximumJetNumber_(maximumJetNumber)
165     {
166     // Overwrite the name with more information
167     std::stringstream nameStream;
168     nameStream << "LowestCSVOf";
169    
170     if( maximumJetNumber_==0 ) nameStream << "AllJets";
171     else nameStream << "First" << maximumJetNumber_ << "Jets";
172    
173     name_=nameStream.str();
174     }
175    
176     void trkupgradeanalysis::variables::LowestCSV::set( const VHbbCandidate& vhbbCandidate )
177     {
178     unsigned int numberOfJetsToCheck=maximumJetNumber_;
179     if( maximumJetNumber_==0 || numberOfJetsToCheck>vhbbCandidate.H.jets.size() ) numberOfJetsToCheck=vhbbCandidate.H.jets.size();
180    
181     value_=-1; // Start off with a nonsensical default so I know if things go wrong
182     for( unsigned int a=0; a<numberOfJetsToCheck; ++a )
183     {
184     if( (vhbbCandidate.H.jets.at(a).csv<value_) || value_==-1 ) value_=vhbbCandidate.H.jets.at(a).csv;
185     }
186    
187     }
188    
189     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::LowestCSV::copy() const
190     {
191     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::LowestCSV(*this) );
192     }
193    
194    
195    
196    
197    
198    
199    
200     trkupgradeanalysis::variables::NumberOfJets::NumberOfJets() :
201     VHbbCandidateVariable("NumberOfJets",6,-0.5,5.5)
202     {
203     // No operation besides the initialiser list
204     }
205    
206     void trkupgradeanalysis::variables::NumberOfJets::set( const VHbbCandidate& vhbbCandidate )
207     {
208     value_=vhbbCandidate.H.jets.size();
209     }
210    
211     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::NumberOfJets::copy() const
212     {
213     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::NumberOfJets(*this) );
214     }
215    
216    
217    
218    
219    
220    
221    
222     trkupgradeanalysis::variables::MuonPixelHits::MuonPixelHits( bool checkFirstMuon ) :
223     VHbbCandidateVariable("MuonPixelHits",7,-1.5,5.5), checkFirstMuon_(checkFirstMuon), throwExceptions_(false)
224     {
225     // Need to add which muon I'm checking to the name
226     if( checkFirstMuon_ ) name_="MuonPixelHitsOfFirstMuon";
227     else name_="MuonPixelHitsOfSecondMuon";
228     }
229    
230     // TODO - Get rid of this once fully debugged.
231     #include <iostream>
232     void trkupgradeanalysis::variables::MuonPixelHits::set( const VHbbCandidate& vhbbCandidate )
233     {
234     value_=-1; // Set to an invalid value in case of error
235    
236     if( vhbbCandidate.V.muons.size()<2 )
237     {
238     if( throwExceptions_ ) throw std::runtime_error( "trkupgradeanalysis::variables::MuonPixelHits::set(..) - There are fewer than 2 muons");
239     else
240     {
241     // std::cerr << "trkupgradeanalysis::variables::MuonPixelHits::set(..) - There are fewer than 2 muons" << std::endl;
242     return;
243     }
244     }
245    
246     if( checkFirstMuon_ )
247     {
248     value_=vhbbCandidate.V.muons[0].nPixelHits;
249     // if( vhbbCandidate.V.firstLepton<vhbbCandidate.V.muons.size() ) value_=vhbbCandidate.V.muons[vhbbCandidate.V.firstLepton].nPixelHits;
250     // else std::cerr << "trkupgradeanalysis::variables::MuonPixelHits::set(..) - vhbbCandidate.V.firstLepton=" << vhbbCandidate.V.firstLepton
251     // << " (candidateType=" << vhbbCandidate.candidateType << ")"
252     // << "[" << vhbbCandidate.V.muons.size() << "," << vhbbCandidate.V.firstLepton << "," << vhbbCandidate.V.secondLepton << "]" << std::endl;
253     }
254     else
255     {
256     value_=vhbbCandidate.V.muons[1].nPixelHits;
257     // if( vhbbCandidate.V.secondLepton<vhbbCandidate.V.muons.size() ) value_=vhbbCandidate.V.muons[vhbbCandidate.V.secondLepton].nPixelHits;
258     // else std::cerr << "trkupgradeanalysis::variables::MuonPixelHits::set(..) - vhbbCandidate.V.secondLepton=" << vhbbCandidate.V.secondLepton
259     // << " (candidateType=" << vhbbCandidate.candidateType << ")"
260     // << "[" << vhbbCandidate.V.muons.size() << "," << vhbbCandidate.V.firstLepton << "," << vhbbCandidate.V.secondLepton << "]" << std::endl;
261     }
262     }
263    
264     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::MuonPixelHits::copy() const
265     {
266     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::MuonPixelHits(*this) );
267     }
268    
269    
270    
271    
272    
273    
274     trkupgradeanalysis::variables::HighestMuonPixelHits::HighestMuonPixelHits() :
275     VHbbCandidateVariable("HighestMuonPixelHits",7,-1.5,5.5), throwExceptions_(false)
276     {
277     // No operation besides the initialiser list
278     }
279    
280     void trkupgradeanalysis::variables::HighestMuonPixelHits::set( const VHbbCandidate& vhbbCandidate )
281     {
282     value_=-1; // Set to an invalid value in case of error
283    
284     if( vhbbCandidate.V.muons.size()<2 || vhbbCandidate.V.firstLepton>vhbbCandidate.V.muons.size() || vhbbCandidate.V.secondLepton>vhbbCandidate.V.muons.size() )
285     {
286     if( throwExceptions_ ) throw std::runtime_error( "trkupgradeanalysis::variables::HighestMuonPixelHits::set(..) - There are not enough muons");
287     else
288     {
289     // std::cerr << "trkupgradeanalysis::variables::HighestMuonPixelHits::set(..) - There are fewer than 2 muons" << std::endl;
290     return;
291     }
292     }
293    
294     int firstMuon=vhbbCandidate.V.muons[vhbbCandidate.V.firstLepton].nPixelHits;
295     int secondMuon=vhbbCandidate.V.muons[vhbbCandidate.V.secondLepton].nPixelHits;
296     firstMuon > secondMuon ? value_=firstMuon : value_=secondMuon;
297     }
298    
299    
300     void trkupgradeanalysis::variables::HighestMuonPixelHits::set( const trkupgradeanalysis::tools::NTupleRow& ntupleRow )
301     {
302     try // Try the default behaviour, if that doesn't work check for MuonPixelHitsOfFirstMuon and MuonPixelHitsOfSecondMuon
303     {
304     value_=ntupleRow.getDouble(name_);
305     }
306     catch( std::exception& error )
307     {
308     double firstMuon=ntupleRow.getDouble("MuonPixelHitsOfFirstMuon");
309     double secondMuon=ntupleRow.getDouble("MuonPixelHitsOfSecondMuon");
310     firstMuon > secondMuon ? value_=firstMuon : value_=secondMuon;
311     }
312     }
313    
314     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::HighestMuonPixelHits::copy() const
315     {
316     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::HighestMuonPixelHits(*this) );
317     }
318    
319    
320    
321    
322    
323    
324     trkupgradeanalysis::variables::LowestMuonPixelHits::LowestMuonPixelHits() :
325     VHbbCandidateVariable("LowestMuonPixelHits",7,-1.5,5.5), throwExceptions_(false)
326     {
327     // No operation besides the initialiser list
328     }
329    
330     void trkupgradeanalysis::variables::LowestMuonPixelHits::set( const VHbbCandidate& vhbbCandidate )
331     {
332     value_=-1; // Set to an invalid value in case of error
333    
334     if( vhbbCandidate.V.muons.size()<2 || vhbbCandidate.V.firstLepton>vhbbCandidate.V.muons.size() || vhbbCandidate.V.secondLepton>vhbbCandidate.V.muons.size() )
335     {
336     if( throwExceptions_ ) throw std::runtime_error( "trkupgradeanalysis::variables::LowestMuonPixelHits::set(..) - There are not enough muons");
337     else
338     {
339     // std::cerr << "trkupgradeanalysis::variables::LowestMuonPixelHits::set(..) - There are fewer than 2 muons" << std::endl;
340     return;
341     }
342     }
343    
344     int firstMuon=vhbbCandidate.V.muons[vhbbCandidate.V.firstLepton].nPixelHits;
345     int secondMuon=vhbbCandidate.V.muons[vhbbCandidate.V.secondLepton].nPixelHits;
346     firstMuon < secondMuon ? value_=firstMuon : value_=secondMuon;
347     }
348    
349    
350     void trkupgradeanalysis::variables::LowestMuonPixelHits::set( const trkupgradeanalysis::tools::NTupleRow& ntupleRow )
351     {
352     try // Try the default behaviour, if that doesn't work check for MuonPixelHitsOfFirstMuon and MuonPixelHitsOfSecondMuon
353     {
354     value_=ntupleRow.getDouble(name_);
355     }
356     catch( std::exception& error )
357     {
358     double firstMuon=ntupleRow.getDouble("MuonPixelHitsOfFirstMuon");
359     double secondMuon=ntupleRow.getDouble("MuonPixelHitsOfSecondMuon");
360     firstMuon < secondMuon ? value_=firstMuon : value_=secondMuon;
361     }
362     }
363    
364     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::LowestMuonPixelHits::copy() const
365     {
366     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::LowestMuonPixelHits(*this) );
367     }
368    
369    
370    
371    
372    
373    
374    
375     trkupgradeanalysis::variables::CandidateType::CandidateType() :
376     VHbbCandidateVariable("CandidateType",6,-0.5,5.5)
377     {
378     // No operation besides the initialiser list
379     }
380    
381     void trkupgradeanalysis::variables::CandidateType::set( const VHbbCandidate& vhbbCandidate )
382     {
383     value_=vhbbCandidate.candidateType;
384     }
385    
386     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::CandidateType::copy() const
387     {
388     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::CandidateType(*this) );
389     }
390    
391    
392    
393    
394    
395    
396    
397     trkupgradeanalysis::variables::DiLeptonMass::DiLeptonMass() :
398     VHbbCandidateVariable("DiLeptonMass",60,0,250)
399     {
400     // No operation besides the initialiser list
401     }
402    
403     void trkupgradeanalysis::variables::DiLeptonMass::set( const VHbbCandidate& vhbbCandidate )
404     {
405     value_=vhbbCandidate.V.p4.M();
406     }
407    
408     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::DiLeptonMass::copy() const
409     {
410     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::DiLeptonMass(*this) );
411     }
412    
413    
414    
415    
416    
417    
418    
419     trkupgradeanalysis::variables::HiggsCandidatePt::HiggsCandidatePt() :
420     VHbbCandidateVariable("HiggsCandidatePt",60,0,250)
421     {
422     // No operation besides the initialiser list
423     }
424    
425     void trkupgradeanalysis::variables::HiggsCandidatePt::set( const VHbbCandidate& vhbbCandidate )
426     {
427     value_=vhbbCandidate.H.p4.Pt();;
428     }
429    
430     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::HiggsCandidatePt::copy() const
431     {
432     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::HiggsCandidatePt(*this) );
433     }
434    
435    
436    
437    
438    
439    
440    
441     trkupgradeanalysis::variables::VectorBosonCandidatePt::VectorBosonCandidatePt() :
442     VHbbCandidateVariable("VectorBosonCandidatePt",60,0,250)
443     {
444     // No operation besides the initialiser list
445     }
446    
447     void trkupgradeanalysis::variables::VectorBosonCandidatePt::set( const VHbbCandidate& vhbbCandidate )
448     {
449     value_=vhbbCandidate.V.p4.Pt();
450     }
451    
452     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::VectorBosonCandidatePt::copy() const
453     {
454     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::VectorBosonCandidatePt(*this) );
455     }
456    
457    
458    
459    
460    
461    
462    
463     trkupgradeanalysis::variables::DeltaPhiVH::DeltaPhiVH() :
464     VHbbCandidateVariable("DeltaPhiVH",60,0,M_PI)
465     {
466     // No operation besides the initialiser list
467     }
468    
469     void trkupgradeanalysis::variables::DeltaPhiVH::set( const VHbbCandidate& vhbbCandidate )
470     {
471     value_=TMath::Abs( Geom::deltaPhi( vhbbCandidate.H.p4.Phi(), vhbbCandidate.V.p4.Phi() ) );
472     }
473    
474     std::auto_ptr<trkupgradeanalysis::variables::VHbbCandidateVariable> trkupgradeanalysis::variables::DeltaPhiVH::copy() const
475     {
476     return std::auto_ptr<VHbbCandidateVariable>( new trkupgradeanalysis::variables::DeltaPhiVH(*this) );
477     }