CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes
L3TkMuonProducer Class Reference

#include <L3TkMuonProducer.h>

Inheritance diagram for L3TkMuonProducer:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Types

typedef edm::Ref
< L3MuonTrajectorySeedCollection
SeedRef
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

 L3TkMuonProducer (const edm::ParameterSet &)
 constructor with config More...
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 produce candidates More...
 
virtual ~L3TkMuonProducer ()
 destructor More...
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Types

typedef std::map< pseudoRef,
std::pair< reco::TrackRef,
SeedRef > > 
LXtoL3sMap
 
typedef std::pair< unsigned
int, unsigned int > 
pseudoRef
 

Private Member Functions

pseudoRef makePseudoRef (const L3MuonTrajectorySeed &s)
 
bool sharedSeed (const L3MuonTrajectorySeed &s1, const L3MuonTrajectorySeed &s2)
 

Static Private Member Functions

static bool seedRefBypT (const SeedRef &s1, const SeedRef &s2)
 
static bool trackRefBypT (const reco::TrackRef &t1, const reco::TrackRef &t2)
 

Private Attributes

edm::InputTag theL3CollectionLabel
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

This module creates a skimed list of reco::Track (pointing to the original TrackExtra and TrackingRecHitOwnedVector One highest pT track per L1/L2 is selected, requiring some quality.

Author
J-R Vlimant.

Definition at line 25 of file L3TkMuonProducer.h.

Member Typedef Documentation

typedef std::map<pseudoRef, std::pair<reco::TrackRef,SeedRef> > L3TkMuonProducer::LXtoL3sMap
private

Definition at line 47 of file L3TkMuonProducer.h.

typedef std::pair<unsigned int,unsigned int> L3TkMuonProducer::pseudoRef
private

Definition at line 46 of file L3TkMuonProducer.h.

Definition at line 38 of file L3TkMuonProducer.h.

Constructor & Destructor Documentation

L3TkMuonProducer::L3TkMuonProducer ( const edm::ParameterSet parameterSet)

constructor with config

Definition at line 27 of file L3TkMuonProducer.cc.

References edm::ParameterSet::getParameter(), and LogTrace.

27  {
28  LogTrace("Muon|RecoMuon|L3TkMuonProducer")<<" constructor called";
29 
30  // StandAlone Collection Label
31  theL3CollectionLabel = parameterSet.getParameter<InputTag>("InputObjects");
32  produces<TrackCollection>();
33  produces<TrackExtraCollection>();
34  produces<TrackingRecHitCollection>();
35 }
T getParameter(std::string const &) const
#define LogTrace(id)
edm::InputTag theL3CollectionLabel
L3TkMuonProducer::~L3TkMuonProducer ( )
virtual

destructor

Definition at line 38 of file L3TkMuonProducer.cc.

References LogTrace.

38  {
39  LogTrace("Muon|RecoMuon|L3TkMuonProducer")<<" L3TkMuonProducer destructor called";
40 }
#define LogTrace(id)

Member Function Documentation

pseudoRef L3TkMuonProducer::makePseudoRef ( const L3MuonTrajectorySeed s)
inlineprivate

Definition at line 49 of file L3TkMuonProducer.h.

References edm::ProductID::id(), edm::Ref< C, T, F >::id(), edm::Ref< C, T, F >::isNull(), edm::Ref< C, T, F >::key(), L3MuonTrajectorySeed::l1Particle(), and L3MuonTrajectorySeed::l2Track().

49  {
50  reco::TrackRef l2ref = s.l2Track();
51  if (l2ref.isNull()){
53  return std::make_pair(l1ref.id().id(),l1ref.key());
54  }else return std::make_pair(l2ref.id().id(),l2ref.key());
55  }
reco::TrackRef l2Track() const
Get L2 info.
bool isNull() const
Checks for null.
Definition: Ref.h:247
l1extra::L1MuonParticleRef l1Particle() const
Get L1 info.
key_type key() const
Accessor for product key.
Definition: Ref.h:266
ProductID id() const
Accessor for product ID.
Definition: Ref.h:256
ProductIndex id() const
Definition: ProductID.h:38
void L3TkMuonProducer::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
virtual

produce candidates

reconstruct muons

Implements edm::EDProducer.

Definition at line 96 of file L3TkMuonProducer.cc.

References TrajectorySeed::direction(), f, i, edm::ProductID::id(), edm::Ref< C, T, F >::id(), reco::Track::innerDetId(), reco::Track::innerMomentum(), reco::Track::innerOk(), reco::Track::innerPosition(), reco::Track::innerStateCovariance(), edm::Ref< C, T, F >::key(), TSGFromL2_cfi::l3seeds(), LogDebug, findQualityFiles::maxI, metname, edm::Provenance::moduleLabel(), reco::Track::outerDetId(), reco::Track::outerMomentum(), reco::Track::outerOk(), reco::Track::outerPosition(), reco::Track::outerStateCovariance(), printseed(), printvector(), edm::Provenance::processName(), edm::Provenance::productInstanceName(), reco::Track::recHitsBegin(), reco::Track::recHitsEnd(), python.multivaluedict::sort(), and testEve_cfg::tracks.

96  {
97  const string metname = "Muon|RecoMuon|L3TkMuonProducer";
98 
99  // Take the L3 container
100  LogDebug(metname)<<" Taking the L3/GLB muons: "<<theL3CollectionLabel.label();
102  event.getByLabel(theL3CollectionLabel,tracks);
103 
104  //make the LX->L3s pools
105  LXtoL3sMap LXtoL3s;
106 
107  unsigned int maxI = tracks->size();
108  bool gotL3seeds=false;
110 
111  //make a list of reference to tracker tracks
112  vector<TrackRef> orderedTrackTracks(maxI);
113  for (unsigned int i=0;i!=maxI;i++) orderedTrackTracks[i]=TrackRef(tracks,i);
114  LogDebug(metname)<<"vector of L3 tracks before ordering:\n"<<printvector(orderedTrackTracks);
115  //order them in pT
116  sort(orderedTrackTracks.begin(),orderedTrackTracks.end(),trackRefBypT);
117  LogDebug(metname)<<"vector of L3 tracks after ordering:\n"<<printvector(orderedTrackTracks);
118  //loop over then
119  for (unsigned int i=0;i!=maxI;i++) {
120  TrackRef & tk=orderedTrackTracks[i];
121  SeedRef l3seedRef = tk->seedRef().castTo<SeedRef>();
122 
123  vector<SeedRef> allPossibleOrderedLx; // with identical hit-set
124  //add the direct relation
125  allPossibleOrderedLx.push_back(l3seedRef);
126  LogDebug(metname)<<"adding the seed ref: "<<l3seedRef.id().id()<<":"<<l3seedRef.key()<<" for this tracker track: "<<tk.id().id()<<":"<<tk.key();
127 
128  //add the relations due to shared seeds
129  //check whether there is a "shared" seed in addition
130  if (!gotL3seeds){
131  //need to fetch the handle from the ref
132  const edm::Provenance & seedsProv=event.getProvenance(l3seedRef.id());
133  edm::InputTag l3seedsTag(seedsProv.moduleLabel(), seedsProv.productInstanceName(), seedsProv.processName());
134  event.getByLabel(l3seedsTag, l3seeds);
135  gotL3seeds=true;
136  LogDebug(metname)<<"got seeds handle from: "<<l3seedsTag;
137  }
138  //loop the other seeds in the collection
139  for (unsigned int iS=0;iS!=l3seeds->size();++iS){
140  const L3MuonTrajectorySeed & seed = (*l3seeds)[iS];
141  const L3MuonTrajectorySeed & thisSeed = *l3seedRef;
142  if (l3seedRef.key()==iS) continue; //not care about this one
143  //compare this seed with the seed in the collection
144  if (sharedSeed(seed,thisSeed)){
145  SeedRef thisSharedSeedRef(l3seeds,iS);
146  LogDebug(metname)<<"shared seeds: \n"<<printseed(l3seedRef)<<" and: \n"<<printseed(thisSharedSeedRef)
147  <<"\nadding ANOTHER seed ref: "<<thisSharedSeedRef.id().id()<<":"<<thisSharedSeedRef.key()<<" for this tracker track: "<<tk.id().id()<<":"<<tk.key();
148  // edm::LogError(metname)<<" we have a shared seed right there.";
149  allPossibleOrderedLx.push_back(thisSharedSeedRef);
150  }//seed is shared
151  }//loop all other existing seed for overlaps
152 
153  //now you have the full list of Lx objects that have seed this tracker track.
154  // order the list in pT of Lx objects
155  LogDebug(metname)<<"list of possible Lx objects for tracker track: "<<tk.id().id()<<":"<<tk.key()<<" before ordering\n"<<printvector(allPossibleOrderedLx);
156  sort(allPossibleOrderedLx.begin(),allPossibleOrderedLx.end(),seedRefBypT);
157  LogDebug(metname)<<"list of possible Lx objects for tracker track: "<<tk.id().id()<<":"<<tk.key()<<" after ordering\n"<<printvector(allPossibleOrderedLx);
158  // assign this tracker track to the highest pT Lx.
159  for (unsigned int iL=0;iL!=allPossibleOrderedLx.size();++iL){
160  SeedRef thisRef=allPossibleOrderedLx[iL];
161  pseudoRef ref = makePseudoRef(*thisRef);
162  LogDebug(metname)<<"seed ref: "<<thisRef.id().id()<<":"<<thisRef.key()<<" transcribe to pseudoref: "<<ref.first<<":"<<ref.second;
163  LXtoL3sMap::iterator f=LXtoL3s.find(ref);
164  if (f!=LXtoL3s.end()){
165  //there's already an entry. because of the prior ordering in pT of the tracker track refs
166  // the track ref already there *has* a higher pT: this one cannot compete and should be assigned to the next Lx;
167  LogDebug(metname)<<"this tracker track: "<<tk.id().id()<<":"<<tk.key()<<" ("<< tk->pt()<<")"
168  <<"\n cannot compete in pT with track: "<<f->second.first.id().id()<<":"<<f->second.first.key()<<" ("<<f->second.first->pt()<<")"
169  <<"\n already assigned to pseudo ref: "<<ref.first<<":"<<ref.second<<" which corresponds to seedRef: "<<f->second.second.id().id()<<":"<<f->second.second.key();
170  continue;
171  }else{
172  //there was no entry yet. make the assignement
173  LogDebug(metname)<<"this tracker track: "<<tk.id().id()<<":"<<tk.key()
174  <<" is assigned to pseudo ref: "<<ref.first<<":"<<ref.second<<" which corresponds to seedRef: "<<thisRef.id().id()<<":"<<thisRef.key();
175  LXtoL3s[ref] = std::make_pair(tk,thisRef);
176  //once assigned. break
177  break;
178  }
179  }//loop possible Lx for possible assignement
180  }//loop over ordered list of tracker track refs
181 
182 
183  //prepare the output
184  std::auto_ptr<TrackCollection> outTracks( new TrackCollection(LXtoL3s.size()));
185  std::auto_ptr<TrackExtraCollection> outTrackExtras( new TrackExtraCollection(LXtoL3s.size()));
186  reco::TrackExtraRefProd rTrackExtras = event.getRefBeforePut<TrackExtraCollection>();
187  std::auto_ptr<TrackingRecHitCollection> outRecHits( new TrackingRecHitCollection());
188  TrackingRecHitRefProd rHits = event.getRefBeforePut<TrackingRecHitCollection>();
189 
190  LogDebug(metname)<<"reading the map to make "<< LXtoL3s.size()<<"products.";
191  //fill the collection from the map
192  LXtoL3sMap::iterator f=LXtoL3s.begin();
193  unsigned int i=0;
194  for (;f!=LXtoL3s.end();++f,++i){
195 
196  LogDebug(metname)<<"copy the track over, and make ref to extra";
197  const Track & trk = *(f->second.first);
198  (*outTracks)[i] = Track(trk);
199  (*outTracks)[i].setExtra( TrackExtraRef(rTrackExtras,i));
200 
201  LogDebug(metname)<<"copy the trackExtra too, and change the seedref";
202  edm::RefToBase<TrajectorySeed> seedRef(f->second.second);
203  //do not use the copy constructor, otherwise the hit Ref are still the same
204  (*outTrackExtras)[i] = TrackExtra(
205  trk.outerPosition(), trk.outerMomentum(), trk.outerOk(),
206  trk.innerPosition(), trk.innerMomentum(), trk.innerOk(),
207  trk.outerStateCovariance(), trk.outerDetId(),
208  trk.innerStateCovariance(), trk.innerDetId(),
209  seedRef->direction(),seedRef
210  );
211 
212  LogDebug(metname)<<"copy the hits too";
213  unsigned int iRH=0;
214  for( trackingRecHit_iterator hit = trk.recHitsBegin(); hit != trk.recHitsEnd(); ++ hit,++iRH ) {
215  outRecHits->push_back((*hit)->clone());
216  (*outTrackExtras)[i].add( TrackingRecHitRef( rHits, iRH));
217  }
218  }
219 
220  LogDebug(metname)<<"made: "<<outTracks->size()<<" tracks, "<<outTrackExtras->size()<<" extras and "<<outRecHits->size()<<" rechits.";
221 
222  //put the collection in the event
223  LogDebug(metname)<<"loading...";
224  event.put(outTracks);
225  event.put(outTrackExtras);
226  event.put(outRecHits);
227  LogDebug(metname)<<" Event loaded"
228  <<"================================";
229 }
#define LogDebug(id)
int i
Definition: DBlmapReader.cc:9
std::pair< unsigned int, unsigned int > pseudoRef
string printseed(const L3TkMuonProducer::SeedRef &s)
const std::string metname
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:10
bool innerOk() const
return true if the innermost hit is valid
Definition: Track.h:40
edm::Ref< TrackExtraCollection > TrackExtraRef
persistent reference to a TrackExtra
Definition: TrackExtraFwd.h:13
std::string const & processName() const
Definition: Provenance.h:63
const math::XYZPoint & outerPosition() const
position of the outermost hit
Definition: Track.h:47
bool sharedSeed(const L3MuonTrajectorySeed &s1, const L3MuonTrajectorySeed &s2)
const math::XYZPoint & innerPosition() const
position of the innermost hit
Definition: Track.h:42
static bool trackRefBypT(const reco::TrackRef &t1, const reco::TrackRef &t2)
static bool seedRefBypT(const SeedRef &s1, const SeedRef &s2)
edm::Ref< TrackingRecHitCollection > TrackingRecHitRef
persistent reference to a TrackingRecHit
CovarianceMatrix outerStateCovariance() const
outermost trajectory state curvilinear errors
Definition: Track.h:51
unsigned int outerDetId() const
DetId of the detector on which surface the outermost state is located.
Definition: Track.h:59
double f[11][100]
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:63
edm::Ref< L3MuonTrajectorySeedCollection > SeedRef
std::map< pseudoRef, std::pair< reco::TrackRef, SeedRef > > LXtoL3sMap
std::vector< TrackExtra > TrackExtraCollection
collection of TrackExtra objects
Definition: TrackExtraFwd.h:9
edm::OwnVector< TrackingRecHit > TrackingRecHitCollection
collection of TrackingRecHits
const math::XYZVector & outerMomentum() const
momentum vector at the outermost hit position
Definition: Track.h:49
bool outerOk() const
return true if the outermost hit is valid
Definition: Track.h:38
tuple tracks
Definition: testEve_cfg.py:39
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:14
CovarianceMatrix innerStateCovariance() const
innermost trajectory state curvilinear errors
Definition: Track.h:53
key_type key() const
Accessor for product key.
Definition: Ref.h:266
std::string const & moduleLabel() const
Definition: Provenance.h:62
std::string const & label() const
Definition: InputTag.h:25
const math::XYZVector & innerMomentum() const
momentum vector at the innermost hit position
Definition: Track.h:45
pseudoRef makePseudoRef(const L3MuonTrajectorySeed &s)
ProductID id() const
Accessor for product ID.
Definition: Ref.h:256
ProductIndex id() const
Definition: ProductID.h:38
edm::InputTag theL3CollectionLabel
std::string const & productInstanceName() const
Definition: Provenance.h:64
unsigned int innerDetId() const
DetId of the detector on which surface the innermost state is located.
Definition: Track.h:61
string printvector(const vector< TrackRef > &v)
trackingRecHit_iterator recHitsEnd() const
Iterator to last hit on the track.
Definition: Track.h:65
static bool L3TkMuonProducer::seedRefBypT ( const SeedRef s1,
const SeedRef s2 
)
inlinestaticprivate

Definition at line 61 of file L3TkMuonProducer.h.

References edm::Ref< C, T, F >::isNull().

61  {
62  double pt1,pt2;
63  reco::TrackRef l2ref1 = s1->l2Track();
64  if (l2ref1.isNull()) pt1=s1->l1Particle()->pt();
65  else pt1=l2ref1->pt();
66  reco::TrackRef l2ref2 = s2->l2Track();
67  if (l2ref2.isNull()) pt2=s2->l1Particle()->pt();
68  else pt2=l2ref2->pt();
69  return (pt1>pt2);
70  }
tuple s2
Definition: indexGen.py:106
bool isNull() const
Checks for null.
Definition: Ref.h:247
bool L3TkMuonProducer::sharedSeed ( const L3MuonTrajectorySeed s1,
const L3MuonTrajectorySeed s2 
)
private

Definition at line 42 of file L3TkMuonProducer.cc.

References TrackingRecHit::all, TrajectorySeed::nHits(), diffTwoXMLs::r1, diffTwoXMLs::r2, and TrajectorySeed::recHits().

42  {
43  //quit right away on nH=0
44  if (s1.nHits()==0 || s2.nHits()==0) return false;
45  //quit right away if not the same number of hits
46  if (s1.nHits()!=s2.nHits()) return false;
50  TrajectorySeed::const_iterator & i1_e=r1.second,&i2_e=r2.second;
51  TrajectorySeed::const_iterator & i1_b=r1.first,&i2_b=r2.first;
52  //quit right away if first detId does not match. front exist because of ==0 ->quit test
53  if(i1_b->geographicalId() != i2_b->geographicalId()) return false;
54  //then check hit by hit if they are the same
55  for (i1=i1_b,i2=i2_b;i1!=i1_e,i2!=i2_e;++i1,++i2){
56  if (!i1->sharesInput(&(*i2),TrackingRecHit::all)) return false;
57  }
58  return true;
59 }
recHitContainer::const_iterator const_iterator
std::pair< const_iterator, const_iterator > range
range recHits() const
unsigned int nHits() const
static bool L3TkMuonProducer::trackRefBypT ( const reco::TrackRef t1,
const reco::TrackRef t2 
)
inlinestaticprivate

Definition at line 72 of file L3TkMuonProducer.h.

72  {
73  return (t1->pt()>t2->pt());
74  }

Member Data Documentation

edm::InputTag L3TkMuonProducer::theL3CollectionLabel
private

Definition at line 43 of file L3TkMuonProducer.h.