ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/grimes/VHbbAnalysisCode/src/VHbbCandidateCuts.cpp
Revision: 1.1
Committed: Tue Feb 14 01:43:16 2012 UTC (13 years, 2 months ago) by grimes
Branch: MAIN
Log Message:
Only added the directory structure in the last commit, this is now the files.

File Contents

# User Rev Content
1 grimes 1.1 #include "TrkUpgradeAnalysis/VHbb/interface/VHbbCandidateCuts.h"
2    
3     // Required to work out deltaPhi
4     #include "DataFormats/GeometryVector/interface/VectorUtil.h"
5    
6    
7     trkupgradeanalysis::CandidateTypeEquals::CandidateTypeEquals( VHbbCandidate::CandidateType candidateType )
8     : requiredCandidateType_(candidateType)
9     {
10     // No operation besides the initialiser list
11     }
12    
13     trkupgradeanalysis::CandidateTypeEquals::~CandidateTypeEquals()
14     {
15     // No operation
16     }
17    
18     std::string trkupgradeanalysis::CandidateTypeEquals::name() const
19     {
20     std::stringstream nameStream;
21     nameStream << "CandidateType==";
22     if( requiredCandidateType_==VHbbCandidate::Zmumu ) nameStream << "Zmumu";
23     else if( requiredCandidateType_==VHbbCandidate::Zee ) nameStream << "Zee";
24     else if( requiredCandidateType_==VHbbCandidate::Wmun ) nameStream << "Wmun";
25     else if( requiredCandidateType_==VHbbCandidate::Wen ) nameStream << "Wen";
26     else if( requiredCandidateType_==VHbbCandidate::Znn ) nameStream << "Znn";
27     else if( requiredCandidateType_==VHbbCandidate::UNKNOWN ) nameStream << "UNKNOWN";
28     return nameStream.str();
29     }
30    
31     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::CandidateTypeEquals::cutVariable() const
32     {
33     // This class implements the HistogramVariable interface to save on the
34     // number of classes, so just return a reference to this instance.
35     return *this;
36     }
37    
38     bool trkupgradeanalysis::CandidateTypeEquals::applyCut( const VHbbCandidate& vhbbCandidate ) const
39     {
40     lastValue_=vhbbCandidate.candidateType;
41     return lastValue_==requiredCandidateType_;
42     }
43    
44     std::string trkupgradeanalysis::CandidateTypeEquals::variableName() const
45     {
46     return "CandidateType";
47     }
48    
49     double trkupgradeanalysis::CandidateTypeEquals::histogrammableValue() const
50     {
51     return lastValue_;
52     }
53    
54     size_t trkupgradeanalysis::CandidateTypeEquals::suggestedNumberOfBins() const
55     {
56     return 6;
57     }
58    
59     double trkupgradeanalysis::CandidateTypeEquals::suggestedLowerEdge() const
60     {
61     return -0.5;
62     }
63    
64     double trkupgradeanalysis::CandidateTypeEquals::suggestedUpperEdge() const
65     {
66     return 5.5;
67     }
68    
69    
70    
71    
72    
73     trkupgradeanalysis::NumberOfJets::NumberOfJets( const trkupgradeanalysis::cuts::ICutType& cut )
74     : pCut_( cut.copy() )
75     {
76     // No operation apart from the initialiser list
77     }
78    
79     trkupgradeanalysis::NumberOfJets::~NumberOfJets()
80     {
81     // No operation
82     }
83    
84     std::string trkupgradeanalysis::NumberOfJets::name() const
85     {
86     return variableName()+pCut_->name();}
87    
88     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::NumberOfJets::cutVariable() const
89     {
90     // This class implements the HistogramVariable interface to save on the
91     // number of classes, so just return a reference to this instance.
92     return *this;
93     }
94    
95     bool trkupgradeanalysis::NumberOfJets::applyCut( const VHbbCandidate& vhbbCandidate ) const
96     {
97     lastValue_=vhbbCandidate.H.jets.size();
98     return pCut_->apply(lastValue_);
99     }
100    
101     std::string trkupgradeanalysis::NumberOfJets::variableName() const { return "numberOfJets"; }
102     double trkupgradeanalysis::NumberOfJets::histogrammableValue() const { return lastValue_; }
103     size_t trkupgradeanalysis::NumberOfJets::suggestedNumberOfBins() const { return 6; }
104     double trkupgradeanalysis::NumberOfJets::suggestedLowerEdge() const { return -0.5; }
105     double trkupgradeanalysis::NumberOfJets::suggestedUpperEdge() const { return 5.5; }
106    
107    
108    
109    
110    
111     trkupgradeanalysis::PtOfJetN::PtOfJetN( unsigned int jetNumber, const trkupgradeanalysis::cuts::ICutType& cut )
112     : jetNumber_(jetNumber), pCut_( cut.copy() )
113     {
114     // No operation apart from the initialiser list
115     }
116    
117     trkupgradeanalysis::PtOfJetN::~PtOfJetN()
118     {
119     // No operation
120     }
121    
122     std::string trkupgradeanalysis::PtOfJetN::name() const
123     {
124     return variableName()+pCut_->name();
125     }
126    
127     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::PtOfJetN::cutVariable() const
128     {
129     // This class implements the HistogramVariable interface to save on the
130     // number of classes, so just return a reference to this instance.
131     return *this;
132     }
133    
134     bool trkupgradeanalysis::PtOfJetN::applyCut( const VHbbCandidate& vhbbCandidate ) const
135     {
136     if( vhbbCandidate.H.jets.size()<jetNumber_+1 ) lastValue_=-1; // Plus one because they're numbered from zero
137     else lastValue_=const_cast<VHbbCandidate&>(vhbbCandidate).H.jets.at(jetNumber_).Pt(); // const cast needed because this method isn't declared const for some reason
138    
139     return pCut_->apply(lastValue_);
140     }
141    
142     std::string trkupgradeanalysis::PtOfJetN::variableName() const
143     {
144     std::stringstream nameStream;
145     nameStream << "PtOfJet" << jetNumber_;
146     return nameStream.str();
147     }
148    
149     double trkupgradeanalysis::PtOfJetN::histogrammableValue() const { return lastValue_; }
150     size_t trkupgradeanalysis::PtOfJetN::suggestedNumberOfBins() const { return 60; }
151     double trkupgradeanalysis::PtOfJetN::suggestedLowerEdge() const { return 0; }
152     double trkupgradeanalysis::PtOfJetN::suggestedUpperEdge() const { return 150; }
153    
154    
155    
156    
157    
158    
159     trkupgradeanalysis::PtOfHiggs::PtOfHiggs( const trkupgradeanalysis::cuts::ICutType& cut )
160     : pCut_( cut.copy() )
161     {
162     // No operation apart from the initialiser list
163     }
164    
165     trkupgradeanalysis::PtOfHiggs::~PtOfHiggs()
166     {
167     // No operation
168     }
169    
170     std::string trkupgradeanalysis::PtOfHiggs::name() const
171     {
172     return variableName()+pCut_->name();
173     }
174    
175     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::PtOfHiggs::cutVariable() const
176     {
177     // This class implements the HistogramVariable interface to save on the
178     // number of classes, so just return a reference to this instance.
179     return *this;
180     }
181    
182     bool trkupgradeanalysis::PtOfHiggs::applyCut( const VHbbCandidate& vhbbCandidate ) const
183     {
184     lastValue_=vhbbCandidate.H.p4.Pt();
185     return pCut_->apply( lastValue_ );
186     }
187    
188     std::string trkupgradeanalysis::PtOfHiggs::variableName() const { return "PtOfHiggs"; }
189     double trkupgradeanalysis::PtOfHiggs::histogrammableValue() const { return lastValue_; }
190     size_t trkupgradeanalysis::PtOfHiggs::suggestedNumberOfBins() const { return 60; }
191     double trkupgradeanalysis::PtOfHiggs::suggestedLowerEdge() const { return 0; }
192     double trkupgradeanalysis::PtOfHiggs::suggestedUpperEdge() const { return 250; }
193    
194    
195    
196    
197    
198     trkupgradeanalysis::PtOfVectorBoson::PtOfVectorBoson( const trkupgradeanalysis::cuts::ICutType& cut )
199     : pCut_( cut.copy() )
200     {
201     // No operation apart from the initialiser list
202     }
203    
204     trkupgradeanalysis::PtOfVectorBoson::~PtOfVectorBoson()
205     {
206     // No operation
207     }
208    
209     std::string trkupgradeanalysis::PtOfVectorBoson::name() const
210     {
211     return variableName()+pCut_->name();
212     }
213    
214     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::PtOfVectorBoson::cutVariable() const
215     {
216     // This class implements the HistogramVariable interface to save on the
217     // number of classes, so just return a reference to this instance.
218     return *this;
219     }
220    
221     bool trkupgradeanalysis::PtOfVectorBoson::applyCut( const VHbbCandidate& vhbbCandidate ) const
222     {
223     lastValue_=vhbbCandidate.V.p4.Pt();
224     return pCut_->apply( lastValue_ );
225     }
226    
227     std::string trkupgradeanalysis::PtOfVectorBoson::variableName() const
228     {
229     return "PtOfVectorBoson";
230     }
231    
232     double trkupgradeanalysis::PtOfVectorBoson::histogrammableValue() const
233     {
234     return lastValue_;
235     }
236    
237     size_t trkupgradeanalysis::PtOfVectorBoson::suggestedNumberOfBins() const
238     {
239     return 60;
240     }
241    
242     double trkupgradeanalysis::PtOfVectorBoson::suggestedLowerEdge() const
243     {
244     return 0;
245     }
246    
247     double trkupgradeanalysis::PtOfVectorBoson::suggestedUpperEdge() const
248     {
249     return 250;
250     }
251    
252    
253    
254    
255    
256    
257     trkupgradeanalysis::NumberOfAdditionalJets::NumberOfAdditionalJets( const trkupgradeanalysis::cuts::ICutType& cut )
258     : pCut_( cut.copy() )
259     {
260     // No operation apart from the initialiser list
261     }
262    
263     trkupgradeanalysis::NumberOfAdditionalJets::~NumberOfAdditionalJets()
264     {
265     // No operation
266     }
267    
268     std::string trkupgradeanalysis::NumberOfAdditionalJets::name() const
269     {
270     return variableName()+pCut_->name();
271     }
272    
273     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::NumberOfAdditionalJets::cutVariable() const
274     {
275     // This class implements the HistogramVariable interface to save on the
276     // number of classes, so just return a reference to this instance.
277     return *this;
278     }
279    
280     bool trkupgradeanalysis::NumberOfAdditionalJets::applyCut( const VHbbCandidate& vhbbCandidate ) const
281     {
282     lastValue_=0;
283     for( std::vector<VHbbEvent::SimpleJet>::const_iterator iJet=vhbbCandidate.additionalJets.begin(); iJet!=vhbbCandidate.additionalJets.end(); ++iJet )
284     {
285     if( jetId( *iJet )==true && fabs(iJet->p4.Eta()) < 2.5 && iJet->p4.Pt() > 20 ) ++lastValue_;
286     }
287     return pCut_->apply( lastValue_ );
288     }
289    
290     bool trkupgradeanalysis::NumberOfAdditionalJets::jetId( const VHbbEvent::SimpleJet& jet ) const
291     {
292     if( jet.neutralHadronEFraction > 0.99 ) return false;
293     if( jet.neutralEmEFraction > 0.99 ) return false;
294     if( jet.nConstituents <= 1 ) return false;
295     if( fabs(jet.p4.Eta()) < 2.5 )
296     {
297     if( jet.chargedEmEFraction > 0.99 ) return false;
298     if( jet.chargedHadronEFraction == 0 ) return false;
299     if( jet.ntracks== 0 ) return false;
300     }
301    
302     return true;
303     }
304    
305     std::string trkupgradeanalysis::NumberOfAdditionalJets::variableName() const
306     {
307     return "NumberOfAdditionalJets";
308     }
309    
310     double trkupgradeanalysis::NumberOfAdditionalJets::histogrammableValue() const
311     {
312     return lastValue_;
313     }
314    
315     size_t trkupgradeanalysis::NumberOfAdditionalJets::suggestedNumberOfBins() const
316     {
317     return 91;
318     }
319    
320     double trkupgradeanalysis::NumberOfAdditionalJets::suggestedLowerEdge() const
321     {
322     return -0.5;
323     }
324    
325     double trkupgradeanalysis::NumberOfAdditionalJets::suggestedUpperEdge() const
326     {
327     return 90.5;
328     }
329    
330    
331    
332    
333    
334    
335     trkupgradeanalysis::NumberOfAdditionalLeptons::NumberOfAdditionalLeptons( const trkupgradeanalysis::cuts::ICutType& cut )
336     : pCut_( cut.copy() )
337     {
338     // No operation apart from the initialiser list
339     }
340    
341     trkupgradeanalysis::NumberOfAdditionalLeptons::~NumberOfAdditionalLeptons()
342     {
343     // No operation
344     }
345    
346     std::string trkupgradeanalysis::NumberOfAdditionalLeptons::name() const
347     {
348     return variableName()+pCut_->name();
349     }
350    
351     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::NumberOfAdditionalLeptons::cutVariable() const
352     {
353     // This class implements the HistogramVariable interface to save on the
354     // number of classes, so just return a reference to this instance.
355     return *this;
356     }
357    
358     bool trkupgradeanalysis::NumberOfAdditionalLeptons::applyCut( const VHbbCandidate& vhbbCandidate ) const
359     {
360     int expectedLeptons=0;
361     if( vhbbCandidate.candidateType == VHbbCandidate::Wmun || vhbbCandidate.candidateType == VHbbCandidate::Wen ) expectedLeptons=1;
362     if( vhbbCandidate.candidateType == VHbbCandidate::Zmumu || vhbbCandidate.candidateType == VHbbCandidate::Zee ) expectedLeptons=2;
363    
364     lastValue_=vhbbCandidate.V.muons.size()+vhbbCandidate.V.electrons.size()-expectedLeptons;
365     return pCut_->apply( lastValue_ );
366     }
367    
368     std::string trkupgradeanalysis::NumberOfAdditionalLeptons::variableName() const
369     {
370     return "NumberOfAdditionalLeptons";
371     }
372    
373     double trkupgradeanalysis::NumberOfAdditionalLeptons::histogrammableValue() const
374     {
375     return lastValue_;
376     }
377    
378     size_t trkupgradeanalysis::NumberOfAdditionalLeptons::suggestedNumberOfBins() const
379     {
380     return 31;
381     }
382    
383     double trkupgradeanalysis::NumberOfAdditionalLeptons::suggestedLowerEdge() const
384     {
385     return -0.5;
386     }
387    
388     double trkupgradeanalysis::NumberOfAdditionalLeptons::suggestedUpperEdge() const
389     {
390     return 30.5;
391     }
392    
393    
394    
395    
396    
397    
398    
399    
400     trkupgradeanalysis::METSigma::METSigma( const trkupgradeanalysis::cuts::ICutType& cut )
401     : pCut_( cut.copy() )
402     {
403     // No operation apart from the initialiser list
404     }
405    
406     trkupgradeanalysis::METSigma::~METSigma()
407     {
408     // No operation
409     }
410    
411     std::string trkupgradeanalysis::METSigma::name() const
412     {
413     return variableName()+pCut_->name();
414     }
415    
416     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::METSigma::cutVariable() const
417     {
418     // This class implements the HistogramVariable interface to save on the
419     // number of classes, so just return a reference to this instance.
420     return *this;
421     }
422    
423     bool trkupgradeanalysis::METSigma::applyCut( const VHbbCandidate& vhbbCandidate ) const
424     {
425     if( vhbbCandidate.V.mets.empty() ) lastValue_=-1;
426     else lastValue_=vhbbCandidate.V.mets[0].metSig;
427    
428     return pCut_->apply( lastValue_ );
429     }
430    
431     std::string trkupgradeanalysis::METSigma::variableName() const
432     {
433     return "METSigma";
434     }
435    
436     double trkupgradeanalysis::METSigma::histogrammableValue() const
437     {
438     return lastValue_;
439     }
440    
441     size_t trkupgradeanalysis::METSigma::suggestedNumberOfBins() const
442     {
443     return 60;
444     }
445    
446     double trkupgradeanalysis::METSigma::suggestedLowerEdge() const
447     {
448     return 0;
449     }
450    
451     double trkupgradeanalysis::METSigma::suggestedUpperEdge() const
452     {
453     return 100;
454     }
455    
456    
457    
458    
459    
460    
461    
462     trkupgradeanalysis::PtOfElectronN::PtOfElectronN( unsigned int electronNumber, const trkupgradeanalysis::cuts::ICutType& cut )
463     : electronNumber_(electronNumber), pCut_( cut.copy() )
464     {
465     // No operation apart from the initialiser list
466     }
467    
468     trkupgradeanalysis::PtOfElectronN::~PtOfElectronN()
469     {
470     // No operation
471     }
472    
473     std::string trkupgradeanalysis::PtOfElectronN::name() const
474     {
475     return variableName()+pCut_->name();
476     }
477    
478     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::PtOfElectronN::cutVariable() const
479     {
480     // This class implements the HistogramVariable interface to save on the
481     // number of classes, so just return a reference to this instance.
482     return *this;
483     }
484    
485     bool trkupgradeanalysis::PtOfElectronN::applyCut( const VHbbCandidate& vhbbCandidate ) const
486     {
487     if( vhbbCandidate.V.electrons.size()<electronNumber_+1 ) lastValue_=-1; // Plus one because they're numbered from zero
488     else lastValue_=vhbbCandidate.V.electrons.at(electronNumber_).p4.Pt();
489    
490     return pCut_->apply( lastValue_ );
491     }
492    
493     std::string trkupgradeanalysis::PtOfElectronN::variableName() const
494     {
495     std::stringstream nameStream;
496     nameStream << "PtOfElectron" << electronNumber_;
497     return nameStream.str();
498     }
499    
500     double trkupgradeanalysis::PtOfElectronN::histogrammableValue() const
501     {
502     return lastValue_;
503     }
504    
505     size_t trkupgradeanalysis::PtOfElectronN::suggestedNumberOfBins() const
506     {
507     return 60;
508     }
509    
510     double trkupgradeanalysis::PtOfElectronN::suggestedLowerEdge() const
511     {
512     return 0;
513     }
514    
515     double trkupgradeanalysis::PtOfElectronN::suggestedUpperEdge() const
516     {
517     return 150;
518     }
519    
520    
521    
522    
523    
524    
525    
526     trkupgradeanalysis::MassOfVectorBoson::MassOfVectorBoson( const trkupgradeanalysis::cuts::ICutType& cut )
527     : pCut_( cut.copy() )
528     {
529     // No operation apart from the initialiser list
530     }
531    
532     trkupgradeanalysis::MassOfVectorBoson::~MassOfVectorBoson()
533     {
534     // No operation
535     }
536    
537     std::string trkupgradeanalysis::MassOfVectorBoson::name() const
538     {
539     return variableName()+pCut_->name();
540     }
541    
542     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::MassOfVectorBoson::cutVariable() const
543     {
544     // This class implements the HistogramVariable interface to save on the
545     // number of classes, so just return a reference to this instance.
546     return *this;
547     }
548    
549     bool trkupgradeanalysis::MassOfVectorBoson::applyCut( const VHbbCandidate& vhbbCandidate ) const
550     {
551     lastValue_=vhbbCandidate.V.p4.M();
552     return pCut_->apply( lastValue_ );
553     }
554    
555     std::string trkupgradeanalysis::MassOfVectorBoson::variableName() const
556     {
557     return "MassOfVectorBoson";
558     }
559    
560     double trkupgradeanalysis::MassOfVectorBoson::histogrammableValue() const
561     {
562     return lastValue_;
563     }
564    
565     size_t trkupgradeanalysis::MassOfVectorBoson::suggestedNumberOfBins() const
566     {
567     return 60;
568     }
569    
570     double trkupgradeanalysis::MassOfVectorBoson::suggestedLowerEdge() const
571     {
572     return 0;
573     }
574    
575     double trkupgradeanalysis::MassOfVectorBoson::suggestedUpperEdge() const
576     {
577     return 250;
578     }
579    
580    
581    
582    
583    
584    
585    
586     trkupgradeanalysis::MassOfHiggsBoson::MassOfHiggsBoson( const trkupgradeanalysis::cuts::ICutType& cut )
587     : pCut_( cut.copy() )
588     {
589     // No operation apart from the initialiser list
590     }
591    
592     trkupgradeanalysis::MassOfHiggsBoson::~MassOfHiggsBoson()
593     {
594     // No operation
595     }
596    
597     std::string trkupgradeanalysis::MassOfHiggsBoson::name() const
598     {
599     return variableName()+pCut_->name();
600     }
601    
602     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::MassOfHiggsBoson::cutVariable() const
603     {
604     // This class implements the HistogramVariable interface to save on the
605     // number of classes, so just return a reference to this instance.
606     return *this;
607     }
608    
609     bool trkupgradeanalysis::MassOfHiggsBoson::applyCut( const VHbbCandidate& vhbbCandidate ) const
610     {
611     lastValue_=vhbbCandidate.H.p4.M();
612     return pCut_->apply( lastValue_ );
613     }
614    
615     std::string trkupgradeanalysis::MassOfHiggsBoson::variableName() const
616     {
617     return "MassOfHiggsBoson";
618     }
619    
620     double trkupgradeanalysis::MassOfHiggsBoson::histogrammableValue() const
621     {
622     return lastValue_;
623     }
624    
625     size_t trkupgradeanalysis::MassOfHiggsBoson::suggestedNumberOfBins() const
626     {
627     return 60;
628     }
629    
630     double trkupgradeanalysis::MassOfHiggsBoson::suggestedLowerEdge() const
631     {
632     return 0;
633     }
634    
635     double trkupgradeanalysis::MassOfHiggsBoson::suggestedUpperEdge() const
636     {
637     return 250;
638     }
639    
640    
641    
642    
643    
644    
645    
646     trkupgradeanalysis::CSVOfAnyJetGreaterThan::CSVOfAnyJetGreaterThan( double csvValue, unsigned int maximumJetNumber )
647     : maximumJetNumber_(maximumJetNumber), requiredCSV_(csvValue)
648     {
649     // No operation apart from the initialiser list
650     }
651    
652     trkupgradeanalysis::CSVOfAnyJetGreaterThan::~CSVOfAnyJetGreaterThan()
653     {
654     // No operation
655     }
656    
657     std::string trkupgradeanalysis::CSVOfAnyJetGreaterThan::name() const
658     {
659     std::stringstream nameStream;
660     nameStream << variableName() << "GreaterThan" << requiredCSV_;
661     return nameStream.str();
662     }
663    
664     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::CSVOfAnyJetGreaterThan::cutVariable() const
665     {
666     // This class implements the HistogramVariable interface to save on the
667     // number of classes, so just return a reference to this instance.
668     return *this;
669     }
670    
671     bool trkupgradeanalysis::CSVOfAnyJetGreaterThan::applyCut( const VHbbCandidate& vhbbCandidate ) const
672     {
673     unsigned int numberOfJetsToCheck;
674     if( maximumJetNumber_==0 ) numberOfJetsToCheck=vhbbCandidate.H.jets.size();
675     else numberOfJetsToCheck=maximumJetNumber_;
676    
677     lastValue_=-1; // Start off with a nonsensical default so I know if things go wrong
678     for( unsigned int a=0; a<numberOfJetsToCheck && a<vhbbCandidate.H.jets.size(); ++a )
679     {
680     if( vhbbCandidate.H.jets.at(a).csv > lastValue_ ) lastValue_=vhbbCandidate.H.jets.at(a).csv;
681     }
682    
683     return lastValue_ > requiredCSV_;
684     }
685    
686     std::string trkupgradeanalysis::CSVOfAnyJetGreaterThan::variableName() const
687     {
688     std::stringstream nameStream;
689     nameStream << "CSVOf";
690    
691     if( maximumJetNumber_==0 ) nameStream << "AnyJet";
692     else nameStream << "AnyOfFirst" << maximumJetNumber_ << "Jets";
693    
694     return nameStream.str();
695     }
696    
697     double trkupgradeanalysis::CSVOfAnyJetGreaterThan::histogrammableValue() const
698     {
699     return lastValue_;
700     }
701    
702     size_t trkupgradeanalysis::CSVOfAnyJetGreaterThan::suggestedNumberOfBins() const
703     {
704     return 60;
705     }
706    
707     double trkupgradeanalysis::CSVOfAnyJetGreaterThan::suggestedLowerEdge() const
708     {
709     return -1;
710     }
711    
712     double trkupgradeanalysis::CSVOfAnyJetGreaterThan::suggestedUpperEdge() const
713     {
714     return 1.5;
715     }
716    
717    
718    
719    
720    
721    
722    
723     trkupgradeanalysis::CSVOfAllJetsGreaterThan::CSVOfAllJetsGreaterThan( double csvValue, unsigned int maximumJetNumber )
724     : maximumJetNumber_(maximumJetNumber), requiredCSV_(csvValue)
725     {
726     // No operation apart from the initialiser list
727     }
728    
729     trkupgradeanalysis::CSVOfAllJetsGreaterThan::~CSVOfAllJetsGreaterThan()
730     {
731     // No operation
732     }
733    
734     std::string trkupgradeanalysis::CSVOfAllJetsGreaterThan::name() const
735     {
736     std::stringstream nameStream;
737     nameStream << variableName() << "GreaterThan" << requiredCSV_;
738     return nameStream.str();
739     }
740    
741     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::CSVOfAllJetsGreaterThan::cutVariable() const
742     {
743     // This class implements the HistogramVariable interface to save on the
744     // number of classes, so just return a reference to this instance.
745     return *this;
746     }
747    
748     bool trkupgradeanalysis::CSVOfAllJetsGreaterThan::applyCut( const VHbbCandidate& vhbbCandidate ) const
749     {
750     unsigned int numberOfJetsToCheck;
751     if( maximumJetNumber_==0 ) numberOfJetsToCheck=vhbbCandidate.H.jets.size();
752     else numberOfJetsToCheck=maximumJetNumber_;
753    
754     lastValue_=-1; // Start off with a nonsensical default so I know if things go wrong
755     for( unsigned int a=0; a<numberOfJetsToCheck && a<vhbbCandidate.H.jets.size(); ++a )
756     {
757     if( (vhbbCandidate.H.jets.at(a).csv<lastValue_) || lastValue_==-1 ) lastValue_=vhbbCandidate.H.jets.at(a).csv;
758     }
759    
760     return lastValue_ > requiredCSV_;
761     }
762    
763     std::string trkupgradeanalysis::CSVOfAllJetsGreaterThan::variableName() const
764     {
765     std::stringstream nameStream;
766     nameStream << "CSVOf";
767    
768     if( maximumJetNumber_==0 ) nameStream << "AllJets";
769     else nameStream << "AllOfFirst" << maximumJetNumber_ << "Jets";
770    
771     return nameStream.str();
772     }
773    
774     double trkupgradeanalysis::CSVOfAllJetsGreaterThan::histogrammableValue() const
775     {
776     return lastValue_;
777     }
778    
779     size_t trkupgradeanalysis::CSVOfAllJetsGreaterThan::suggestedNumberOfBins() const
780     {
781     return 60;
782     }
783    
784     double trkupgradeanalysis::CSVOfAllJetsGreaterThan::suggestedLowerEdge() const
785     {
786     return -1;
787     }
788    
789     double trkupgradeanalysis::CSVOfAllJetsGreaterThan::suggestedUpperEdge() const
790     {
791     return 1.5;
792     }
793    
794    
795    
796    
797    
798    
799     trkupgradeanalysis::NumberOfMETObjects::NumberOfMETObjects( const trkupgradeanalysis::cuts::ICutType& cut )
800     : pCut_( cut.copy() )
801     {
802     // No operation apart from the initialiser list
803     }
804    
805     trkupgradeanalysis::NumberOfMETObjects::~NumberOfMETObjects()
806     {
807     // No operation
808     }
809    
810     std::string trkupgradeanalysis::NumberOfMETObjects::name() const
811     {
812     return variableName()+pCut_->name();
813     }
814    
815     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::NumberOfMETObjects::cutVariable() const
816     {
817     // This class implements the HistogramVariable interface to save on the
818     // number of classes, so just return a reference to this instance.
819     return *this;
820     }
821    
822     bool trkupgradeanalysis::NumberOfMETObjects::applyCut( const VHbbCandidate& vhbbCandidate ) const
823     {
824     lastValue_=vhbbCandidate.V.mets.size();
825     return pCut_->apply( lastValue_ );
826     }
827    
828     std::string trkupgradeanalysis::NumberOfMETObjects::variableName() const { return "numberOfMETObjects"; }
829     double trkupgradeanalysis::NumberOfMETObjects::histogrammableValue() const { return lastValue_; }
830     size_t trkupgradeanalysis::NumberOfMETObjects::suggestedNumberOfBins() const { return 6; }
831     double trkupgradeanalysis::NumberOfMETObjects::suggestedLowerEdge() const { return -0.5; }
832     double trkupgradeanalysis::NumberOfMETObjects::suggestedUpperEdge() const { return 5.5; }
833    
834    
835    
836    
837    
838    
839    
840    
841    
842     trkupgradeanalysis::PtOfMETN::PtOfMETN( unsigned int metNumber, const trkupgradeanalysis::cuts::ICutType& cut )
843     : metNumber_(metNumber), pCut_( cut.copy() )
844     {
845     // No operation apart from the initialiser list
846     }
847    
848     trkupgradeanalysis::PtOfMETN::~PtOfMETN()
849     {
850     // No operation
851     }
852    
853     std::string trkupgradeanalysis::PtOfMETN::name() const
854     {
855     return variableName()+pCut_->name();
856     }
857    
858     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::PtOfMETN::cutVariable() const
859     {
860     // This class implements the HistogramVariable interface to save on the
861     // number of classes, so just return a reference to this instance.
862     return *this;
863     }
864    
865     bool trkupgradeanalysis::PtOfMETN::applyCut( const VHbbCandidate& vhbbCandidate ) const
866     {
867     if( vhbbCandidate.V.mets.size()<metNumber_+1 ) // Plus one because they're numbered from zero
868     {
869     lastValue_=-1;
870     return false;
871     }
872    
873     lastValue_=vhbbCandidate.V.mets.at(metNumber_).p4.Pt();
874     return pCut_->apply( lastValue_ );
875     }
876    
877     std::string trkupgradeanalysis::PtOfMETN::variableName() const
878     {
879     std::stringstream nameStream;
880     nameStream << "PtOfMET" << metNumber_;
881     return nameStream.str();
882     }
883    
884     double trkupgradeanalysis::PtOfMETN::histogrammableValue() const { return lastValue_; }
885     size_t trkupgradeanalysis::PtOfMETN::suggestedNumberOfBins() const { return 60; }
886     double trkupgradeanalysis::PtOfMETN::suggestedLowerEdge() const { return 0; }
887     double trkupgradeanalysis::PtOfMETN::suggestedUpperEdge() const { return 150; }
888    
889    
890    
891    
892    
893    
894    
895     trkupgradeanalysis::DeltaPhiVH::DeltaPhiVH( const trkupgradeanalysis::cuts::ICutType& cut )
896     : pCut_( cut.copy() )
897     {
898     // No operation apart from the initialiser list
899     }
900    
901     trkupgradeanalysis::DeltaPhiVH::~DeltaPhiVH()
902     {
903     // No operation
904     }
905    
906     std::string trkupgradeanalysis::DeltaPhiVH::name() const
907     {
908     return variableName()+pCut_->name();
909     }
910    
911     const trkupgradeanalysis::IHistogramVariable& trkupgradeanalysis::DeltaPhiVH::cutVariable() const
912     {
913     // This class implements the HistogramVariable interface to save on the
914     // number of classes, so just return a reference to this instance.
915     return *this;
916     }
917    
918     bool trkupgradeanalysis::DeltaPhiVH::applyCut( const VHbbCandidate& vhbbCandidate ) const
919     {
920     lastValue_=TMath::Abs( Geom::deltaPhi( vhbbCandidate.H.p4.Phi(), vhbbCandidate.V.p4.Phi() ) );
921     return pCut_->apply( lastValue_ );
922     }
923    
924     std::string trkupgradeanalysis::DeltaPhiVH::variableName() const { return "DeltaPhiVH";}
925     double trkupgradeanalysis::DeltaPhiVH::histogrammableValue() const { return lastValue_; }
926     size_t trkupgradeanalysis::DeltaPhiVH::suggestedNumberOfBins() const { return 60; }
927     double trkupgradeanalysis::DeltaPhiVH::suggestedLowerEdge() const { return 0; }
928     double trkupgradeanalysis::DeltaPhiVH::suggestedUpperEdge() const { return M_PI; }