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 
29 
30 #include <TF1.h>
31 
32 using namespace std;
33 using namespace edm;
34 
36 
38  //theExtractor = IsoDepositExtractorFactory::get()->create( extractorName, extractorPSet, consumesCollector());
39 
40  ParameterSet psetForHistoProducerAlgo = pset.getParameter<ParameterSet>("histoProducerAlgoBlock");
41  string histoProducerAlgoName = psetForHistoProducerAlgo.getParameter<string>("ComponentName");
42  histoProducerAlgo_ = MTVHistoProducerAlgoFactory::get()->create(histoProducerAlgoName ,psetForHistoProducerAlgo, consumesCollector());
43 
44  dirName_ = pset.getParameter<std::string>("dirName");
45 
46  tpSelector = TrackingParticleSelector(pset.getParameter<double>("ptMinTP"),
47  pset.getParameter<double>("minRapidityTP"),
48  pset.getParameter<double>("maxRapidityTP"),
49  pset.getParameter<double>("tipTP"),
50  pset.getParameter<double>("lipTP"),
51  pset.getParameter<int>("minHitTP"),
52  pset.getParameter<bool>("signalOnlyTP"),
53  pset.getParameter<bool>("chargedOnlyTP"),
54  pset.getParameter<bool>("stableOnlyTP"),
55  pset.getParameter<std::vector<int> >("pdgIdTP"));
56 
57  runStandalone = pset.getParameter<bool>("runStandalone");
58 
59  builderName = pset.getParameter<std::string>("TTRHBuilder");
60 }
61 
63 
65  setup.get<IdealMagneticFieldRecord>().get(theMF);
67 
68  for (unsigned int ww=0;ww<associators.size();ww++){
69  for (unsigned int www=0;www<label.size();www++){
70 
71  ibook.cd();
72  InputTag algo = label[www];
73  string dirName=dirName_;
74  if (algo.process()!="")
75  dirName+=algo.process()+"_";
76  if(algo.label()!="")
77  dirName+=algo.label()+"_";
78  if(algo.instance()!="")
79  dirName+=algo.instance()+"_";
80  // if (dirName.find("Seeds")<dirName.length()){
81  // dirName.replace(dirName.find("Seeds"),6,"");
82  // }
83  string assoc= associators[ww];
84  if (assoc.find("Track")<assoc.length()){
85  assoc.replace(assoc.find("Track"),5,"");
86  }
87  dirName+=assoc;
88  std::replace(dirName.begin(), dirName.end(), ':', '_');
89 
90  ibook.setCurrentFolder(dirName.c_str());
91 
92  // vector of vector initialization
93  histoProducerAlgo_->initialize(); //TO BE FIXED. I'D LIKE TO AVOID THIS CALL
94 
95  string subDirName = dirName + "/simulation";
96  ibook.setCurrentFolder(subDirName.c_str());
97 
98  //Booking histograms concerning with simulated tracks
100 
101  ibook.cd();
102  ibook.setCurrentFolder(dirName.c_str());
103 
104  //Booking histograms concerning with reconstructed tracks
107  }//end loop www
109  for (unsigned int w=0;w<associators.size();w++) {
110  setup.get<TrackAssociatorRecord>().get(associators[w],theAssociator);
111  associator.push_back( theAssociator.product() );
112  }//end loop w
113  }// end loop ww
114 }
115 
116 
118 
119  edm::LogInfo("TrackValidator") << "\n====================================================" << "\n"
120  << "Analyzing new event" << "\n"
121  << "====================================================\n" << "\n";
122 
123  edm::ESHandle<ParametersDefinerForTP> parametersDefinerTP;
124  setup.get<TrackAssociatorRecord>().get(parametersDefiner,parametersDefinerTP);
125 
126  edm::Handle<TrackingParticleCollection> TPCollectionHeff ;
127  event.getByToken(label_tp_effic,TPCollectionHeff);
128  const TrackingParticleCollection tPCeff = *(TPCollectionHeff.product());
129 
130  edm::Handle<TrackingParticleCollection> TPCollectionHfake ;
131  event.getByToken(label_tp_fake,TPCollectionHfake);
132  const TrackingParticleCollection tPCfake = *(TPCollectionHfake.product());
133 
134  if (tPCeff.size()==0) {edm::LogInfo("TrackValidator") << "TP Collection for efficiency studies has size = 0! Skipping Event." ; return;}
135  if (tPCfake.size()==0) {edm::LogInfo("TrackValidator") << "TP Collection for fake rate studies has size = 0! Skipping Event." ; return;}
136 
137  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
138  event.getByToken(bsSrc,recoBeamSpotHandle);
139  reco::BeamSpot bs = *recoBeamSpotHandle;
140 
142  event.getByToken(label_pileupinfo,puinfoH);
143  PileupSummaryInfo puinfo;
144 
145  for (unsigned int puinfo_ite=0;puinfo_ite<(*puinfoH).size();++puinfo_ite){
146  if ((*puinfoH)[puinfo_ite].getBunchCrossing()==0){
147  puinfo=(*puinfoH)[puinfo_ite];
148  break;
149  }
150  }
151 
153  event.getByToken(label_tv,tvH);
154  TrackingVertexCollection tv = *tvH;
155 
156  int w=0;
157  for (unsigned int ww=0;ww<associators.size();ww++){
158  for (unsigned int www=0;www<label.size();www++){
159  edm::LogVerbatim("TrackValidator") << "Analyzing "
160  << label[www].process()<<":"
161  << label[www].label()<<":"
162  << label[www].instance()<<" with "
163  << associators[ww].c_str() <<"\n";
164  //
165  //get collections from the event
166  //
167  edm::Handle<edm::View<TrajectorySeed> > seedCollection;
168  event.getByToken(labelTokenSeed[www], seedCollection);
169  if (seedCollection->size()==0) {
170  edm::LogInfo("TrackValidator") << "SeedCollection size = 0!" ;
171  continue;
172  }
173 
174  //associate seeds
175  LogTrace("TrackValidator") << "Calling associateRecoToSim method" << "\n";
176  reco::RecoToSimCollectionSeed recSimColl=associator[ww]->associateRecoToSim(seedCollection,
177  TPCollectionHfake,
178  &event,&setup);
179  LogTrace("TrackValidator") << "Calling associateSimToReco method" << "\n";
180  reco::SimToRecoCollectionSeed simRecColl=associator[ww]->associateSimToReco(seedCollection,
181  TPCollectionHeff,
182  &event,&setup);
183 
184  //
185  //fill simulation histograms
186  //compute number of seeds per eta interval
187  //
188  edm::LogVerbatim("TrackValidator") << "\n# of TrackingParticles: " << tPCeff.size() << "\n";
189  int ats(0); //This counter counts the number of simTracks that are "associated" to recoTracks
190  int st(0); //This counter counts the number of simulated tracks passing the MTV selection (i.e. tpSelector(tp) )
191  unsigned sts(0); //This counter counts the number of simTracks surviving the bunchcrossing cut
192  unsigned asts(0); //This counter counts the number of simTracks that are "associated" to recoTracks surviving the bunchcrossing cut
193  for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
194  TrackingParticleRef tp(TPCollectionHeff, i);
195 
196  if (tp->charge()==0) continue;
197 
198  if(! tpSelector(*tp)) continue;
199 
200  TrackingParticle::Vector momentumTP = tp->momentum();
201  TrackingParticle::Point vertexTP = tp->vertex();
202  //Calcualte the impact parameters w.r.t. PCA
203  TrackingParticle::Vector momentum = parametersDefinerTP->momentum(event,setup,tp);
204  TrackingParticle::Point vertex = parametersDefinerTP->vertex(event,setup,tp);
205  double dxySim = (-vertex.x()*sin(momentum.phi())+vertex.y()*cos(momentum.phi()));
206  double dzSim = vertex.z() - (vertex.x()*momentum.x()+vertex.y()*momentum.y())/sqrt(momentum.perp2())
207  * momentum.z()/sqrt(momentum.perp2());
208 
209  st++;
210 
211  histoProducerAlgo_->fill_generic_simTrack_histos(w,momentumTP,vertexTP, tp->eventId().bunchCrossing());
212 
213  const TrajectorySeed* matchedSeedPointer=0;
214  std::vector<std::pair<edm::RefToBase<TrajectorySeed>, double> > rt;
215  if(simRecColl.find(tp) != simRecColl.end()){
216  rt = simRecColl[tp];
217  if (rt.size()!=0) {
218  ats++;
219  matchedSeedPointer = rt.begin()->first.get();
220  edm::LogVerbatim("TrackValidator") << "TrackingParticle #" << st
221  << " with pt=" << sqrt(tp->momentum().perp2())
222  << " associated with quality:" << rt.begin()->second <<"\n";
223  }
224  }else{
225  edm::LogVerbatim("TrackValidator") << "TrackingParticle #" << st
226  << " with pt=" << sqrt(tp->momentum().perp2())
227  << " NOT associated to any TrajectorySeed" << "\n";
228  }
229 
230  int nSimHits = tp->numberOfTrackerHits();
231 
232  //fixme convert seed into track
233  reco::Track* matchedTrackPointer = 0;
234  if (matchedSeedPointer) {
235  TSCBLBuilderNoMaterial tscblBuilder;
236  TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(matchedSeedPointer->recHits().second-1));
237  TrajectoryStateOnSurface state = trajectoryStateTransform::transientState( matchedSeedPointer->startingState(), recHit->surface(), theMF.product());
238  TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm
239  if(!(tsAtClosestApproachSeed.isValid())){
240  edm::LogVerbatim("SeedValidator")<<"TrajectoryStateClosestToBeamLine not valid";
241  continue;
242  }
243  const reco::TrackBase::Point vSeed1(tsAtClosestApproachSeed.trackStateAtPCA().position().x(),
244  tsAtClosestApproachSeed.trackStateAtPCA().position().y(),
245  tsAtClosestApproachSeed.trackStateAtPCA().position().z());
246  const reco::TrackBase::Vector pSeed(tsAtClosestApproachSeed.trackStateAtPCA().momentum().x(),
247  tsAtClosestApproachSeed.trackStateAtPCA().momentum().y(),
248  tsAtClosestApproachSeed.trackStateAtPCA().momentum().z());
249  //GlobalPoint vSeed(vSeed1.x()-bs.x0(),vSeed1.y()-bs.y0(),vSeed1.z()-bs.z0());
250  PerigeeTrajectoryError seedPerigeeErrors = PerigeeConversions::ftsToPerigeeError(tsAtClosestApproachSeed.trackStateAtPCA());
251  matchedTrackPointer = new reco::Track(0.,0., vSeed1, pSeed, 1, seedPerigeeErrors.covarianceMatrix());
252  matchedTrackPointer->appendHits(matchedSeedPointer->recHits().first,matchedSeedPointer->recHits().second);
253  }
254 
255  double dR=0;//fixme: plots vs dR not implemented for now
256  histoProducerAlgo_->fill_recoAssociated_simTrack_histos(w,*tp,tp->momentum(),tp->vertex(),dxySim,dzSim,nSimHits,
257  matchedTrackPointer,puinfo.getPU_NumInteractions(),dR);
258 
259  sts++;
260  if (matchedTrackPointer) asts++;
261 
262  } // End for (TrackingParticleCollection::size_type i=0; i<tPCeff.size(); i++){
263 
264  //
265  //fill reconstructed seed histograms
266  //
267  edm::LogVerbatim("TrackValidator") << "\n# of TrajectorySeeds with "
268  << label[www].process()<<":"
269  << label[www].label()<<":"
270  << label[www].instance()
271  << ": " << seedCollection->size() << "\n";
272  int sat(0); //This counter counts the number of recoTracks that are associated to SimTracks from Signal only
273  int at(0); //This counter counts the number of recoTracks that are associated to SimTracks
274  int rT(0); //This counter counts the number of recoTracks in general
275 
276  TSCBLBuilderNoMaterial tscblBuilder;
277  for(TrajectorySeedCollection::size_type i=0; i<seedCollection->size(); ++i){
278  edm::RefToBase<TrajectorySeed> seed(seedCollection, i);
279  rT++;
280 
281  //get parameters and errors from the seed state
282  TransientTrackingRecHit::RecHitPointer recHit = theTTRHBuilder->build(&*(seed->recHits().second-1));
284  TrajectoryStateClosestToBeamLine tsAtClosestApproachSeed = tscblBuilder(*state.freeState(),bs);//as in TrackProducerAlgorithm
285  if(!(tsAtClosestApproachSeed.isValid())){
286  edm::LogVerbatim("SeedValidator")<<"TrajectoryStateClosestToBeamLine not valid";
287  continue;
288  }
289  const reco::TrackBase::Point vSeed1(tsAtClosestApproachSeed.trackStateAtPCA().position().x(),
290  tsAtClosestApproachSeed.trackStateAtPCA().position().y(),
291  tsAtClosestApproachSeed.trackStateAtPCA().position().z());
292  const reco::TrackBase::Vector pSeed(tsAtClosestApproachSeed.trackStateAtPCA().momentum().x(),
293  tsAtClosestApproachSeed.trackStateAtPCA().momentum().y(),
294  tsAtClosestApproachSeed.trackStateAtPCA().momentum().z());
295  //GlobalPoint vSeed(vSeed1.x()-bs.x0(),vSeed1.y()-bs.y0(),vSeed1.z()-bs.z0());
296  PerigeeTrajectoryError seedPerigeeErrors = PerigeeConversions::ftsToPerigeeError(tsAtClosestApproachSeed.trackStateAtPCA());
297 
298  //fixme
299  reco::Track* trackFromSeed = new reco::Track(0.,0., vSeed1, pSeed, 1, seedPerigeeErrors.covarianceMatrix());
300  trackFromSeed->appendHits(seed->recHits().first,seed->recHits().second);
301 
302  bool isSigSimMatched(false);
303  bool isSimMatched(false);
304  bool isChargeMatched(true);
305  int numAssocSeeds = 0;
306  int nSimHits = 0;
307  double sharedFraction = 0.;
308  std::vector<std::pair<TrackingParticleRef, double> > tp;
309  if(recSimColl.find(seed) != recSimColl.end()) {
310  tp = recSimColl[seed];
311  if (tp.size()!=0) {
312 
313  nSimHits = tp[0].first->numberOfTrackerHits();
314  sharedFraction = tp[0].second;
315  isSimMatched = true;
316  if (tp[0].first->charge() != seed->startingState().parameters().charge()) isChargeMatched = false;
317  if(simRecColl.find(tp[0].first) != simRecColl.end()) numAssocSeeds = simRecColl[tp[0].first].size();
318  //std::cout << numAssocRecoTracks << std::endl;
319 
320  at++;
321 
322  for (unsigned int tp_ite=0;tp_ite<tp.size();++tp_ite){
323  TrackingParticle trackpart = *(tp[tp_ite].first);
324  if ((trackpart.eventId().event() == 0) && (trackpart.eventId().bunchCrossing() == 0)){
325  isSigSimMatched = true;
326  sat++;
327  break;
328  }
329  }
330 
331 
332  edm::LogVerbatim("SeedValidator") << "TrajectorySeed #" << rT << " associated with quality:" << tp.begin()->second <<"\n";
333  }
334  } else {
335  edm::LogVerbatim("SeedValidator") << "TrajectorySeed #" << rT << " NOT associated to any TrackingParticle" << "\n";
336  }
337 
338  double dR = 0.;//fixme: plots vs dR not implemented for now
339  histoProducerAlgo_->fill_generic_recoTrack_histos(w,*trackFromSeed,bs.position(),isSimMatched,isSigSimMatched,
340  isChargeMatched, numAssocSeeds,
341  puinfo.getPU_NumInteractions(),
342  nSimHits, sharedFraction, dR);
343 
344  //Fill other histos
345  try{
346  if (tp.size()==0) continue;
347 
349 
350  TrackingParticleRef tpr = tp.begin()->first;
351 
352  //compute tracking particle parameters at point of closest approach to the beamline
353  TrackingParticle::Vector momentumTP = parametersDefinerTP->momentum(event,setup,tpr);
354  TrackingParticle::Point vertexTP = parametersDefinerTP->vertex(event,setup,tpr);
355 
356  // LogTrace("SeedValidatorTEST") << "assocChi2=" << tp.begin()->second << "\n"
357  // << "" << "\n"
358  // << "ptREC=" << ptSeed << "\n"
359  // << "etaREC=" << etaSeed << "\n"
360  // << "qoverpREC=" << qoverpSeed << "\n"
361  // << "dxyREC=" << dxySeed << "\n"
362  // << "dzREC=" << dzSeed << "\n"
363  // << "thetaREC=" << thetaSeed << "\n"
364  // << "phiREC=" << phiSeed << "\n"
365  // << "" << "\n"
366  // << "qoverpError()=" << qoverpErrorSeed << "\n"
367  // << "dxyError()=" << dxyErrorSeed << "\n"
368  // << "dzError()=" << dzErrorSeed << "\n"
369  // << "thetaError()=" << lambdaErrorSeed << "\n"
370  // << "phiError()=" << phiErrorSeed << "\n"
371  // << "" << "\n"
372  // << "ptSIM=" << sqrt(assocTrack->momentum().perp2()) << "\n"
373  // << "etaSIM=" << assocTrack->momentum().Eta() << "\n"
374  // << "qoverpSIM=" << qoverpSim << "\n"
375  // << "dxySIM=" << dxySim << "\n"
376  // << "dzSIM=" << dzSim << "\n"
377  // << "thetaSIM=" << M_PI/2-lambdaSim << "\n"
378  // << "phiSIM=" << phiSim << "\n"
379  // << "" << "\n"
380  // << "contrib_Qoverp=" << contrib_Qoverp << "\n"
381  // << "contrib_dxy=" << contrib_dxy << "\n"
382  // << "contrib_dz=" << contrib_dz << "\n"
383  // << "contrib_theta=" << contrib_theta << "\n"
384  // << "contrib_phi=" << contrib_phi << "\n"
385  // << "" << "\n"
386  // <<"chi2PULL="<<contrib_Qoverp+contrib_dxy+contrib_dz+contrib_theta+contrib_phi<<"\n";
387 
388  histoProducerAlgo_->fill_ResoAndPull_recoTrack_histos(w,momentumTP,vertexTP,tpr->charge(),
389  *trackFromSeed,bs.position());
390 
391 
392  } catch (cms::Exception e){
393  LogTrace("SeedValidator") << "exception found: " << e.what() << "\n";
394  }
395  }// End of for(TrajectorySeedCollection::size_type i=0; i<seedCollection->size(); ++i)
396 
398 
399  edm::LogVerbatim("SeedValidator") << "Total Simulated: " << st << "\n"
400  << "Total Associated (simToReco): " << ats << "\n"
401  << "Total Reconstructed: " << rT << "\n"
402  << "Total Associated (recoToSim): " << at << "\n"
403  << "Total Fakes: " << rT-at << "\n";
404  w++;
405  }
406  }
407 }
408 
410  LogTrace("SeedValidator") << "TrackerSeedValidator::endRun()";
411  int w=0;
412  for (unsigned int ww=0;ww<associators.size();ww++){
413  for (unsigned int www=0;www<label.size();www++){
414 
417 
418  w++;
419  }
420  }
421  //if ( out.size() != 0 && dbe_ ) dbe_->save(out);
422 }
423 
424 
425 
virtual char const * what() const
Definition: Exception.cc:141
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
int event() const
get the contents of the subdetector field (should be protected?)
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > label_pileupinfo
const double w
Definition: UKUtility.cc:23
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:266
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &)
Method called to book the DQM histograms.
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
std::vector< const TrackAssociatorBase * > associator
void endRun(edm::Run const &, edm::EventSetup const &)
Method called at the end of the event loop.
virtual void fill_ResoAndPull_recoTrack_histos(int count, const TrackingParticle::Vector &momentumTP, const TrackingParticle::Point &vertexTP, int chargeTP, const reco::Track &track, const math::XYZPoint &bsPosition)=0
edm::EDGetTokenT< TrackingVertexCollection > label_tv
virtual void bookRecoHistosForStandaloneRunning(DQMStore::IBooker &ibook)=0
uint16_t size_type
virtual void fill_recoAssociated_simTrack_histos(int count, const TrackingParticle &tp, const TrackingParticle::Vector &momentumTP, const TrackingParticle::Point &vertexTP, double dxy, double dz, int nSimHits, const reco::Track *track, int numVertices, double dR)=0
TrackingParticleSelector tpSelector
edm::EDGetTokenT< reco::BeamSpot > bsSrc
math::XYZPointD Point
point in the space
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
bool appendHits(const C &c)
append hit patterns from vector of hit references
Definition: TrackBase.h:411
std::vector< edm::InputTag > label
std::vector< edm::EDGetTokenT< edm::View< TrajectorySeed > > > labelTokenSeed
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
T sqrt(T t)
Definition: SSEVec.h:48
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
virtual void bookRecoHistos(DQMStore::IBooker &ibook)=0
virtual void fillProfileHistosFromVectors(int counter)=0
virtual void initialize()=0
virtual void bookSimHistos(DQMStore::IBooker &ibook)=0
math::XYZPoint Point
point in the space
Definition: TrackBase.h:82
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
bool first
Definition: L1TdeRCT.cc:75
edm::ESHandle< TransientTrackingRecHitBuilder > theTTRHBuilder
#define LogTrace(id)
std::shared_ptr< TrackingRecHit const > RecHitPointer
virtual void finalHistoFits(int counter)=0
PTrajectoryStateOnDet const & startingState() const
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
virtual void fill_simAssociated_recoTrack_histos(int count, const reco::Track &track)=0
T const * product() const
Definition: Handle.h:81
std::vector< TrackingVertex > TrackingVertexCollection
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:86
range recHits() const
virtual void fill_trackBased_histos(int count, int assTracks, int numRecoTracks, int numSimTracks)=0
TrackCharge charge() const
Charge (-1, 0 or 1)
const int getPU_NumInteractions() const
std::string const & label() const
Definition: InputTag.h:42
EncodedEventId eventId() const
Signal source, crossing number.
std::string const & process() const
Definition: InputTag.h:46
virtual void fill_generic_recoTrack_histos(int count, const reco::Track &track, const math::XYZPoint &bsPosition, bool isMatched, bool isSigMatched, bool isChargeMatched, int numAssocRecoTracks, int numVertices, int nSimHits, double sharedFraction, double dR)=0
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
std::vector< std::string > associators
math::XYZVectorD Vector
point in the space
void analyze(const edm::Event &, const edm::EventSetup &)
Method called once per event.
MTVHistoProducerAlgo * histoProducerAlgo_
virtual void fill_generic_simTrack_histos(int counter, const TrackingParticle::Vector &, const TrackingParticle::Point &vertex, int bx)=0
edm::EDGetTokenT< TrackingParticleCollection > label_tp_fake
math::XYZVector Vector
spatial vector
Definition: TrackBase.h:79
std::string const & instance() const
Definition: InputTag.h:43
void setup(std::vector< TH2F > &depth, std::string name, std::string units="")
tuple size
Write out results.
T get(const Candidate &c)
Definition: component.h:55
const LocalTrajectoryParameters & parameters() const
Definition: Run.h:41
edm::ESHandle< MagneticField > theMF
list at
Definition: asciidump.py:428