test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackerSeedValidator.cc
Go to the documentation of this file.
3 
7 
27 
30 
31 #include <TF1.h>
32 
33 using namespace std;
34 using namespace edm;
35 
37 
39  MultiTrackValidatorBase(pset, consumesCollector(),true),
40  histoProducerAlgo_(std::make_unique<MTVHistoProducerAlgoForTracker>(pset.getParameter<ParameterSet>("histoProducerAlgoBlock"), false, consumesCollector())) {
41  dirName_ = pset.getParameter<std::string>("dirName");
42 
43  tpSelector = TrackingParticleSelector(pset.getParameter<double>("ptMinTP"),
44  pset.getParameter<double>("minRapidityTP"),
45  pset.getParameter<double>("maxRapidityTP"),
46  pset.getParameter<double>("tipTP"),
47  pset.getParameter<double>("lipTP"),
48  pset.getParameter<int>("minHitTP"),
49  pset.getParameter<bool>("signalOnlyTP"),
50  pset.getParameter<bool>("intimeOnlyTP"),
51  pset.getParameter<bool>("chargedOnlyTP"),
52  pset.getParameter<bool>("stableOnlyTP"),
53  pset.getParameter<std::vector<int> >("pdgIdTP"));
54 
55  builderName = pset.getParameter<std::string>("TTRHBuilder");
56 
57  for (auto const& associator: associators) {
58  associatorTokens.push_back(consumes<reco::TrackToTrackingParticleAssociator>(associator));
59  }
60 }
61 
63 
65  {
66  ibook.cd();
67  ibook.setCurrentFolder(dirName_ + "simulation");
68 
69  //Booking histograms concerning with simulated tracks
70  histoProducerAlgo_->bookSimHistos(ibook);
71  }
72 
73  for (unsigned int ww=0;ww<associators.size();ww++){
74  for (unsigned int www=0;www<label.size();www++){
75 
76  ibook.cd();
77  InputTag algo = label[www];
78  string dirName=dirName_;
79  if (algo.process()!="")
80  dirName+=algo.process()+"_";
81  if(algo.label()!="")
82  dirName+=algo.label()+"_";
83  if(algo.instance()!="")
84  dirName+=algo.instance()+"_";
85  // if (dirName.find("Seeds")<dirName.length()){
86  // dirName.replace(dirName.find("Seeds"),6,"");
87  // }
88  string assoc= associators[ww].label();;
89  if (assoc.find("Track")<assoc.length()){
90  assoc.replace(assoc.find("Track"),5,"");
91  }
92  dirName+=assoc;
93  std::replace(dirName.begin(), dirName.end(), ':', '_');
94 
95  ibook.setCurrentFolder(dirName.c_str());
96 
97  //Booking histograms concerning with reconstructed tracks
98  histoProducerAlgo_->bookSimTrackHistos(ibook);
99  histoProducerAlgo_->bookRecoHistos(ibook);
100  }//end loop www
101  }// end loop ww
102 }
103 
104 
106 
107  edm::LogInfo("TrackValidator") << "\n====================================================" << "\n"
108  << "Analyzing new event" << "\n"
109  << "====================================================\n" << "\n";
110 
111  edm::ESHandle<ParametersDefinerForTP> parametersDefinerTP;
112  setup.get<TrackAssociatorRecord>().get(parametersDefiner,parametersDefinerTP);
113 
115  setup.get<TrackerTopologyRcd>().get(httopo);
116  const TrackerTopology& ttopo = *httopo;
117 
119  setup.get<TransientRecHitRecord>().get(builderName,theTTRHBuilder);
120 
122  setup.get<IdealMagneticFieldRecord>().get(theMF);
123 
124  edm::Handle<TrackingParticleCollection> TPCollectionHeff ;
125  event.getByToken(label_tp_effic,TPCollectionHeff);
126  const TrackingParticleCollection tPCeff = *(TPCollectionHeff.product());
127 
128  edm::Handle<TrackingParticleCollection> TPCollectionHfake ;
129  event.getByToken(label_tp_fake,TPCollectionHfake);
130  const TrackingParticleCollection tPCfake = *(TPCollectionHfake.product());
131 
132  if (tPCeff.size()==0) {edm::LogInfo("TrackValidator") << "TP Collection for efficiency studies has size = 0! Skipping Event." ; return;}
133  if (tPCfake.size()==0) {edm::LogInfo("TrackValidator") << "TP Collection for fake rate studies has size = 0! Skipping Event." ; return;}
134 
135  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
136  event.getByToken(bsSrc,recoBeamSpotHandle);
137  reco::BeamSpot bs = *recoBeamSpotHandle;
138 
140  event.getByToken(label_pileupinfo,puinfoH);
141  PileupSummaryInfo puinfo;
142 
143  for (unsigned int puinfo_ite=0;puinfo_ite<(*puinfoH).size();++puinfo_ite){
144  if ((*puinfoH)[puinfo_ite].getBunchCrossing()==0){
145  puinfo=(*puinfoH)[puinfo_ite];
146  break;
147  }
148  }
149 
150  // Calculate the number of 3D layers for TPs
151  //
152  // I would have preferred to produce the ValueMap to Event and read
153  // it from there, but there would have been quite some number of
154  // knock-on effects, and again the fact that we take two TP
155  // collections do not support Ref<TP>'s would have complicated that.
156  //
157  // In principle we could use the SimHitTPAssociationList read above
158  // for parametersDefinerIsCosmic_, but since we don't currently
159  // support Ref<TP>s, we can't in general use it since eff/fake TP
160  // collections can, in general, be different.
161  TrackingParticleNumberOfLayers tpNumberOfLayersAlgo(event, simHitTokens_);
162  auto nlayers_tPCeff_ptrs = tpNumberOfLayersAlgo.calculate(TPCollectionHeff, setup);
163  const auto& nLayers_tPCeff = *(std::get<TrackingParticleNumberOfLayers::nTrackerLayers>(nlayers_tPCeff_ptrs));
164  const auto& nPixelLayers_tPCeff = *(std::get<TrackingParticleNumberOfLayers::nPixelLayers>(nlayers_tPCeff_ptrs));
165  const auto& nStripMonoAndStereoLayers_tPCeff = *(std::get<TrackingParticleNumberOfLayers::nStripMonoAndStereoLayers>(nlayers_tPCeff_ptrs));
166 
167  std::vector<float> mvaDummy;
168 
169  int w=0;
170  for (unsigned int ww=0;ww<associators.size();ww++){
172  event.getByToken(associatorTokens[ww], theAssociator);
173  const reco::TrackToTrackingParticleAssociator *associator = theAssociator.product();
174 
175  for (unsigned int www=0;www<label.size();www++){
176  edm::LogVerbatim("TrackValidator") << "Analyzing "
177  << label[www].process()<<":"
178  << label[www].label()<<":"
179  << label[www].instance()<<" with "
180  << associators[ww] <<"\n";
181  //
182  //get collections from the event
183  //
184  edm::Handle<edm::View<TrajectorySeed> > seedCollection;
185  event.getByToken(labelTokenSeed[www], seedCollection);
186  if (seedCollection->size()==0) {
187  edm::LogInfo("TrackValidator") << "SeedCollection size = 0!" ;
188  continue;
189  }
190 
191  //associate seeds
192  LogTrace("TrackValidator") << "Calling associateRecoToSim method" << "\n";
193  reco::RecoToSimCollectionSeed recSimColl=associator->associateRecoToSim(seedCollection,
194  TPCollectionHfake);
195  LogTrace("TrackValidator") << "Calling associateSimToReco method" << "\n";
196  reco::SimToRecoCollectionSeed simRecColl=associator->associateSimToReco(seedCollection,
197  TPCollectionHeff);
198 
199  //
200  //fill simulation histograms
201  //compute number of seeds per eta interval
202  //
203  edm::LogVerbatim("TrackValidator") << "\n# of TrackingParticles: " << tPCeff.size() << "\n";
204  int ats(0); //This counter counts the number of simTracks that are "associated" to recoTracks
205  int st(0); //This counter counts the number of simulated tracks passing the MTV selection (i.e. tpSelector(tp) )
206  unsigned sts(0); //This counter counts the number of simTracks surviving the bunchcrossing cut
207  unsigned asts(0); //This counter counts the number of simTracks that are "associated" to recoTracks surviving the bunchcrossing cut
208  for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
209  TrackingParticleRef tp(TPCollectionHeff, i);
210 
211  if (tp->charge()==0) continue;
212 
213  if(! tpSelector(*tp)) continue;
214 
215  TrackingParticle::Vector momentumTP = tp->momentum();
216  TrackingParticle::Point vertexTP = tp->vertex();
217  //Calcualte the impact parameters w.r.t. PCA
218  TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,tp);
219  TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,tp);
220  double dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi()));
221  double dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2())
222  * momentum.z()/sqrt(momentum.perp2());
223 
224  if(tp->eventId().bunchCrossing() == 0) {
225  st++;
226  }
227 
228  if(w == 0)
229  histoProducerAlgo_->fill_generic_simTrack_histos(momentumTP,vertexTP, tp->eventId().bunchCrossing());
230 
231  const TrajectorySeed* matchedSeedPointer=0;
232  std::vector<std::pair<edm::RefToBase<TrajectorySeed>, double> > rt;
233  if(simRecColl.find(tp) != simRecColl.end()){
234  rt = simRecColl[tp];
235  if (rt.size()!=0) {
236  ats++;
237  matchedSeedPointer = rt.begin()->first.get();
238  edm::LogVerbatim("TrackValidator") << "TrackingParticle #" << st
239  << " with pt=" << sqrt(tp->momentum().perp2())
240  << " associated with quality:" << rt.begin()->second <<"\n";
241  }
242  }else{
243  edm::LogVerbatim("TrackValidator") << "TrackingParticle #" << st
244  << " with pt=" << sqrt(tp->momentum().perp2())
245  << " NOT associated to any TrajectorySeed" << "\n";
246  }
247 
248  int nSimHits = tp->numberOfTrackerHits();
249  int nSimLayers = nLayers_tPCeff[tp];
250  int nSimPixelLayers = nPixelLayers_tPCeff[tp];
251  int nSimStripMonoAndStereoLayers = nStripMonoAndStereoLayers_tPCeff[tp];
252 
253  //fixme convert seed into track
254  reco::Track* matchedTrackPointer = 0;
255  if (matchedSeedPointer) {
256  TSCBLBuilderNoMaterial tscblBuilder;
257  TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(matchedSeedPointer->recHits().second-1));
258  TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( matchedSeedPointer->startingState(), recHit->surface(), theMF.product());
259  TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm
260  if(!(tsAtClosestApproachSeed.isValid())){
261  edm::LogVerbatim("SeedValidator")<<"TrajectoryStateClosestToBeamLine not valid";
262  continue;
263  }
264  const reco::TrackBase::Point vSeed1(tsAtClosestApproachSeed.trackStateAtPCA().position().x(),
265  tsAtClosestApproachSeed.trackStateAtPCA().position().y(),
266  tsAtClosestApproachSeed.trackStateAtPCA().position().z());
267  const reco::TrackBase::Vector pSeed(tsAtClosestApproachSeed.trackStateAtPCA().momentum().x(),
268  tsAtClosestApproachSeed.trackStateAtPCA().momentum().y(),
269  tsAtClosestApproachSeed.trackStateAtPCA().momentum().z());
270  //GlobalPoint vSeed(vSeed1.x()-bs.x0(),vSeed1.y()-bs.y0(),vSeed1.z()-bs.z0());
271  PerigeeTrajectoryError seedPerigeeErrors = PerigeeConversions::ftsToPerigeeError(tsAtClosestApproachSeed.trackStateAtPCA());
272  matchedTrackPointer = new reco::Track(0.,0., vSeed1, pSeed, 1, seedPerigeeErrors.covarianceMatrix());
273  matchedTrackPointer->appendHits(matchedSeedPointer->recHits().first,matchedSeedPointer->recHits().second, ttopo);
274  }
275 
276  double dR=0;//fixme: plots vs dR not implemented for now
277  histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,*tp,tp->momentum(),tp->vertex(),dxySim,dzSim,0,0,nSimHits,nSimLayers,nSimPixelLayers,nSimStripMonoAndStereoLayers,
278  matchedTrackPointer,puinfo.getPU_NumInteractions(),dR, nullptr, nullptr, mvaDummy, 0, 0);
279 
280  sts++;
281  if (matchedTrackPointer) asts++;
282 
283  } // End for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
284 
285  if(w == 0)
286  histoProducerAlgo_->fill_simTrackBased_histos(st);
287 
288  //
289  //fill reconstructed seed histograms
290  //
291  edm::LogVerbatim("TrackValidator") << "\n# of TrajectorySeeds with "
292  << label[www].process()<<":"
293  << label[www].label()<<":"
294  << label[www].instance()
295  << ": " << seedCollection->size() << "\n";
296  int sat(0); //This counter counts the number of recoTracks that are associated to SimTracks from Signal only
297  int at(0); //This counter counts the number of recoTracks that are associated to SimTracks
298  int rT(0); //This counter counts the number of recoTracks in general
299 
300  TSCBLBuilderNoMaterial tscblBuilder;
301  for(TrajectorySeedCollection::size_type i=0; i<seedCollection->size(); ++i){
302  edm::RefToBase<TrajectorySeed> seed(seedCollection, i);
303  rT++;
304 
305  //get parameters and errors from the seed state
306  TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(seed->recHits().second-1));
307  TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( seed->startingState(), recHit->surface(), theMF.product());
308  TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm
309  if(!(tsAtClosestApproachSeed.isValid())){
310  edm::LogVerbatim("SeedValidator")<<"TrajectoryStateClosestToBeamLine not valid";
311  continue;
312  }
313  const reco::TrackBase::Point vSeed1(tsAtClosestApproachSeed.trackStateAtPCA().position().x(),
314  tsAtClosestApproachSeed.trackStateAtPCA().position().y(),
315  tsAtClosestApproachSeed.trackStateAtPCA().position().z());
316  const reco::TrackBase::Vector pSeed(tsAtClosestApproachSeed.trackStateAtPCA().momentum().x(),
317  tsAtClosestApproachSeed.trackStateAtPCA().momentum().y(),
318  tsAtClosestApproachSeed.trackStateAtPCA().momentum().z());
319  //GlobalPoint vSeed(vSeed1.x()-bs.x0(),vSeed1.y()-bs.y0(),vSeed1.z()-bs.z0());
320  PerigeeTrajectoryError seedPerigeeErrors = PerigeeConversions::ftsToPerigeeError(tsAtClosestApproachSeed.trackStateAtPCA());
321 
322  //fixme
323  reco::Track* trackFromSeed = new reco::Track(0.,0., vSeed1, pSeed, 1, seedPerigeeErrors.covarianceMatrix());
324  trackFromSeed->appendHits(seed->recHits().first,seed->recHits().second, ttopo);
325 
326  bool isSigSimMatched(false);
327  bool isSimMatched(false);
328  bool isChargeMatched(true);
329  int numAssocSeeds = 0;
330  int nSimHits = 0;
331  double sharedFraction = 0.;
332  std::vector<std::pair<TrackingParticleRef, double> > tp;
333  if(recSimColl.find(seed) != recSimColl.end()) {
334  tp = recSimColl[seed];
335  if (tp.size()!=0) {
336 
337  nSimHits = tp[0].first->numberOfTrackerHits();
338  sharedFraction = tp[0].second;
339  isSimMatched = true;
340  if (tp[0].first->charge() != seed->startingState().parameters().charge()) isChargeMatched = false;
341  if(simRecColl.find(tp[0].first) != simRecColl.end()) numAssocSeeds = simRecColl[tp[0].first].size();
342  //std::cout << numAssocRecoTracks << std::endl;
343 
344  at++;
345 
346  for (unsigned int tp_ite=0;tp_ite<tp.size();++tp_ite){
347  TrackingParticle trackpart = *(tp[tp_ite].first);
348  if ((trackpart.eventId().event() == 0) && (trackpart.eventId().bunchCrossing() == 0)){
349  isSigSimMatched = true;
350  sat++;
351  break;
352  }
353  }
354 
355 
356  edm::LogVerbatim("SeedValidator") << "TrajectorySeed #" << rT << " associated with quality:" << tp.begin()->second <<"\n";
357  }
358  } else {
359  edm::LogVerbatim("SeedValidator") << "TrajectorySeed #" << rT << " NOT associated to any TrackingParticle" << "\n";
360  }
361 
362  double dR = 0.;//fixme: plots vs dR not implemented for now
363  histoProducerAlgo_->fill_generic_recoTrack_histos(w,*trackFromSeed, ttopo, bs.position(), nullptr, nullptr, isSimMatched,isSigSimMatched,
364  isChargeMatched, numAssocSeeds,
365  puinfo.getPU_NumInteractions(),
366  nSimHits, sharedFraction, dR, mvaDummy, 0, 0);
367 
368  //Fill other histos
369  try{
370  if (tp.size()==0) continue;
371 
372  histoProducerAlgo_->fill_simAssociated_recoTrack_histos(w,*trackFromSeed);
373 
374  TrackingParticleRef tpr = tp.begin()->first;
375 
376  //compute tracking particle parameters at point of closest approach to the beamline
377  TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,tpr);
378  TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,tpr);
379 
380  // LogTrace("SeedValidatorTEST") << "assocChi2=" << tp.begin()->second << "\n"
381  // << "" << "\n"
382  // << "ptREC=" << ptSeed << "\n"
383  // << "etaREC=" << etaSeed << "\n"
384  // << "qoverpREC=" << qoverpSeed << "\n"
385  // << "dxyREC=" << dxySeed << "\n"
386  // << "dzREC=" << dzSeed << "\n"
387  // << "thetaREC=" << thetaSeed << "\n"
388  // << "phiREC=" << phiSeed << "\n"
389  // << "" << "\n"
390  // << "qoverpError()=" << qoverpErrorSeed << "\n"
391  // << "dxyError()=" << dxyErrorSeed << "\n"
392  // << "dzError()=" << dzErrorSeed << "\n"
393  // << "thetaError()=" << lambdaErrorSeed << "\n"
394  // << "phiError()=" << phiErrorSeed << "\n"
395  // << "" << "\n"
396  // << "ptSIM=" << sqrt(assocTrack->momentum().perp2()) << "\n"
397  // << "etaSIM=" << assocTrack->momentum().Eta() << "\n"
398  // << "qoverpSIM=" << qoverpSim << "\n"
399  // << "dxySIM=" << dxySim << "\n"
400  // << "dzSIM=" << dzSim << "\n"
401  // << "thetaSIM=" << M_PI/2-lambdaSim << "\n"
402  // << "phiSIM=" << phiSim << "\n"
403  // << "" << "\n"
404  // << "contrib_Qoverp=" << contrib_Qoverp << "\n"
405  // << "contrib_dxy=" << contrib_dxy << "\n"
406  // << "contrib_dz=" << contrib_dz << "\n"
407  // << "contrib_theta=" << contrib_theta << "\n"
408  // << "contrib_phi=" << contrib_phi << "\n"
409  // << "" << "\n"
410  // <<"chi2PULL="<<contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi<<"\n";
411 
412  histoProducerAlgo_->fill_ResoAndPull_recoTrack_histos(w,momentumTP,vertexTP,tpr->charge(),
413  *trackFromSeed,bs.position());
414 
415 
416  } catch (cms::Exception e){
417  LogTrace("SeedValidator") << "exception found: " << e.what() << "\n";
418  }
419  }// End of for(TrajectorySeedCollection::size_type i=0; i<seedCollection->size(); ++i)
420 
421  histoProducerAlgo_->fill_trackBased_histos(w,at,rT,st);
422 
423  edm::LogVerbatim("SeedValidator") << "Total Simulated: " << st << "\n"
424  << "Total Associated (simToReco): " << ats << "\n"
425  << "Total Reconstructed: " << rT << "\n"
426  << "Total Associated (recoToSim): " << at << "\n"
427  << "Total Fakes: " << rT-at << "\n";
428  w++;
429  }
430  }
431 }
virtual char const * what() const
Definition: Exception.cc:141
T getParameter(std::string const &) const
void analyze(const edm::Event &, const edm::EventSetup &) override
Method called once per event.
int i
Definition: DBlmapReader.cc:9
std::vector< edm::InputTag > associators
int event() const
get the contents of the subdetector field (should be protected?)
const double w
Definition: UKUtility.cc:23
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > label_pileupinfo
std::vector< TrackingParticle > TrackingParticleCollection
const_iterator end() const
last iterator over the map (read only)
edm::EDGetTokenT< TrackingParticleCollection > label_tp_effic
void cd(void)
Definition: DQMStore.cc:269
edm::Ref< GenParticleCollection > GenParticleRef
persistent reference to a GenParticle
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
const_iterator find(const key_type &k) const
find element with specified reference key
uint16_t size_type
TrackingParticleSelector tpSelector
edm::EDGetTokenT< reco::BeamSpot > bsSrc
math::XYZPointD Point
point in the space
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
std::vector< edm::InputTag > label
std::vector< edm::EDGetTokenT< edm::View< TrajectorySeed > > > labelTokenSeed
T sqrt(T t)
Definition: SSEVec.h:18
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Method called to book the DQM histograms.
int bunchCrossing() const
get the detector field from this detid
FreeTrajectoryState const * freeState(bool withErrors=true) const
TrackerSeedValidator(const edm::ParameterSet &pset)
Constructor.
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
math::XYZPoint Point
point in the space
Definition: TrackBase.h:83
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
edm::ESHandle< TransientTrackingRecHitBuilder > theTTRHBuilder
#define LogTrace(id)
std::shared_ptr< TrackingRecHit const > RecHitPointer
PTrajectoryStateOnDet const & startingState() const
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:277
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
T const * product() const
Definition: Handle.h:81
reco::RecoToSimCollection associateRecoToSim(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
range recHits() const
TrackCharge charge() const
Charge (-1, 0 or 1)
const int getPU_NumInteractions() const
std::string const & label() const
Definition: InputTag.h:36
EncodedEventId eventId() const
Signal source, crossing number.
std::string const & process() const
Definition: InputTag.h:40
std::tuple< std::unique_ptr< edm::ValueMap< unsigned int > >, std::unique_ptr< edm::ValueMap< unsigned int > >, std::unique_ptr< edm::ValueMap< unsigned int > > > calculate(const edm::Handle< TrackingParticleCollection > &tps, const edm::EventSetup &iSetup) const
Monte Carlo truth information used for tracking validation.
PerigeeTrajectoryError ftsToPerigeeError(const FTS &originalFTS)
virtual ~TrackerSeedValidator()
Destructor.
const Point & position() const
position
Definition: BeamSpot.h:62
volatile std::atomic< bool > shutdown_flag false
reco::SimToRecoCollection associateSimToReco(const edm::Handle< edm::View< reco::Track > > &tCH, const edm::Handle< TrackingParticleCollection > &tPCH) const
compare reco to sim the handle of reco::Track and TrackingParticle collections
math::XYZVectorD Vector
point in the space
std::vector< edm::EDGetTokenT< std::vector< PSimHit > > > simHitTokens_
edm::EDGetTokenT< TrackingParticleCollection > label_tp_fake
math::XYZVector Vector
spatial vector
Definition: TrackBase.h:80
std::string const & instance() const
Definition: InputTag.h:37
std::unique_ptr< MTVHistoProducerAlgoForTracker > histoProducerAlgo_
bool appendHits(const C &c, const TrackerTopology &ttopo)
append hit patterns from vector of hit references
Definition: TrackBase.h:480
tuple size
Write out results.
std::vector< edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > > associatorTokens
const LocalTrajectoryParameters & parameters() const
Definition: Run.h:42