ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitPhysics/Mods/src/MuonIDMod.cc
(Generate patch)

Comparing UserCode/MitPhysics/Mods/src/MuonIDMod.cc (file contents):
Revision 1.10 by loizides, Wed Dec 10 11:44:33 2008 UTC vs.
Revision 1.22 by ceballos, Mon Jun 1 17:31:38 2009 UTC

# Line 13 | Line 13 | ClassImp(mithep::MuonIDMod)
13    BaseMod(name,title),
14    fMuonBranchName(Names::gkMuonBrn),
15    fCleanMuonsName(ModNames::gkCleanMuonsName),  
16 +  fVertexName("PrimaryVertexesBeamSpot"),
17    fMuonIDType("Loose"),
18    fMuonIsoType("TrackCaloSliding"),  
19    fMuonClassType("Global"),  
# Line 20 | Line 21 | ClassImp(mithep::MuonIDMod)
21    fCaloIsolationCut(3.0),
22    fCombIsolationCut(5.0),
23    fMuonPtMin(10),
24 <  fMuons(0)
24 >  fApplyD0Cut(kTRUE),
25 >  fD0Cut(0.025),
26 >  fReverseIsoCut(kFALSE),
27 >  fReverseD0Cut(kFALSE),
28 >  fMuIDType(kIdUndef),
29 >  fMuIsoType(kIsoUndef),
30 >  fMuClassType(kClassUndef),
31 >  fMuons(0),
32 >  fVertices(0),
33 >  fMuonTools(0)
34   {
35    // Constructor.
36   }
37  
28
38   //--------------------------------------------------------------------------------------------------
39   void MuonIDMod::Process()
40   {
41    // Process entries of the tree.
42  
43 <  LoadBranch(fMuonBranchName);
43 >  LoadEventObject(fMuonBranchName, fMuons);
44 >  LoadEventObject(fVertexName,     fVertices);
45  
46    MuonOArr *CleanMuons = new MuonOArr;
47    CleanMuons->SetName(fCleanMuonsName);
# Line 40 | Line 50 | void MuonIDMod::Process()
50      const Muon *mu = fMuons->At(i);
51  
52      Bool_t pass = kFALSE;
53 <    Double_t pt = -1; // make sure pt is taken from the correct track!
53 >    Double_t pt = 0; // make sure pt is taken from the correct track!
54      switch (fMuClassType) {
55        case kAll:
56          pass = kTRUE;
57 <        pt = mu->Pt();
57 >        if (mu->HasTrk())
58 >          pt = mu->Pt();
59          break;
60        case kGlobal:
61 <        pass = (mu->GlobalTrk() != 0);
61 >        pass = mu->HasGlobalTrk();
62          if (pass)
63            pt = mu->GlobalTrk()->Pt();
64          break;
65        case kSta:
66 <        pass = (mu->StandaloneTrk() != 0);
66 >        pass = mu->HasStandaloneTrk();
67          if (pass)
68            pt = mu->StandaloneTrk()->Pt();
69          break;
70        case kTrackerOnly:
71 <        pass = (mu->TrackerTrk() != 0);
71 >        pass = mu->HasTrackerTrk();
72          if (pass)
73            pt = mu->TrackerTrk()->Pt();
74          break;
# Line 81 | Line 92 | void MuonIDMod::Process()
92          idpass = fMuonTools->IsGood(mu, MuonTools::kTMOneStationTight) &&
93                   fMuonTools->IsGood(mu, MuonTools::kTM2DCompatibilityTight);
94          break;
95 +      case kNoId:
96 +        idpass = kTRUE;
97 +        break;
98        default:
99          break;
100      }
# Line 88 | Line 102 | void MuonIDMod::Process()
102      if (!idpass)
103        continue;
104  
105 <    Bool_t isopass = kFALSE;
105 >    Bool_t isocut = kFALSE;
106      switch (fMuIsoType) {
107        case kTrackCalo:
108 <        isopass = (mu->IsoR03SumPt() < fTrackIsolationCut) &&
108 >        isocut = (mu->IsoR03SumPt() < fTrackIsolationCut) &&
109            (mu->IsoR03EmEt() + mu->IsoR03HadEt() < fCaloIsolationCut);
110          break;
111        case kTrackCaloCombined:
112 <        isopass = (1.0 * mu->IsoR03SumPt() + 1.0 * mu->IsoR03EmEt() +
112 >        isocut = (1.0 * mu->IsoR03SumPt() + 1.0 * mu->IsoR03EmEt() +
113                     1.0 * mu->IsoR03HadEt() < fCombIsolationCut);
114          break;
115        case kTrackCaloSliding:
# Line 103 | Line 117 | void MuonIDMod::Process()
117            Double_t totalIso = 1.0 * mu->IsoR03SumPt() +
118                                1.0 * mu->IsoR03EmEt() +
119                                1.0 * mu->IsoR03HadEt();
120 <          if ((totalIso < (mu->Pt()-10.0)*5.0/15.0 && mu->Pt() <= 25) ||
120 >          if ((totalIso < (pt-10.0)*5.0/15.0 && pt <= 25) ||
121                (totalIso < 5.0 && mu->Pt() > 25) ||
122                 totalIso <= 0)
123 <            isopass = kTRUE;
124 <        }
123 >            isocut = kTRUE;
124 >
125 >          if     (fReverseIsoCut == kTRUE &&
126 >                  isocut == kFALSE && totalIso < 10)
127 >            isocut = kTRUE;
128 >          else if(fReverseIsoCut == kTRUE)
129 >            isocut = kFALSE;
130 >        }
131 >        break;
132 >      case kNoIso:
133 >        isocut = kTRUE;
134          break;
112        case kNoIso:
113          isopass = kTRUE;
114          break;
135        case kCustomIso:
136        default:
137          break;
138      }
139  
140 <    if (!isopass)
140 >    if (isocut == kFALSE)
141        continue;
142  
143 +    if (fApplyD0Cut) {
144 +      Bool_t d0cut = kFALSE;
145 +      const Track *mt = mu->BestTrk();
146 +      if (!mt)
147 +        continue;
148 +      Double_t d0_real = 1e30;
149 +      for(UInt_t i0 = 0; i0 < fVertices->GetEntries(); i0++) {
150 +        Double_t pD0 = mt->D0Corrected(*fVertices->At(i0));
151 +        if(TMath::Abs(pD0) < TMath::Abs(d0_real))
152 +          d0_real = TMath::Abs(pD0);
153 +      }
154 +      if(d0_real < fD0Cut) d0cut = kTRUE;
155 +
156 +      if     (fReverseD0Cut == kTRUE &&
157 +              d0cut == kFALSE && d0_real < 0.05)
158 +        d0cut = kTRUE;
159 +      else if(fReverseD0Cut == kTRUE)
160 +        d0cut = kFALSE;
161 +
162 +      if (d0cut == kFALSE)
163 +        continue;
164 +    }
165 +
166      // add good muon
167      CleanMuons->Add(mu);
168    }
# Line 131 | Line 174 | void MuonIDMod::Process()
174    AddObjThisEvt(CleanMuons);  
175   }
176  
134
177   //--------------------------------------------------------------------------------------------------
178   void MuonIDMod::SlaveBegin()
179   {
180    // Run startup code on the computer (slave) doing the actual analysis. Here,
181    // we just request the muon collection branch.
182  
183 <  ReqBranch(fMuonBranchName, fMuons);
183 >  ReqEventObject(fMuonBranchName, fMuons, kTRUE);
184 >
185 >  if (fApplyD0Cut)
186 >    ReqEventObject(fVertexName, fVertices, kTRUE);
187  
188    fMuonTools = new MuonTools;
189  
# Line 146 | Line 191 | void MuonIDMod::SlaveBegin()
191      fMuIDType = kTight;
192    else if (fMuonIDType.CompareTo("Loose") == 0)
193      fMuIDType = kLoose;
194 +  else if (fMuonIDType.CompareTo("NoId") == 0)
195 +    fMuIDType = kNoId;
196    else if (fMuonIDType.CompareTo("Custom") == 0) {
197      fMuIDType = kCustomId;
198      SendError(kWarning, "SlaveBegin",

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines