CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ParamL3MuonProducer.cc
Go to the documentation of this file.
1 //
2 // Package: ParamL3MuonProducer
3 // Class: ParamL3MuonProducer
4 //
19 //
20 // Original Author: Andrea Perrotta
21 // Created: Mon Oct 30 14:37:24 CET 2006
22 // $Id: ParamL3MuonProducer.cc,v 1.17 2009/03/03 14:06:08 abdullin Exp $
23 //
24 //
25 
26 // CMSSW headers
33 
34 // Fast Simulation headers
37 
38 // SimTrack
40 
41 // L1
45 
46 // L3
49 
50 // GL
54 
55 // STL headers
56 #include <vector>
57 #include <iostream>
58 
59 // CLHEP headers
61 
62 // Data Formats
68 
69 // constants, enums and typedefs
70 typedef std::vector<L1MuGMTCand> L1MuonCollection;
71 
72 //
73 // static data member definitions
74 //
75 
76 //for debug only
77 //#define FAMOS_DEBUG
78 
79 double ParamL3MuonProducer::muonMassGeV_ = 0.105658369 ; // PDG06
80 
81 //
82 // constructors and destructor
83 //
85 {
86 
88  iConfig.getParameter<edm::ParameterSet>("TRACKS"));
89 
90  //register your products
91  if (doL1_) {
92  produces<L1MuonCollection> ("ParamL1Muons");
93  produces<L1ExtraCollection> ("ParamL1Muons");
94  }
95  if (doL3_) produces<reco::MuonCollection>("ParamL3Muons");
96  if (doGL_) produces<reco::MuonCollection>("ParamGlobalMuons");
97 
98  // Initialize the random number generator service
100  if ( ! rng.isAvailable() ) {
101  throw cms::Exception("Configuration") <<
102  "ParamMuonProducer requires the RandomGeneratorService \n"
103  "which is not present in the configuration file. \n"
104  "You must add the service in the configuration file\n"
105  "or remove the module that requires it.";
106  }
107 
108  random = new RandomEngine(&(*rng));
109 
110 }
111 
112 
114 {
115 
116  // do anything here that needs to be done at destruction time
117  // (e.g. close files, deallocate resources etc.)
118 
119  if ( random ) {
120  delete random;
121  }
122 }
123 
124 
125 //
126 // member functions
127 //
128 
129 // ------------ method called to produce the data ------------
130 
132 {
133  using namespace edm;
134 
135  Handle<std::vector<SimTrack> > simMuons;
137 
138  unsigned nmuons = simMuons->size();
139  // Handle<std::vector<SimVertex> > simVertices;
140  // iEvent.getByLabel(theSimModuleLabel_,simVertices);
141 
142  int ntrks = 0;
146  std::vector<SimTrack> trackOriginalMuons;
147 
148  if (doL3_ || doGL_) {
149  iEvent.getByLabel(theTrkModuleLabel_,theTracks);
150  ntrks = theTracks->size();
151  reco::TrackCollection::const_iterator trk=theTracks->begin();
152  reco::TrackCollection::const_iterator trkEnd=theTracks->end();
153  //Get RecHits from the event
154  iEvent.getByType(theGSRecHits);
155 
156  // Associate the reconstructed trackerTrack with the simTrack...
157  int trackIndex = 0;
158  for ( ; trk!=trkEnd; ++trk) {
159 
160  // The vector of SimTrack id for each rechits (useful only for full pattern recognition)
161  std::vector<unsigned> SimTrackIds( fullPattern_ ? trk->recHitsSize() : 0,
162  static_cast<unsigned>(0));
163 
164  // Here is the case with fast tracking (no pattern recognition)
165  // All rechits come from the same sim track, so only the first hit is checked.
166  int idmax = -1;
167  if ( !fullPattern_ ) {
168  // Find the SimTrack Id
169  idmax = findId(*trk);
170 
171  // Now comes the case with full pattern recognition
172  // The rechits may come from several simtracks, so take the simtrack which shares
173  // the largest number of hits with the reconstructed track
174  } else {
175 
176  // Fill it!
177  // The rechit iterator
178  trackingRecHit_iterator it = trk->recHitsBegin();
179  trackingRecHit_iterator rechitsEnd = trk->recHitsEnd();
180  // Loop on the rechits for this track
181  for ( unsigned ih=0; it!=rechitsEnd; ++it,++ih ) {
182  if ((*it)->isValid()) {
183  const SiTrackerGSRecHit2D * rechit = dynamic_cast<const SiTrackerGSRecHit2D *> (it->get());
184  if ( rechit ) SimTrackIds[ih] = rechit->simtrackId();
185  }
186  }
187  } // end of loop over the recHits belonging to the track
188 
189  // Now find the simTrack with the largest number of hits in common
190  int nmax = 0;
191  for(size_t j=0; j<SimTrackIds.size(); j++){
192  int n = std::count(SimTrackIds.begin(), SimTrackIds.end(), SimTrackIds[j]);
193  if(n>nmax){
194  nmax = n;
195  idmax = SimTrackIds[j];
196  }
197  }
198 
199  for( unsigned fsimi=0; fsimi < nmuons; ++fsimi) {
200  const SimTrack& simTrack = (*simMuons)[fsimi];
201  if( (int) simTrack.trackId() == idmax) {
202  allMuonTracks.push_back(reco::TrackRef(theTracks,trackIndex));
203  trackOriginalMuons.push_back(simTrack);
204  break;
205  }
206  }
207 
208  trackIndex++;
209  } // end loop on rec tracks
210  } // end if clause
211 
212 
213 #ifdef FAMOS_DEBUG
214  std::cout << " *** ParamMuonProducer::reconstruct() -> entering " << std::endl;
215  std::cout << " *** Event with " << nmuons << " simulated muons and "
216  << ntrks << " tracker tracks" << std::endl;
217 #endif
218 
219 //
220 // Loop over generated muons and reconstruct L1, L3 and Global muons
221 //
222 
223  int nMu = 0;
224  mySimpleL1MuonCands.clear();
225  mySimpleL1MuonExtraCands.clear();
226  mySimpleL3MuonCands.clear();
227  mySimpleL3MuonSeeds.clear();
228  mySimpleGLMuonCands.clear();
229 
230  FML1Muons mySimpleL1MuonCandsTemp;
231  reco::MuonCollection mySimpleL3MuonCandsTemp;
232 
233 
234  for( unsigned fsimi=0; fsimi < nmuons; ++fsimi) {
235  // The sim track can be a muon or a decaying hadron
236  const SimTrack& mySimTrack = (*simMuons)[fsimi];
237  int pid = mySimTrack.type();
238  // The daughter muons in case of a decaying hadron is just after the muon in the list
239  // We keep the daughter muon momentum for L1 and skip the daughter muon in the loop
240  // to avoid double counting at L1
241  const SimTrack& mySimMuon = fabs(pid)==13 ? (*simMuons)[fsimi] : (*simMuons)[++fsimi];
242 
243  bool hasL1 = false , hasL3 = false , hasTK = false , hasGL = false;
244 
245  //Replace with this as soon transition to ROOTMath is complete
246  // math::XYZTLorentzVector& mySimP4 = mySimTrack.momentum();
247  math::XYZTLorentzVector mySimP4 = math::XYZTLorentzVector(mySimTrack.momentum().x(),
248  mySimTrack.momentum().y(),
249  mySimTrack.momentum().z(),
250  mySimTrack.momentum().t());
251 
252 #ifdef FAMOS_DEBUG
253  std::cout << " ===> ParamMuonProducer::reconstruct() - pid = "
254  << mySimTrack.type() ;
255  std::cout << " : pT = " << mySimP4.Pt()
256  << ", eta = " << mySimP4.Eta()
257  << ", phi = " << mySimP4.Phi() << std::endl;
258 #endif
259 
260 // *** Reconstruct parameterized muons starting from undecayed simulated muons
261 
262  if ( mySimP4.Eta()>minEta_ && mySimP4.Eta()<maxEta_ ) {
263 
264  nMu++;
265 
266 //
267 // Now L1
268 //
269 
270  SimpleL1MuGMTCand * thisL1MuonCand = new SimpleL1MuGMTCand(&mySimMuon);
271  if (doL1_ || doL3_ || doGL_) {
272  hasL1 = myL1EfficiencyHandler->kill(thisL1MuonCand);
273  if (hasL1) {
274  bool status2 = myL1PtSmearer->smear(thisL1MuonCand);
275  if (!status2) { std::cout << "Pt smearing of L1 muon went wrong!!" << std::endl; }
276  if (status2) {
277  mySimpleL1MuonCandsTemp.push_back(thisL1MuonCand);
278  float pt = thisL1MuonCand->ptValue();
279  unsigned int rank=1;
280  FML1Muons::const_iterator l1st;
281  for(l1st=mySimpleL1MuonCandsTemp.begin();(*l1st)!=thisL1MuonCand;++l1st) {
282  if ((*l1st)->ptValue()>=pt) {
283  unsigned int newrank = (*l1st)->rank()+1;
284  (*l1st)->setRank(newrank);
285  }
286  else ++rank;
287  }
288  thisL1MuonCand->setRank(rank);
289  }
290  else {
291  hasL1 = false;
292  delete thisL1MuonCand;
293  }
294  }
295  }
296 
297 
298  reco::TrackRef myTrackerTrack;
299  if (doL3_ || doGL_) {
300 
301 // Check if a correspondig track does exist:
302  std::vector<SimTrack>::const_iterator genmu;
303  reco::track_iterator trkmu=allMuonTracks.begin();
304  for (genmu=trackOriginalMuons.begin();
305  genmu!=trackOriginalMuons.end();genmu++) {
306  if(mySimTrack.trackId() == (*genmu).trackId()) {
307  hasTK = true;
308  myTrackerTrack = (*trkmu);
309  break;
310  }
311  trkmu++;
312  }
313 
314 //
315 // L3 muon
316 //
317  if (hasL1 && hasTK) {
318  hasL3 = myL3EfficiencyHandler->kill(mySimTrack);
319  if (hasL3) {
320  int myL3Charge = myTrackerTrack->charge();
321  const math::XYZTLorentzVector& myL3P4 =
322  myL3PtSmearer->smear(mySimP4,myTrackerTrack->momentum());
323  // const math::PtEtaPhiMLorentzVector& myL3P4 =
324  // math::PtEtaPhiMLorentzVector( myL3PtSmearer->smear(mySimP4,myTrackerTrack->momentum()) );
325  math::XYZPoint myL3Vertex = myTrackerTrack->referencePoint();
326  reco::Muon * thisL3MuonCand = new reco::Muon(myL3Charge,myL3P4,myL3Vertex);
327  thisL3MuonCand->setInnerTrack(myTrackerTrack);
328  mySimpleL3MuonCandsTemp.push_back((*thisL3MuonCand));
329  mySimpleL3MuonSeeds.push_back(thisL1MuonCand);
330  }
331  }
332 
333 //
334 // Global Muon
335 //
336  if (doGL_ && hasL3 && hasTK) {
337  hasGL = myGLfromL3TKEfficiencyHandler->kill(mySimTrack);
338  }
339  else if (doGL_ && hasTK) {
340  hasGL = myGLfromTKEfficiencyHandler->kill(mySimTrack);
341  }
342  // else if (doGL_ && hasL3) {
343  // hasGL = myGLfromL3EfficiencyHandler->kill(mySimTrack);
344  // }
345  if (hasGL) {
346  int myGLCharge = myTrackerTrack->charge();
347  const math::XYZTLorentzVector& myGLP4 =
348  myGLPtSmearer->smear(mySimP4,myTrackerTrack->momentum());
349  // const math::PtEtaPhiMLorentzVector& myGLP4 =
350  // math::PtEtaPhiMLorentzVector ( myGLPtSmearer->smear(mySimP4,myTrackerTrack->momentum()) );
351  math::XYZPoint myGLVertex = myTrackerTrack->referencePoint();
352  reco::Muon * thisGLMuonCand = new reco::Muon(myGLCharge,myGLP4,myGLVertex);
353  thisGLMuonCand->setInnerTrack(myTrackerTrack);
354  mySimpleGLMuonCands.push_back((*thisGLMuonCand));
355  }
356  }
357 
358 //
359 // Summary debug for this generated muon:
360 //
361 #ifdef FAMOS_DEBUG
362  std::cout << " Muon " << nMu << " reconstructed with: " ;
363  if (hasL1) std::cout << " L1 ; " ;
364  if (hasTK) std::cout << " Tk ; " ;
365  if (hasL3) std::cout << " L3 ; " ;
366  if (hasGL) std::cout << " GL . " ;
367  std::cout << std::endl;
368 #endif
369 
370  }
371 
372  }
373 
374 
375 // kill low ranked L1 and L3 muons, and fill L1extra muons -->
376  unsigned int rankmax = mySimpleL1MuonCandsTemp.size();
377  FML1Muons::const_iterator l1mu;
378  reco::MuonCollection::const_iterator l3mu;
379  l1mu = mySimpleL3MuonSeeds.begin();
380  for (l3mu=mySimpleL3MuonCandsTemp.begin(); l3mu!=mySimpleL3MuonCandsTemp.end(); ++l3mu) {
381  unsigned int rank = (*l1mu)->rank();
382  if (rank+4>rankmax) mySimpleL3MuonCands.push_back(*l3mu);
383 #ifdef FAMOS_DEBUG
384  else
385  std::cout << " Killed L3 muon candidate of rank " << rank
386  << " when rankmax is " << rankmax << std::endl;
387 #endif
388  ++l1mu;
389  }
390  for (l1mu=mySimpleL1MuonCandsTemp.begin(); l1mu!=mySimpleL1MuonCandsTemp.end(); ++l1mu) {
391  unsigned int rank = (*l1mu)->rank();
392  if (rank+4>rankmax) {
393  mySimpleL1MuonCands.push_back(*l1mu);
394 
395  double pt = (*l1mu)->ptValue() + 1.e-6 ;
396  double eta = (*l1mu)->etaValue();
397  double phi = (*l1mu)->phiValue();
398  math::PtEtaPhiMLorentzVector PtEtaPhiMP4(pt,eta,phi,muonMassGeV_);
399  math::XYZTLorentzVector myL1P4(PtEtaPhiMP4);
400  // math::PtEtaPhiMLorentzVector myL1P4(pt,eta,phi,muonMassGeV_);
401  mySimpleL1MuonExtraCands.push_back( l1extra::L1MuonParticle( (*l1mu)->charge(), myL1P4, *(*l1mu)) );
402  }
403 #ifdef FAMOS_DEBUG
404  else
405  std::cout << " Killed L1 muon candidate of rank " << rank
406  << " when rankmax is " << rankmax << std::endl;
407 #endif
408  }
409 // end killing of low ranked L1 and L3 muons -->
410 
411 
412  int nL1 = mySimpleL1MuonCands.size();
413  int nL3 = mySimpleL3MuonCands.size();
414  int nGL = mySimpleGLMuonCands.size();
415  nMuonTot += nMu;
416  nL1MuonTot += nL1;
417  nL3MuonTot += nL3;
418  nGLMuonTot += nGL;
419 
420 #ifdef FAMOS_DEBUG
421 // start debug -->
422  unsigned int i = 0;
423  // FML1Muons::const_iterator l1mu;
424  for (l1mu=mySimpleL1MuonCands.begin(); l1mu!=mySimpleL1MuonCands.end(); l1mu++) {
425  ++i;
426  std::cout << "FastMuon L1 Cand " << i
427  << " : pT = " << (*l1mu)->ptValue()
428  << ", eta = " << (*l1mu)->etaValue()
429  << ", phi = " << (*l1mu)->phiValue()
430  << ", rank = " << (*l1mu)->rank()
431  << std::endl;
432  }
433  i=0;
434  L1ExtraCollection::const_iterator l1ex;
435  for (l1ex=mySimpleL1MuonExtraCands.begin(); l1ex!=mySimpleL1MuonExtraCands.end(); l1ex++) {
436  ++i;
437  std::cout << "FastMuon L1 Extra Cand " << i
438  << " : pT = " << (*l1ex).pt()
439  << ", eta = " << (*l1ex).eta()
440  << ", phi = " << (*l1ex).phi()
441  << std::endl;
442  }
443  i=0;
444  // reco::MuonCollection::const_iterator l3mu;
445  for (l3mu=mySimpleL3MuonCands.begin(); l3mu!=mySimpleL3MuonCands.end(); l3mu++) {
446  ++i;
447  std::cout << "FastMuon L3 Cand " << i
448  << " : pT = " << (*l3mu).pt()
449  << ", eta = " << (*l3mu).eta()
450  << ", phi = " << (*l3mu).phi()
451  // << ", vertex = ( " << (*l3mu).vx()
452  // << " , " << (*l3mu).vy()
453  // << " , " << (*l3mu).vz() << " )"
454  << std::endl;
455  std::cout << "- tracker Track"
456  << " : pT = " << (*l3mu).track()->pt()
457  << ", eta = " << (*l3mu).track()->eta()
458  << ", phi = " << (*l3mu).track()->phi()
459  // << ", vertex = ( " << (*l3mu).track()->vx()
460  // << " , " << (*l3mu).track()->vy()
461  // << " , " << (*l3mu).track()->vz() << " )"
462  << std::endl;
463  }
464  i=0;
465  reco::MuonCollection::const_iterator glmu;
466  for (glmu=mySimpleGLMuonCands.begin(); glmu!=mySimpleGLMuonCands.end(); glmu++) {
467  ++i;
468  std::cout << "FastGlobalMuon Cand " << i
469  << " : pT = " << (*glmu).pt()
470  << ", eta = " << (*glmu).eta()
471  << ", phi = " << (*glmu).phi()
472  // << ", vertex = ( " << (*l3mu).vx()
473  // << " , " << (*l3mu).vy()
474  // << " , " << (*l3mu).vz() << " )"
475  << std::endl;
476  std::cout << "- tracker Track"
477  << " : pT = " << (*glmu).track()->pt()
478  << ", eta = " << (*glmu).track()->eta()
479  << ", phi = " << (*glmu).track()->phi()
480  // << ", vertex = ( " << (*l3mu).track()->vx()
481  // << " , " << (*l3mu).track()->vy()
482  // << " , " << (*l3mu).track()->vz() << " )"
483  << std::endl;
484  }
485 
486  std::cout << " ===> Number of generator -> L1 / L3 / Global muons in the event : "
487  << nMu << " -> " << nL1 << " / " << nL3 << " / " << nGL << std::endl;
488 
489 // end debug -->
490 #endif
491 
492  if (doL1_) {
493  std::auto_ptr<L1MuonCollection> l1Out(new L1MuonCollection);
494  std::auto_ptr<L1ExtraCollection> l1ExtraOut(new L1ExtraCollection);
495  loadL1Muons(*l1Out,*l1ExtraOut);
496  iEvent.put(l1Out,"ParamL1Muons");
497  iEvent.put(l1ExtraOut,"ParamL1Muons");
498  }
499  if (doL3_) {
500  std::auto_ptr<reco::MuonCollection> l3Out(new reco::MuonCollection);
501  loadL3Muons(*l3Out);
502  iEvent.put(l3Out,"ParamL3Muons");
503  }
504  if (doGL_) {
505  std::auto_ptr<reco::MuonCollection> glOut(new reco::MuonCollection);
506  loadGLMuons(*glOut);
507  iEvent.put(glOut,"ParamGlobalMuons");
508  }
509 
510 }
511 
512 
514 {
515 
516  FML1Muons::const_iterator l1mu;
517  L1ExtraCollection::const_iterator l1ex;
518  // Add L1 muons:
519  for (l1mu=mySimpleL1MuonCands.begin();l1mu!=mySimpleL1MuonCands.end();++l1mu) {
520  c.push_back(*(*l1mu));
521  }
522  for (l1ex=mySimpleL1MuonExtraCands.begin();l1ex!=mySimpleL1MuonExtraCands.end();++l1ex) {
523  d.push_back(*l1ex);
524  }
525 
526 }
527 
529 {
530  reco::MuonCollection::const_iterator l3mu;
531  // Add L3 muons:
532  for(l3mu=mySimpleL3MuonCands.begin();l3mu!=mySimpleL3MuonCands.end();++l3mu) {
533  c.push_back(*l3mu);
534  }
535 }
536 
538 {
539  reco::MuonCollection::const_iterator glmu;
540  // Add Global muons:
541  for(glmu=mySimpleGLMuonCands.begin();glmu!=mySimpleGLMuonCands.end();++glmu) {
542  c.push_back(*glmu);
543  }
544 }
545 
546 
547 // ------------ method called once each job just before starting event loop ------------
549 {
550 
551  // Initialize
552  nMuonTot = 0;
553 
554  nL1MuonTot = 0;
555  mySimpleL1MuonCands.clear();
556  mySimpleL1MuonExtraCands.clear();
559 
560  nL3MuonTot = 0;
561  mySimpleL3MuonCands.clear();
564 
565  nGLMuonTot = 0;
566  mySimpleGLMuonCands.clear();
570  // myGLPtSmearer = new FML3PtSmearer(random);
572 
573 }
574 
575 
576 // ------------ method called once each job just after ending the event loop ------------
578 
579  std::cout << " ===> ParamL3MuonProducer , final report." << std::endl;
580  std::cout << " ===> Number of total -> L1 / L3 / GL muons in the whole run : "
581  << nMuonTot << " -> " << nL1MuonTot << " / "
582  << nL3MuonTot << " / " << nGLMuonTot << std::endl;
583 }
584 
585 
587  const edm::ParameterSet& fastTracks) {
588  // Muons
589  doL1_ = fastMuons.getUntrackedParameter<bool>("ProduceL1Muons");
590  doL3_ = fastMuons.getUntrackedParameter<bool>("ProduceL3Muons");
591  doGL_ = fastMuons.getUntrackedParameter<bool>("ProduceGlobalMuons");
592  theSimModuleLabel_ = fastMuons.getParameter<std::string>("simModuleLabel");
593  theSimModuleProcess_ = fastMuons.getParameter<std::string>("simModuleProcess");
594  theTrkModuleLabel_ = fastMuons.getParameter<std::string>("trackModuleLabel");
595  minEta_ = fastMuons.getParameter<double>("MinEta");
596  maxEta_ = fastMuons.getParameter<double>("MaxEta");
597  if (minEta_ > maxEta_) {
598  double tempEta_ = maxEta_ ;
599  maxEta_ = minEta_ ;
600  minEta_ = tempEta_ ;
601  }
602 
603  // Tracks
604  fullPattern_ = fastTracks.getUntrackedParameter<bool>("FullPatternRecognition");
605 
606  std::cout << " Parameterized MUONS: FastSimulation parameters " << std::endl;
607  std::cout << " ============================================== " << std::endl;
608  std::cout << " Parameterized muons reconstructed in the pseudorapidity range : "
609  << minEta_ << " -> " << maxEta_ << std::endl;
610  if ( fullPattern_ )
611  std::cout << " The FULL pattern recognition option is turned ON" << std::endl;
612  else
613  std::cout << " The FAST tracking option is turned ON" << std::endl;
614 }
615 
616 int
618  int trackId = -1;
619  trackingRecHit_iterator aHit = aTrack.recHitsBegin();
620  trackingRecHit_iterator lastHit = aTrack.recHitsEnd();
621  for ( ; aHit!=lastHit; ++aHit ) {
622  if ( !aHit->get()->isValid() ) continue;
623  const SiTrackerGSRecHit2D * rechit = (const SiTrackerGSRecHit2D*) (aHit->get());
624  trackId = rechit->simtrackId();
625  break;
626  }
627  return trackId;
628 }
629 
630 //define this as a plug-in
FML3PtSmearer * myL3PtSmearer
T getParameter(std::string const &) const
void setRank(unsigned int rank)
set rank
FML3PtSmearer * myGLPtSmearer
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
bool kill(const SimTrack &)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
std::vector< l1extra::L1MuonParticle > L1ExtraCollection
virtual void setInnerTrack(const TrackRef &t)
set reference to Track
Definition: Muon.cc:720
FML1EfficiencyHandler * myL1EfficiencyHandler
bool smear(SimpleL1MuGMTCand *)
smear the transverse momentum of a SimplL1MuGMTCand
bool getByType(Handle< PROD > &result) const
Definition: Event.h:403
std::vector< L1MuGMTCand > L1MuonCollection
T eta() const
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
const int & simtrackId() const
reco::MuonCollection mySimpleL3MuonCands
PtEtaPhiMLorentzVectorD PtEtaPhiMLorentzVector
Lorentz vector with cartesian internal representation.
Definition: LorentzVector.h:26
bool kill(const SimpleL1MuGMTCand *)
reject tracks according to parametrized algorithmic efficiency
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:30
std::string theSimModuleProcess_
void loadGLMuons(reco::MuonCollection &c) const
virtual void beginRun(edm::Run &, edm::EventSetup const &)
int iEvent
Definition: GenABIO.cc:243
FMGLfromL3EfficiencyHandler * myGLfromL3EfficiencyHandler
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
FML1PtSmearer * myL1PtSmearer
const RandomEngine * random
math::XYZTLorentzVector smear(math::XYZTLorentzVector simP4, math::XYZVector recP3) const
smear the transverse momentum of a reco::Muon
L1ExtraCollection mySimpleL1MuonExtraCands
int j
Definition: DBlmapReader.cc:9
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:63
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:359
float ptValue() const
Definition: L1MuGMTCand.cc:130
virtual void produce(edm::Event &, const edm::EventSetup &)
unsigned int trackId() const
Definition: CoreSimTrack.h:49
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
int findId(const reco::Track &aTrack) const
std::vector< L1MuGMTCand > L1MuonCollection
int type() const
particle type (HEP PDT convension)
Definition: CoreSimTrack.h:40
ParamL3MuonProducer(const edm::ParameterSet &)
const math::XYZTLorentzVectorD & momentum() const
particle info...
Definition: CoreSimTrack.h:36
void loadL3Muons(reco::MuonCollection &c) const
FMGLfromTKEfficiencyHandler * myGLfromTKEfficiencyHandler
FMGLfromL3TKEfficiencyHandler * myGLfromL3TKEfficiencyHandler
tuple cout
Definition: gather_cfg.py:41
void readParameters(const edm::ParameterSet &, const edm::ParameterSet &)
FML3EfficiencyHandler * myL3EfficiencyHandler
void loadL1Muons(L1MuonCollection &c, L1ExtraCollection &d) const
std::vector< SimpleL1MuGMTCand * > FML1Muons
reco::MuonCollection mySimpleGLMuonCands
Definition: Run.h:31
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:65
Definition: DDAxes.h:10