ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/MuonIDMod.cc
Revision: 1.13
Committed: Thu Dec 11 15:53:03 2008 UTC (16 years, 4 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_008, Mit_008pre2, Mit_008pre1, Mit_006b, Mit_006a
Changes since 1.12: +4 -4 lines
Log Message:
Bugfix to kNoId.

File Contents

# Content
1 // $Id: MuonIDMod.cc,v 1.12 2008/12/11 10:55:44 loizides Exp $
2
3 #include "MitPhysics/Mods/interface/MuonIDMod.h"
4 #include "MitCommon/MathTools/interface/MathUtils.h"
5 #include "MitPhysics/Init/interface/ModNames.h"
6
7 using namespace mithep;
8
9 ClassImp(mithep::MuonIDMod)
10
11 //--------------------------------------------------------------------------------------------------
12 MuonIDMod::MuonIDMod(const char *name, const char *title) :
13 BaseMod(name,title),
14 fMuonBranchName(Names::gkMuonBrn),
15 fCleanMuonsName(ModNames::gkCleanMuonsName),
16 fMuonIDType("Loose"),
17 fMuonIsoType("TrackCaloSliding"),
18 fMuonClassType("Global"),
19 fTrackIsolationCut(3.0),
20 fCaloIsolationCut(3.0),
21 fCombIsolationCut(5.0),
22 fMuonPtMin(10),
23 fMuons(0)
24 {
25 // Constructor.
26 }
27
28 //--------------------------------------------------------------------------------------------------
29 void MuonIDMod::Process()
30 {
31 // Process entries of the tree.
32
33 LoadBranch(fMuonBranchName);
34
35 MuonOArr *CleanMuons = new MuonOArr;
36 CleanMuons->SetName(fCleanMuonsName);
37
38 for (UInt_t i=0; i<fMuons->GetEntries(); ++i) {
39 const Muon *mu = fMuons->At(i);
40
41 Bool_t pass = kFALSE;
42 Double_t pt = -1; // make sure pt is taken from the correct track!
43 switch (fMuClassType) {
44 case kAll:
45 pass = kTRUE;
46 pt = mu->Pt();
47 break;
48 case kGlobal:
49 pass = (mu->GlobalTrk() != 0);
50 if (pass)
51 pt = mu->GlobalTrk()->Pt();
52 break;
53 case kSta:
54 pass = (mu->StandaloneTrk() != 0);
55 if (pass)
56 pt = mu->StandaloneTrk()->Pt();
57 break;
58 case kTrackerOnly:
59 pass = (mu->TrackerTrk() != 0);
60 if (pass)
61 pt = mu->TrackerTrk()->Pt();
62 break;
63 default:
64 break;
65 }
66
67 if (!pass)
68 continue;
69
70 if (pt <= fMuonPtMin)
71 continue;
72
73 Bool_t idpass = kFALSE;
74 switch (fMuIDType) {
75 case kLoose:
76 idpass = fMuonTools->IsGood(mu, MuonTools::kTMOneStationLoose) &&
77 fMuonTools->IsGood(mu, MuonTools::kTM2DCompatibilityLoose);
78 break;
79 case kTight:
80 idpass = fMuonTools->IsGood(mu, MuonTools::kTMOneStationTight) &&
81 fMuonTools->IsGood(mu, MuonTools::kTM2DCompatibilityTight);
82 break;
83 default:
84 break;
85 }
86
87 if (!idpass)
88 continue;
89
90 Bool_t isopass = kFALSE;
91 switch (fMuIsoType) {
92 case kTrackCalo:
93 isopass = (mu->IsoR03SumPt() < fTrackIsolationCut) &&
94 (mu->IsoR03EmEt() + mu->IsoR03HadEt() < fCaloIsolationCut);
95 break;
96 case kTrackCaloCombined:
97 isopass = (1.0 * mu->IsoR03SumPt() + 1.0 * mu->IsoR03EmEt() +
98 1.0 * mu->IsoR03HadEt() < fCombIsolationCut);
99 break;
100 case kTrackCaloSliding:
101 {
102 Double_t totalIso = 1.0 * mu->IsoR03SumPt() +
103 1.0 * mu->IsoR03EmEt() +
104 1.0 * mu->IsoR03HadEt();
105 if ((totalIso < (mu->Pt()-10.0)*5.0/15.0 && mu->Pt() <= 25) ||
106 (totalIso < 5.0 && mu->Pt() > 25) ||
107 totalIso <= 0)
108 isopass = kTRUE;
109 }
110 break;
111 case kNoIso:
112 isopass = kTRUE;
113 break;
114 case kCustomIso:
115 default:
116 break;
117 }
118
119 if (!isopass)
120 continue;
121
122 // add good muon
123 CleanMuons->Add(mu);
124 }
125
126 // sort according to pt
127 CleanMuons->Sort();
128
129 // add objects for other modules to use
130 AddObjThisEvt(CleanMuons);
131 }
132
133 //--------------------------------------------------------------------------------------------------
134 void MuonIDMod::SlaveBegin()
135 {
136 // Run startup code on the computer (slave) doing the actual analysis. Here,
137 // we just request the muon collection branch.
138
139 ReqBranch(fMuonBranchName, fMuons);
140
141 fMuonTools = new MuonTools;
142
143 if (fMuonIDType.CompareTo("Tight") == 0)
144 fMuIDType = kTight;
145 else if (fMuonIDType.CompareTo("Loose") == 0)
146 fMuIDType = kLoose;
147 else if (fMuonIDType.CompareTo("NoId") == 0)
148 fMuIDType = kNoId;
149 else if (fMuonIDType.CompareTo("Custom") == 0) {
150 fMuIDType = kCustomId;
151 SendError(kWarning, "SlaveBegin",
152 "Custom muon identification is not yet implemented.");
153 } else {
154 SendError(kAbortAnalysis, "SlaveBegin",
155 "The specified muon identification %s is not defined.",
156 fMuonIDType.Data());
157 return;
158 }
159
160 if (fMuonIsoType.CompareTo("TrackCalo") == 0)
161 fMuIsoType = kTrackCalo;
162 else if (fMuonIsoType.CompareTo("TrackCaloCombined") == 0)
163 fMuIsoType = kTrackCaloCombined;
164 else if (fMuonIsoType.CompareTo("TrackCaloSliding") == 0)
165 fMuIsoType = kTrackCaloSliding;
166 else if (fMuonIsoType.CompareTo("NoIso") == 0)
167 fMuIsoType = kNoIso;
168 else if (fMuonIsoType.CompareTo("Custom") == 0) {
169 fMuIsoType = kCustomIso;
170 SendError(kWarning, "SlaveBegin",
171 "Custom muon isolation is not yet implemented.");
172 } else {
173 SendError(kAbortAnalysis, "SlaveBegin",
174 "The specified muon isolation %s is not defined.",
175 fMuonIsoType.Data());
176 return;
177 }
178
179 if (fMuonClassType.CompareTo("All") == 0)
180 fMuClassType = kAll;
181 else if (fMuonClassType.CompareTo("Global") == 0)
182 fMuClassType = kGlobal;
183 else if (fMuonClassType.CompareTo("Standalone") == 0)
184 fMuClassType = kSta;
185 else if (fMuonClassType.CompareTo("TrackerOnly") == 0)
186 fMuClassType = kTrackerOnly;
187 else {
188 SendError(kAbortAnalysis, "SlaveBegin",
189 "The specified muon class %s is not defined.",
190 fMuonClassType.Data());
191 return;
192 }
193 }