ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/LeptonSelection/src/MuonSelection.cc
(Generate patch)

Comparing UserCode/MitHzz4l/LeptonSelection/src/MuonSelection.cc (file contents):
Revision 1.9 by khahn, Tue May 1 16:38:35 2012 UTC vs.
Revision 1.12 by khahn, Sat May 5 13:09:05 2012 UTC

# Line 78 | Line 78 | SelectionStatus muonPreSelection( Contro
78    if(ctrl.debug) cout << "and >5 GeV (" << mu->Pt() << ") ? ... " << ret << endl;  
79    ret &= ( fabs(mu->Eta()) <= 2.4 );
80    if(ctrl.debug) cout << "and < 2.4 eta (" << mu->Eta() << ")? ... " << ret << endl;  
81 <  ret &=  (mu->IsTrackerMuon() && mu->HasTrackerTrk() &&
82 <           (mu->Quality().QualityMask().Mask() & mithep::MuonQuality::AllArbitrated));
83 <  if(ctrl.debug) cout << "and isTrackerMuon ? ... " << ret << endl;  
84 <  //  ret &=  (mu->IsoR03SumPt()/mu->Pt() < 0.7 );
85 <  ret &=  (mu->IsoR03SumPt()/mu->Pt() < 0.7 );
86 <  if(ctrl.debug) cout << "and loose trk iso ? ... " << ret << endl;  
81 >  ret &= ( mu->IsTrackerMuon() || mu->IsGlobalMuon() );
82 >  if(ctrl.debug) cout << "is Tracker or Global? ... " << ret << endl;  
83 >  if( mu->IsTrackerMuon() && mu->HasTrackerTrk() && !mu->IsGlobalMuon() )  
84 >    ret &=  ( mu->Quality().QualityMask().Mask() & mithep::MuonQuality::AllArbitrated);
85 >  if(ctrl.debug) cout << "if isTrackerMuon, arbitrated ? ... " << ret << endl;  
86 >  ret &= ( mu->BestTrk()->DzCorrected(vtx) < 0.1);  
87 >  if( ctrl.debug ) cout << "elepresel : ret after dZcorr : " << ret <<  endl;
88 >
89  
90    SelectionStatus status;
91    if( ret ) status.setStatus(SelectionStatus::PRESELECTION);
# Line 92 | Line 94 | SelectionStatus muonPreSelection( Contro
94   }
95  
96  
95 //--------------------------------------------------------------------------------------------------
96 bool isMuFO( const mithep::Muon * mu,
97             const mithep::Vertex & vtx,
98             const mithep::Array<mithep::PFCandidate> * pfCandidates )
99 //--------------------------------------------------------------------------------------------------
100 {
101  bool isgood=true;
102  float reliso = computePFMuonIso(mu,vtx,pfCandidates,0.3)/mu->Pt();
103
104  if( mu->Pt() < 5  )         isgood=false;                          
105  if ( fabs(mu->BestTrk()->DzCorrected(vtx)) > 0.2 ) isgood=false;   // needed to remove cosmics in HF sample
106
107  //
108
109  // HF seems to not want tkquality, SS does
110  if( mu->Pt()>20 ) {
111    if ( !((mu->IsGlobalMuon()) && mu->NSegments()>0  ) ) isgood=false; //&& mu->nValidHits>0
112  } else {
113    if ( !((mu->IsGlobalMuon()) && mu->NSegments()>0 ) //&& //&& mu->nValidHits>0
114         && !( (mu->IsTrackerMuon()) &&  (mu->Quality().QualityMask().Mask() & muTools.kTMOneStationLoose)
115               )
116         )   isgood=false;
117  }
118
119
120  //
121  // for HF MC to agree w/ data, cannot put any Tk quality bits
122  // but to get to 5% closure in the SS test, we need at least Tk oneStationLoose
123
124  /*
125 && ( (mu->qualityBits & kTMOneStationLoose) ||
126                                               (mu->qualityBits & kTMLastStationOptimizedBarrelLowPtLoose) ||
127                                               (mu->qualityBits & kTMLastStationOptimizedLowPtLoose)
128                                               )
129  */
130
131
132  // comment for more stats for mu fake shape
133  if( mu->Pt() < 20 ) {
134    if( reliso > 3 ) isgood=false;    
135  } else {
136    if( reliso > 5 ) isgood=false;    
137  }
138
139  return isgood;
140 };
141
142 //--------------------------------------------------------------------------------------------------
143 SelectionStatus passSoftMuonSelection( ControlFlags &ctrl,
144                                       const mithep::Muon * mu ,
145                                       const mithep::Vertex & vtx)
146 //--------------------------------------------------------------------------------------------------
147 {
148
149  int level=0;
150  unsigned failmask=0x0;
151  
152  // Use tracker track when available
153  const mithep::Track *muTrk=0;
154  if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
155  else if(mu->HasTrackerTrk())         { muTrk = mu->TrackerTrk(); }
156  else if(mu->HasGlobalTrk())     { muTrk = mu->GlobalTrk(); }
157  assert(muTrk);                  
158
159  if(mu->TrackerTrk()->NHits() < 11 )  
160    failmask |= (1<<level);
161  level++;
162
163  if(fabs(muTrk->D0Corrected(vtx)) > 0.2)
164    failmask |= (1<<level);
165  level++;
166
167  if(fabs(muTrk->DzCorrected(vtx)) > 0.1)
168    failmask |= (1<<level);
169  level++;
170
171  if(!(mu->IsTrackerMuon()))
172    failmask |= (1<<level);
173  level++;
174
175  //  if(!(mu->Quality().QualityMask().Mask() & muTools.kTMLastStationAngTight))
176  if(!(mu->Quality().QualityMask().Mask() & muTools.kTMLastStationTight))
177    failmask |= (1<<level);      
178  level++;
179
180  Double_t iso = (mu->IsoR03SumPt() + mu->IsoR03EmEt() + mu->IsoR03HadEt())/mu->Pt();
181  if(mu->Pt()>20 && iso<0.1)
182    failmask |= (1<<level);
183
184  bool passtight  = !(failmask);
185  bool passloose  = !(failmask);
186  return SelectionStatus( passtight | passloose );
187  
188 }
189
190 //--------------------------------------------------------------------------------------------------
191 //unsigned passMuonSelectionZZ( const mithep::TMuon * mu ) {
192 SelectionStatus passMuonSelectionZZ( ControlFlags &ctrl, const mithep::Muon * mu )
193 //--------------------------------------------------------------------------------------------------
194 {
195  int level=0;
196  unsigned failmask=0x0;
197
198  if(mu->Pt() < 5) {
199    failmask |= (1<<level);
200  }
201
202  level++;
203  if(fabs(mu->Eta()) > 2.4) {
204    failmask |= (1<<level);
205  }
206
207  level++;
208  if(!(mu->IsGlobalMuon())) {
209    failmask |= (1<<level);
210  }
211
212  level++;
213  if(mu->TrackerTrk()->NHits()  < 10) {
214    failmask |= (1<<level);
215  }
216
217
218  level++;  
219  if( (mu->IsoR03SumPt()/mu->Pt()) > 0.7 ) {
220    failmask |= (1<<level);
221  }
222
223  //  if(muon->nPixHits   < 1)     return false;
224  //  if(muon->muNchi2    > 10)    return false;
225  //  if(muon->nMatch     < 2)     return false;
226  //  if(muon->nValidHits         < 1)     return false;
227  //  if(muon->pterr/muon->pt > 0.1)   return false;
228  //  if(fabs(muon->dz)       > 0.1)   return false;  
229  
230  SelectionStatus status;
231  if( !failmask ) status.orStatus(SelectionStatus::LOOSEID);
232  if( !failmask ) status.orStatus(SelectionStatus::TIGHTID);
233  return status;
234
235
236
237 };
238
239
240
241
242 //
243 // Kevin's WW selection
244 //
245 //--------------------------------------------------------------------------------------------------
246 SelectionStatus passMuonSelection( ControlFlags &ctrl,
247                                   const mithep::Muon * mu,
248                                   const mithep::Vertex & vtx   )
249 //--------------------------------------------------------------------------------------------------
250 {
251  SelectionStatus status;
252  int level=0;
253  unsigned failmask=0x0;
254
255  // Use tracker track when available
256  const mithep::Track *muTrk=0;
257  if(mu->HasTrackerTrk())         { muTrk = mu->TrackerTrk(); }
258  else if(mu->HasGlobalTrk())     { muTrk = mu->GlobalTrk(); }
259  else if(mu->HasStandaloneTrk()) { muTrk = mu->StandaloneTrk(); }
260  assert(muTrk);                  
261  
262
263
264  // 0x1
265  if(muTrk->Pt() < 5) {
266    failmask |= (1<<level);
267  }
268
269  // 0x2
270  level++;
271  if(fabs(muTrk->Eta()) > 2.4) {
272    failmask |= (1<<level);
273  }
274
275  // 0x4
276  level++;
277  if(muTrk->PtErr()/muTrk->Pt() > 0.1)   {
278    failmask |= (1<<level);
279  }
280
281  // 0x8
282  level++;
283  if( fabs(muTrk->DzCorrected(vtx)) > 0.1 )   {
284    failmask |= (1<<level);
285  }
286
287  double muNchi2;
288  if(mu->HasStandaloneTrk())      { muNchi2 = mu->StandaloneTrk()->RChi2(); }
289  else if(mu->HasGlobalTrk())     { muNchi2 = mu->GlobalTrk()->RChi2();     }
290  else if(mu->HasTrackerTrk())    { muNchi2 = mu->TrackerTrk()->RChi2();    }
291
292  unsigned qualityBits = mu->Quality().QualityMask().Mask();
293  
294  Bool_t isGlobal  = (mu->IsGlobalMuon()) && (muNchi2 < 10) && (mu->NMatches() > 1) && (mu->NValidHits() > 0);
295  Bool_t isTracker = (mu->IsTrackerMuon() ) && (qualityBits & muTools.kTMLastStationTight);
296
297  // 0x10
298  level++;
299  if((!isGlobal && !isTracker) || !(mu->HasTrackerTrk())) {
300    failmask |= (1<<level);
301    status.setStatus(SelectionStatus::FAIL);
302    return status;    
303  }
304
305  // 0x20
306  level++;
307  assert(mu->HasTrackerTrk());
308  assert(mu->TrackerTrk());
309  if( mu->TrackerTrk()->NHits() < 10 ) {
310    failmask |= (1<<level);
311  }
312
313  level++;
314  if(muTrk->NPixelHits()          < 1) {
315    failmask |= (1<<level);
316  }
317
318
319  level++;
320  if(fabs(muTrk->D0Corrected(vtx))>0.02)   {
321    failmask |= (1<<level);
322  }
323
324  /*
325  if(mu->pt>20) {
326    if(fabs(mu->d0)>0.02)   {
327      failmask |= (1<<level);
328    }
329  } else {
330    if(fabs(mu->d0)>0.01)  {
331    failmask |= (1<<level);
332    }
333  }
334  */
335
336  if( !failmask ) status.orStatus(SelectionStatus::LOOSEID);
337  if( !failmask ) status.orStatus(SelectionStatus::TIGHTID);
338  return status;
339
340
341 };
97  
98  
99   //--------------------------------------------------------------------------------------------------
# Line 347 | Line 102 | SelectionStatus muonIDMVASelection(Contr
102                                   const mithep::Vertex & vtx   )
103   //--------------------------------------------------------------------------------------------------
104   {
350  assert(mu->IsTrackerMuon()); // must be
351  assert(mu->HasTrackerTrk());
352  assert(mu->TrackerTrk());
353
354  /*
355  cerr << "TrackerTrk: " << mu->TrackerTrk() << endl;
356  flush(cerr);
357  cerr << "Rchi2: " << mu->TrackerTrk()->RChi2() << endl;
358  flush(cerr);
359
360  cerr << "calling MVa ... "<< endl;
361  flush(cerr);
362  */
363
105    double global_rchi2 = (mu->IsGlobalMuon()) ? mu->GlobalTrk()->RChi2() : 0.;
106  
107    double mvaval = muIDMVA->MVAValue_ID(mu->Pt(),
# Line 370 | Line 111 | SelectionStatus muonIDMVASelection(Contr
111                                      mu->TrackerTrk()->RChi2(),
112                                      global_rchi2,
113                                      (Double_t)(mu->NValidHits()),
114 <                                    (Double_t)(mu->TrackerTrk()->NHits()),
114 >                                    (Double_t)(mu->TrackerTrk()->NHits()),
115                                      (Double_t)(mu->TrackerTrk()->NPixelHits()),
116                                      (Double_t)(mu->NMatches()),
117                                      mu->TrkKink(),
# Line 394 | Line 135 | SelectionStatus muonIDMVASelection(Contr
135             && fabs(mu->Eta()) > 1.5 && mu->Pt() <= 10 && mvaval >= MUON_IDMVA_CUT_BIN2)  pass = true;
136    else if( mu->IsGlobalMuon() && mu->IsTrackerMuon()
137             && fabs(mu->Eta()) > 1.5 && mu->Pt() > 10 && mvaval >= MUON_IDMVA_CUT_BIN3)  pass = true;
138 <  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon()
139 <           && (mu->Quality().QualityMask().Mask() & mithep::MuonQuality::AllArbitrated) && mvaval >= MUON_IDMVA_CUT_BIN4)
140 <    pass = true;
138 >  else if( !(mu->IsGlobalMuon()) && mu->IsTrackerMuon() && mvaval >= MUON_IDMVA_CUT_BIN4 )  pass = true;
139 >  else if( mu->IsGlobalMuon() && !(mu->IsTrackerMuon()) && mvaval >= MUON_IDMVA_CUT_BIN5 )  pass = true;
140 >  
141  
142  
143    if( pass ) {
# Line 433 | Line 174 | SelectionStatus muonIDPFSelection(Contro
174   {
175    bool pass = false;
176    SelectionStatus status; // init'ed to FAIL
436  
437  // check that muon is tracker
438  if( !(mu->IsTrackerMuon()) )   return status;
177  
178    // check that it matches to a PF muon
179    for( int i=0; i<pfCandidates->GetEntries(); i++ ) {
180      const mithep::PFCandidate *pf = (mithep::PFCandidate*)((*pfCandidates)[i]);
181      if( pf->HasTrackerTrk() ) {
182 <      if( pf->TrackerTrk() == mu->TrackerTrk() && abs(pf->PFType()) == mithep::PFCandidate::eMuon ) {
182 >      if( (pf->TrackerTrk() == mu->TrackerTrk()) && abs(pf->PFType()) == mithep::PFCandidate::eMuon ) {
183          pass = true;
184          break;
185        }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines