test
CMS 3D CMS Logo

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

#include <TrackerSeedValidator.h>

Inheritance diagram for TrackerSeedValidator:
DQMEDAnalyzer MultiTrackValidatorBase edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > > edm::stream::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 Method called once per event. More...
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 Method called to book the DQM histograms. More...
 
 TrackerSeedValidator (const edm::ParameterSet &pset)
 Constructor. More...
 
virtual ~TrackerSeedValidator ()
 Destructor. More...
 
- Public Member Functions inherited from DQMEDAnalyzer
virtual void beginRun (edm::Run const &, edm::EventSetup const &) final
 
virtual void beginStream (edm::StreamID id) final
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer (void)
 
virtual void endLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, dqmDetails::NoCache *) const final
 
virtual void endRunSummary (edm::Run const &, edm::EventSetup const &, dqmDetails::NoCache *) const final
 
uint32_t streamId () const
 
- Public Member Functions inherited from edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > >
 EDAnalyzer ()=default
 
- Public Member Functions inherited from edm::stream::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDAnalyzerBase ()
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector
< ProductResolverIndexAndSkipBit >
const & 
itemsToGetFromEvent () const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Attributes

std::vector< edm::EDGetTokenT
< reco::TrackToTrackingParticleAssociator > > 
associatorTokens
 
std::string builderName
 
CosmicTrackingParticleSelector cosmictpSelector
 
std::string dirName_
 
std::unique_ptr
< MTVHistoProducerAlgoForTracker
histoProducerAlgo_
 
edm::ESHandle
< TransientTrackingRecHitBuilder
theTTRHBuilder
 
TrackingParticleSelector tpSelector
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDAnalyzer< edm::RunSummaryCache< dqmDetails::NoCache >, edm::LuminosityBlockSummaryCache< dqmDetails::NoCache > >
typedef CacheContexts< T...> CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T...> HasAbility
 
typedef
CacheTypes::LuminosityBlockCache 
LuminosityBlockCache
 
typedef
LuminosityBlockContextT
< LuminosityBlockCache,
RunCache, GlobalCache
LuminosityBlockContext
 
typedef
CacheTypes::LuminosityBlockSummaryCache 
LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache,
GlobalCache
RunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 
- Public Types inherited from edm::stream::EDAnalyzerBase
typedef EDAnalyzerAdaptorBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from DQMEDAnalyzer
static std::shared_ptr
< dqmDetails::NoCache
globalBeginLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, LuminosityBlockContext const *)
 
static std::shared_ptr
< dqmDetails::NoCache
globalBeginRunSummary (edm::Run const &, edm::EventSetup const &, RunContext const *)
 
static void globalEndLuminosityBlockSummary (edm::LuminosityBlock const &, edm::EventSetup const &, LuminosityBlockContext const *, dqmDetails::NoCache *)
 
static void globalEndRunSummary (edm::Run const &, edm::EventSetup const &, RunContext const *, dqmDetails::NoCache *)
 
- Static Public Member Functions inherited from edm::stream::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
- Protected Member Functions inherited from MultiTrackValidatorBase
 MultiTrackValidatorBase (const edm::ParameterSet &pset, edm::ConsumesCollector &&iC, bool isSeed=false)
 Constructor. More...
 
virtual ~MultiTrackValidatorBase ()(false)
 Destructor. More...
 
- Protected Attributes inherited from MultiTrackValidatorBase
std::vector< edm::InputTagassociators
 
edm::EDGetTokenT< reco::BeamSpotbsSrc
 
bool ignoremissingtkcollection_
 
std::vector< edm::InputTaglabel
 
edm::EDGetTokenT< std::vector
< PileupSummaryInfo > > 
label_pileupinfo
 
edm::EDGetTokenT
< TrackingParticleCollection
label_tp_effic
 
edm::EDGetTokenT
< TrackingParticleRefVector
label_tp_effic_refvector
 
edm::EDGetTokenT
< TrackingParticleCollection
label_tp_fake
 
edm::EDGetTokenT
< TrackingParticleRefVector
label_tp_fake_refvector
 
edm::EDGetTokenT
< TrackingVertexCollection
label_tv
 
std::vector< edm::EDGetTokenT
< edm::View< reco::Track > > > 
labelToken
 
std::vector< edm::EDGetTokenT
< edm::View< TrajectorySeed > > > 
labelTokenSeed
 
edm::EDGetTokenT
< edm::ValueMap
< reco::DeDxData > > 
m_dEdx1Tag
 
edm::EDGetTokenT
< edm::ValueMap
< reco::DeDxData > > 
m_dEdx2Tag
 
std::string parametersDefiner
 
std::vector< edm::EDGetTokenT
< std::vector< PSimHit > > > 
simHitTokens_
 

Detailed Description

Class that prodecs histrograms to validate Track Reconstruction performances

Author
cerati

Definition at line 18 of file TrackerSeedValidator.h.

Constructor & Destructor Documentation

TrackerSeedValidator::TrackerSeedValidator ( const edm::ParameterSet pset)

Constructor.

Definition at line 38 of file TrackerSeedValidator.cc.

References MultiTrackValidatorBase::associators, associatorTokens, builderName, dirName_, edm::ParameterSet::getParameter(), AlCaHLTBitMon_QueryRunRegistry::string, and tpSelector.

38  :
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 }
T getParameter(std::string const &) const
std::vector< edm::InputTag > associators
TrackingParticleSelector tpSelector
SingleObjectSelector< TrackingParticleCollection,::TrackingParticleSelector > TrackingParticleSelector
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
MultiTrackValidatorBase(const edm::ParameterSet &pset, edm::ConsumesCollector &&iC, bool isSeed=false)
Constructor.
std::unique_ptr< MTVHistoProducerAlgoForTracker > histoProducerAlgo_
std::vector< edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > > associatorTokens
TrackerSeedValidator::~TrackerSeedValidator ( )
virtual

Destructor.

Definition at line 62 of file TrackerSeedValidator.cc.

62 {}

Member Function Documentation

void TrackerSeedValidator::analyze ( const edm::Event event,
const edm::EventSetup setup 
)
overridevirtual

Method called once per event.

Implements edm::stream::EDAnalyzerBase.

Definition at line 105 of file TrackerSeedValidator.cc.

References reco::TrackBase::appendHits(), reco::TrackToTrackingParticleAssociator::associateRecoToSim(), reco::TrackToTrackingParticleAssociator::associateSimToReco(), MultiTrackValidatorBase::associators, associatorTokens, MultiTrackValidatorBase::bsSrc, builderName, EncodedEventId::bunchCrossing(), TrackingParticleNumberOfLayers::calculate(), LocalTrajectoryParameters::charge(), funct::cos(), PFRecoTauDiscriminationAgainstElectronDeadECAL_cfi::dR, alignCSCRings::e, edm::AssociationMap< Tag >::end(), EncodedEventId::event(), TrackingParticle::eventId(), edm::AssociationMap< Tag >::find(), plotBeamSpotDB::first, TrajectoryStateOnSurface::freeState(), PerigeeConversions::ftsToPerigeeError(), edm::EventSetup::get(), PileupSummaryInfo::getPU_NumInteractions(), histoProducerAlgo_, i, MultiTrackValidatorBase::label, MultiTrackValidatorBase::label_pileupinfo, MultiTrackValidatorBase::label_tp_effic, MultiTrackValidatorBase::label_tp_fake, MultiTrackValidatorBase::labelTokenSeed, LogTrace, PTrajectoryStateOnDet::parameters(), MultiTrackValidatorBase::parametersDefiner, reco::BeamSpot::position(), edm::Handle< T >::product(), edm::ESHandle< class >::product(), TrajectorySeed::recHits(), fileCollector::seed, MultiTrackValidatorBase::simHitTokens_, funct::sin(), findQualityFiles::size, mathSSE::sqrt(), TrajectorySeed::startingState(), theTTRHBuilder, tpSelector, trajectoryStateTransform::transientState(), w, and cms::Exception::what().

