ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/PFTauIDMod.cc
Revision: 1.5
Committed: Wed Mar 9 14:56:46 2011 UTC (14 years, 1 month ago) by dkralph
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_029c, Mit_029b, Mit_029a, Mit_028a, Mit_028, Mit_027, Mit_027a, Mit_025e, Mit_025d, Mit_025c, Mit_025b, Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1
Changes since 1.4: +2 -0 lines
Log Message:
comment

File Contents

# Content
1 // $Id: PFTauIDMod.cc,v 1.3 2011/02/17 14:08:49 ceballos Exp $
2
3 #include "MitPhysics/Mods/interface/PFTauIDMod.h"
4 #include "MitPhysics/Init/interface/ModNames.h"
5 #include "MitAna/DataTree/interface/PFTauCol.h"
6
7 using namespace mithep;
8
9 ClassImp(mithep::PFTauIDMod)
10
11 //------------------------------------------------------------------------------
12 PFTauIDMod::PFTauIDMod(const char *name, const char *title) :
13 BaseMod(name,title),
14 fPFTausName(Names::gkPFTauBrn),
15 fGoodPFTausName(ModNames::gkGoodPFTausName),
16 fPtMin(15.0),
17 fPtLeadChargedHadronPFCandMin(5.0),
18 fIsoChargedHadronPtSumMax(2.0),
19 fIsoGammaEtSumMax(3.0),
20 fSignalMassMin(0.13),
21 fSignalMassMax(2.00),
22 fIsHPSSel(kFALSE),
23 fHPSIso("loose"),
24 fPFTaus(0)
25 {
26 // Constructor.
27 }
28
29 //------------------------------------------------------------------------------
30 void PFTauIDMod::Process()
31 {
32 // Process entries of the tree.
33
34 LoadBranch(fPFTausName);
35
36 PFTauOArr *GoodTaus = new PFTauOArr;
37 GoodTaus->SetName(fGoodPFTausName);
38
39 for (UInt_t i=0; i<fPFTaus->GetEntries(); ++i) {
40 const PFTau *tau = fPFTaus->At(i);
41
42 if(fIsHPSSel == kFALSE) {
43 if (tau->NSignalPFCands() == 0)
44 continue;
45
46 CompositeParticle tauSystem;
47 CompositeParticle tauChargedSystem;
48 UInt_t nTrk = 0;
49 for (UInt_t j=0; j<tau->NSignalPFCands(); ++j) {
50 tauSystem.AddDaughter(tau->SignalPFCand(j));
51 if(tau->SignalPFCand(j) != 0 &&
52 tau->SignalPFCand(j)->Charge() != 0){
53 nTrk++;
54 tauChargedSystem.AddDaughter(tau->SignalPFCand(j));
55 }
56 }
57
58 if (nTrk != 1 && nTrk != 3)
59 continue;
60
61 if (TMath::Abs(tau->Charge()) - 1.0 > 0.0001)
62 continue;
63
64 if (tauSystem.Pt() <= fPtMin)
65 continue;
66
67 if(!tau->LeadChargedHadronPFCand())
68 continue;
69
70 if(tau->LeadChargedHadronPFCand()->Pt() <= fPtLeadChargedHadronPFCandMin)
71 continue;
72
73 if (tau->IsoChargedHadronPtSum() >= fIsoChargedHadronPtSumMax)
74 continue;
75
76 if (tau->IsoGammaEtSum() >= fIsoGammaEtSumMax)
77 continue;
78
79 if (tauChargedSystem.Mass() <= fSignalMassMin || tauChargedSystem.Mass() >= fSignalMassMax)
80 continue;
81 }
82 else { // if we're doing hps selection:
83 if(tau->Pt() <= fPtMin)
84 continue;
85 if(tau->DiscriminationByDecayModeFinding() < 0.5)
86 continue;
87 if(tau->DiscriminationAgainstElectron() < 0.5)
88 continue;
89 if(tau->DiscriminationAgainstMuon() < 0.5)
90 continue;
91 // "loose" should be default, but others can be used
92 if(fHPSIso.Contains("loose",TString::kIgnoreCase)) {
93 if(tau->DiscriminationByLooseIsolation() < 0.5)
94 continue;
95 }
96 else if(fHPSIso.Contains("med",TString::kIgnoreCase)) {
97 if(tau->DiscriminationByMediumIsolation() < 0.5)
98 continue;
99 }
100 else if(fHPSIso.Contains("tight",TString::kIgnoreCase)) {
101 if(tau->DiscriminationByTightIsolation() < 0.5)
102 continue;
103 }
104 else {
105 SendError(kWarning,"Process","ERROR: HPS Isolation not properly defined!");
106 }
107 }
108
109 // add good tau to output collection
110 GoodTaus->Add(tau);
111
112 }
113
114 // sort according to pt
115 GoodTaus->Sort();
116
117 // add to event for other modules to use
118 AddObjThisEvt(GoodTaus);
119 }
120
121 //------------------------------------------------------------------------------
122 void PFTauIDMod::SlaveBegin()
123 {
124 // Run startup code on the computer (slave) doing the actual analysis. Here,
125 // we just request the Tau collection branch.
126
127 // note: for safety, this overrides SetPFTausName
128 if(fIsHPSSel) {
129 fPFTausName = TString(Names::gkHPSTauBrn);
130 }
131 else
132 fPFTausName = TString(Names::gkPFTauBrn);
133
134 ReqBranch(fPFTausName, fPFTaus);
135 }