105  {
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
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
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
std::vector< edm::InputTag > label
std::vector< edm::EDGetTokenT< edm::View< TrajectorySeed > > > labelTokenSeed
T sqrt(T t)
Definition: SSEVec.h:18
int bunchCrossing() const
get the detector field from this detid
FreeTrajectoryState const * freeState(bool withErrors=true) const
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
math::XYZPoint Point
point in the space
Definition: TrackBase.h:83
edm::ESHandle< TransientTrackingRecHitBuilder > theTTRHBuilder
#define LogTrace(id)
std::shared_ptr< TrackingRecHit const > RecHitPointer
PTrajectoryStateOnDet const & startingState() const
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
const int getPU_NumInteractions() const
EncodedEventId eventId() const
Signal source, crossing number.
Monte Carlo truth information used for tracking validation.
PerigeeTrajectoryError ftsToPerigeeError(const FTS &originalFTS)
const Point & position() const
position
Definition: BeamSpot.h:62
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::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
void TrackerSeedValidator::bookHistograms ( DQMStore::IBooker ibook,
edm::Run const &  ,
edm::EventSetup const &  setup 
)
overridevirtual

Method called to book the DQM histograms.

Implements DQMEDAnalyzer.

Definition at line 64 of file TrackerSeedValidator.cc.

References ecalcalib_dqm_sourceclient-live_cfg::algo, MultiTrackValidatorBase::associators, DQMStore::IBooker::cd(), TrackerOfflineValidation_Dqm_cff::dirName, dirName_, histoProducerAlgo_, edm::InputTag::instance(), edm::InputTag::label(), MultiTrackValidatorBase::label, edm::InputTag::process(), python.rootplot.root2matplotlib::replace(), and DQMStore::IBooker::setCurrentFolder().

64  {
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 }
std::vector< edm::InputTag > associators
void cd(void)
Definition: DQMStore.cc:269
std::vector< edm::InputTag > label
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:277
std::string const & label() const
Definition: InputTag.h:36
std::string const & process() const
Definition: InputTag.h:40
std::string const & instance() const
Definition: InputTag.h:37
std::unique_ptr< MTVHistoProducerAlgoForTracker > histoProducerAlgo_

Member Data Documentation

std::vector<edm::EDGetTokenT<reco::TrackToTrackingParticleAssociator> > TrackerSeedValidator::associatorTokens
private

Definition at line 33 of file TrackerSeedValidator.h.

Referenced by analyze(), and TrackerSeedValidator().

std::string TrackerSeedValidator::builderName
private

Definition at line 35 of file TrackerSeedValidator.h.

Referenced by analyze(), and TrackerSeedValidator().

CosmicTrackingParticleSelector TrackerSeedValidator::cosmictpSelector
private

Definition at line 42 of file TrackerSeedValidator.h.

std::string TrackerSeedValidator::dirName_
private

Definition at line 37 of file TrackerSeedValidator.h.

Referenced by bookHistograms(), and TrackerSeedValidator().

std::unique_ptr<MTVHistoProducerAlgoForTracker> TrackerSeedValidator::histoProducerAlgo_
private

Definition at line 43 of file TrackerSeedValidator.h.

Referenced by analyze(), and bookHistograms().

edm::ESHandle<TransientTrackingRecHitBuilder> TrackerSeedValidator::theTTRHBuilder
private

Definition at line 36 of file TrackerSeedValidator.h.

Referenced by analyze().

TrackingParticleSelector TrackerSeedValidator::tpSelector
private

Definition at line 41 of file TrackerSeedValidator.h.

Referenced by analyze(), and TrackerSeedValidator().