CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
TrackTimeValueMapProducer Class Reference
Inheritance diagram for TrackTimeValueMapProducer:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 
 TrackTimeValueMapProducer (const edm::ParameterSet &)
 
 ~TrackTimeValueMapProducer () override
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 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 & itemsToGetFrom (BranchType iType) 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
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

float extractTrackVertexTime (const TrackingParticle &, const reco::TransientTrack &) const
 

Private Attributes

const std::vector< edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > > associators_
 
const float etaMax_
 
const float etaMaxForPtThreshold_
 
const float etaMin_
 
const edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupSummaryInfo_
 
const float pMin_
 
const float ptMin_
 
std::vector< std::unique_ptr< const ResolutionModel > > resolutions_
 
const edm::EDGetTokenT< TrackingParticleCollectiontrackingParticles_
 
const edm::EDGetTokenT< TrackingVertexCollectiontrackingVertices_
 
const edm::EDGetTokenT< edm::View< reco::Track > > tracks_
 
const std::string tracksName_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
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)
 

Detailed Description

Definition at line 41 of file TrackTimeValueMapProducer.cc.

Constructor & Destructor Documentation

TrackTimeValueMapProducer::TrackTimeValueMapProducer ( const edm::ParameterSet conf)

Definition at line 84 of file TrackTimeValueMapProducer.cc.

References etaMax_, etaMaxForPtThreshold_, etaMin_, reco::get(), dataset::name, pMin_, ptMin_, fftjetproducer_cfi::resolution, resolutions_, AlCaHLTBitMon_QueryRunRegistry::string, GlobalPosition_Frontier_DevDB_cff::tag, and tracksName_.

84  :
86  tracksName_(conf.getParameter<edm::InputTag>("trackSrc").label()),
87  trackingParticles_(consumes<TrackingParticleCollection>( conf.getParameter<edm::InputTag>("trackingParticleSrc") ) ),
88  trackingVertices_(consumes<TrackingVertexCollection>( conf.getParameter<edm::InputTag>("trackingVertexSrc") ) ),
89  pileupSummaryInfo_(consumes<std::vector<PileupSummaryInfo> >( conf.getParameter<edm::InputTag>("pileupSummaryInfo") ) ),
90  associators_( edm::vector_transform( conf.getParameter<std::vector<edm::InputTag> >("associators"), [this](const edm::InputTag& tag){ return this->consumes<reco::TrackToTrackingParticleAssociator>(tag); } ) ),
91  etaMin_( conf.getParameter<double>("etaMin") ),
92  etaMax_( conf.getParameter<double>("etaMax") ),
93  ptMin_( conf.getParameter<double>("ptMin") ),
94  pMin_( conf.getParameter<double>("pMin") ),
95  etaMaxForPtThreshold_( conf.getParameter<double>("etaMaxForPtThreshold") )
96 {
97  // setup resolution models
98  const std::vector<edm::ParameterSet>& resos = conf.getParameterSetVector("resolutionModels");
99  for( const auto& reso : resos ) {
100  const std::string& name = reso.getParameter<std::string>("modelName");
101  ResolutionModel* resomod = ResolutionModelFactory::get()->create(name,reso);
102  resolutions_.emplace_back( resomod );
103 
104  // times and time resolutions for general tracks
105  produces<edm::ValueMap<float> >(tracksName_+name);
106  produces<edm::ValueMap<float> >(tracksName_+name+resolution);
107  }
108 }
T getParameter(std::string const &) const
VParameterSet const & getParameterSetVector(std::string const &name) const
const edm::EDGetTokenT< TrackingVertexCollection > trackingVertices_
auto vector_transform(std::vector< InputType > const &input, Function predicate) -> std::vector< typename std::remove_cv< typename std::remove_reference< decltype(predicate(input.front()))>::type >::type >
Definition: transform.h:11
std::vector< std::unique_ptr< const ResolutionModel > > resolutions_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::EDGetTokenT< TrackingParticleCollection > trackingParticles_
const std::vector< edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > > associators_
std::string const & label() const
Definition: InputTag.h:36
const edm::EDGetTokenT< edm::View< reco::Track > > tracks_
T get(const Candidate &c)
Definition: component.h:55
const edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupSummaryInfo_
TrackTimeValueMapProducer::~TrackTimeValueMapProducer ( )
inlineoverride

Definition at line 44 of file TrackTimeValueMapProducer.cc.

References produce().

44 { }

Member Function Documentation

float TrackTimeValueMapProducer::extractTrackVertexTime ( const TrackingParticle tp,
const reco::TransientTrack tt 
) const
private

Definition at line 224 of file TrackTimeValueMapProducer.cc.

References reco::TrackBase::charge(), reco::deltaPhi(), dt, PVValHelper::dz, reco::TransientTrack::field(), MagneticField::inTesla(), TrajectoryStateClosestToPoint::momentum(), AlCaHLTBitMon_ParallelJobs::p, reco::TrackBase::p(), TrackingParticle::parentVertex(), BPhysicsValidation_cfi::pdgid, TrackingParticle::pdgId(), PV3DBase< T, PVType, FrameType >::phi(), reco::TrackBase::phi(), reco::TrackBase::pt(), TCMET_cfi::radius, mps_fire::result, edm::second(), PixelCPETemplateReco_cfi::speed, mathSSE::sqrt(), ntuplemaker::time, reco::TransientTrack::track(), reco::TransientTrack::trajectoryStateClosestToPoint(), reco::TrackBase::vz(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

224  {
225  int pdgid = tp.pdgId();
226  const auto& tvertex = tp.parentVertex();
227  math::XYZTLorentzVectorD result = tvertex->position();
228 
229  // account for secondary vertices...
230  if( tvertex->nSourceTracks() && tvertex->sourceTracks()[0]->pdgId()==pdgid ) {
231  auto pvertex = tvertex->sourceTracks()[0]->parentVertex();
232  result = pvertex->position();
233  while( pvertex->nSourceTracks() && pvertex->sourceTracks()[0]->pdgId()==pdgid ) {
234  pvertex = pvertex->sourceTracks()[0]->parentVertex();
235  result = pvertex->position();
236  }
237  }
238 
239  float time = result.T()*CLHEP::second;
240  //correct for time of flight from track reference position
241  GlobalPoint result_pos(result.x(),result.y(),result.z());
242  const auto &tkstate = tt.trajectoryStateClosestToPoint(result_pos);
243  float tkphi = tkstate.momentum().phi();
244  float tkz = tkstate.position().z();
245  float dphi = reco::deltaPhi(tkphi,tt.track().phi());
246  float dz = tkz - tt.track().vz();
247 
248  float radius = 100.*tt.track().pt()/(0.3*tt.field()->inTesla(GlobalPoint(0,0,0)).z());
249  float pathlengthrphi = tt.track().charge()*dphi*radius;
250 
251  float pathlength = std::sqrt(pathlengthrphi*pathlengthrphi + dz*dz);
252  float p = tt.track().p();
253 
254  float speed = std::sqrt(1./(1.+m_pion/p))*CLHEP::c_light/CLHEP::cm; //speed in cm/ns
255  float dt = pathlength/speed;
256 
257  return time-dt;
258 }
double p() const
momentum vector magnitude
Definition: TrackBase.h:615
float dt
Definition: AMPTWrapper.h:126
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > XYZTLorentzVectorD
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:14
int pdgId() const
PDG ID.
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
double phi() const
azimuthal angle of momentum vector
Definition: TrackBase.h:645
const MagneticField * field() const
U second(std::pair< T, U > const &p)
T sqrt(T t)
Definition: SSEVec.h:18
double pt() const
track transverse momentum
Definition: TrackBase.h:621
T z() const
Definition: PV3DBase.h:64
const TrackingVertexRef & parentVertex() const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
double vz() const
z coordinate of the reference point on track
Definition: TrackBase.h:669
const Track & track() const
TrajectoryStateClosestToPoint trajectoryStateClosestToPoint(const GlobalPoint &point) const
int charge() const
track electric charge
Definition: TrackBase.h:567
void TrackTimeValueMapProducer::produce ( edm::StreamID  sid,
edm::Event evt,
const edm::EventSetup es 
) const
override

Definition at line 110 of file TrackTimeValueMapProducer.cc.

References funct::abs(), TrackValidation_cff::association, ctfWithMaterialTrackMCMatch_cfi::associator, simPFProducer_cfi::associators, associators_, TransientTrackBuilder::build(), edm::AssociationMap< Tag >::const_iterator, edm::View< T >::empty(), reco::TrackBase::eta(), etaMaxForPtThreshold_, etaMin_, edm::EventID::event(), extractTrackVertexTime(), f, edm::EventSetup::get(), edm::Event::getByToken(), mps_fire::i, edm::EventBase::id(), LogDebug, edm::EventID::luminosityBlock(), SiStripPI::max, dataset::name, reco::TrackBase::p(), pileupSummaryInfo_, pMin_, reco::TrackBase::pt(), ptMin_, edm::View< T >::refAt(), fftjetproducer_cfi::resolution, resolutions_, edm::EventID::run(), SurveyInfoScenario_cff::seed, edm::View< T >::size(), mathSSE::sqrt(), AlCaHLTBitMon_QueryRunRegistry::string, ntuplemaker::time, create_public_lumi_plots::times, trackingParticles_, tracks_, tracksName_, and groupFilesInBlocks::tt.

Referenced by ~TrackTimeValueMapProducer().

110  {
111  // get sim track associators
112  std::vector<edm::Handle<reco::TrackToTrackingParticleAssociator> > associators;
113  for( const auto& token : associators_ ) {
114  associators.emplace_back();
115  auto& back = associators.back();
116  evt.getByToken(token,back);
117  }
118 
119  std::vector<float> generalTrackTimes;
120 
121  //get track collections
122  edm::Handle<edm::View<reco::Track> > TrackCollectionH;
123  evt.getByToken(tracks_, TrackCollectionH);
124  const edm::View<reco::Track>& TrackCollection = *TrackCollectionH;
125 
126  //get tracking particle collections
128  evt.getByToken(trackingParticles_, TPCollectionH);
129 
131  evt.getByToken(pileupSummaryInfo_, pileupSummaryH);
132 
133  //transient track builder
135  es.get<TransientTrackRecord>().get("TransientTrackBuilder",theB);
136 
137  // associate the reco tracks / gsf Tracks
138  std::vector<reco::RecoToSimCollection> associatedTracks;
139  for( auto associator : associators ) {
140  associatedTracks.emplace_back(associator->associateRecoToSim(TrackCollectionH, TPCollectionH));
141  }
142 
143 
144  double sumSimTime = 0.;
145  double sumSimTimeSq = 0.;
146  int nsim = 0;
147  for (const PileupSummaryInfo &puinfo : *pileupSummaryH) {
148  if (puinfo.getBunchCrossing() == 0) {
149  for (const float &time : puinfo.getPU_times()) {
150  double simtime = time;
151  sumSimTime += simtime;
152  sumSimTimeSq += simtime*simtime;
153  ++nsim;
154  }
155  break;
156  }
157  }
158 
159  double meanSimTime = sumSimTime/double(nsim);
160  double varSimTime = sumSimTimeSq/double(nsim) - meanSimTime*meanSimTime;
161  double rmsSimTime = std::sqrt(std::max(0.1*0.1,varSimTime));
162  std::normal_distribution<float> gausSimTime(meanSimTime, rmsSimTime);
163 
164  // get event-based seed for RNG
165  unsigned int runNum_uint = static_cast <unsigned int> (evt.id().run());
166  unsigned int lumiNum_uint = static_cast <unsigned int> (evt.id().luminosityBlock());
167  unsigned int evNum_uint = static_cast <unsigned int> (evt.id().event());
168  unsigned int tkChi2_uint = uint32_t(TrackCollection.empty() ? 0 : TrackCollection.refAt(0)->chi2()/0.01);
169  std::uint32_t seed = tkChi2_uint + (lumiNum_uint<<10) + (runNum_uint<<20) + evNum_uint;
170  std::mt19937 rng(seed);
171 
172  for( unsigned itk = 0; itk < TrackCollection.size(); ++itk ) {
173  const auto tkref = TrackCollection.refAt(itk);
174  reco::RecoToSimCollection::const_iterator track_tps = associatedTracks.back().end();
175 
176  for( const auto& association : associatedTracks ) {
177  track_tps = association.find(tkref);
178  if( track_tps != association.end() ) break;
179  }
180 
181  if (track_tps != associatedTracks.back().end() && track_tps->val.size() == 1) {
182  reco::TransientTrack tt = theB->build(*tkref);
183  float time = extractTrackVertexTime(*track_tps->val[0].first,tt);
184  generalTrackTimes.push_back(time);
185  }
186  else {
187  float rndtime = gausSimTime(rng);
188  generalTrackTimes.push_back(rndtime);
189  if (track_tps != associatedTracks.back().end() && track_tps->val.size() > 1) {
190  LogDebug("TooManyTracks") << "track matched to " << track_tps->val.size() << " tracking particles!" << std::endl;
191  }
192  }
193  }
194 
195  for( const auto& reso : resolutions_ ) {
196  const std::string& name = reso->name();
197  std::vector<float> times, resos;
198 
199  times.reserve(TrackCollection.size());
200  resos.reserve(TrackCollection.size());
201 
202  for( unsigned i = 0; i < TrackCollection.size(); ++i ) {
203  const reco::Track& tk = TrackCollection[i];
204  const float absEta = std::abs(tk.eta());
205  bool inAcceptance = absEta < etaMax_ && absEta >= etaMin_ && tk.p()>pMin_ && (absEta>etaMaxForPtThreshold_ || tk.pt()>ptMin_);
206  if (inAcceptance) {
207  const float resolution = reso->getTimeResolution(tk);
208  std::normal_distribution<float> gausGeneralTime(generalTrackTimes[i], resolution);
209  times.push_back( gausGeneralTime(rng) );
210  resos.push_back( resolution );
211  }
212  else {
213  times.push_back(0.0f);
214  resos.push_back(-1.);
215  }
216  }
217 
218  writeValueMap( evt, TrackCollectionH, times, tracksName_+name );
219  writeValueMap( evt, TrackCollectionH, resos, tracksName_+name+resolution );
220  }
221 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:39
double p() const
momentum vector magnitude
Definition: TrackBase.h:615
EventNumber_t event() const
Definition: EventID.h:41
friend struct const_iterator
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
reco::TransientTrack build(const reco::Track *p) const
size_type size() const
LuminosityBlockNumber_t luminosityBlock() const
Definition: EventID.h:40
std::vector< std::unique_ptr< const ResolutionModel > > resolutions_
RefToBase< value_type > refAt(size_type i) const
double eta() const
pseudorapidity of momentum vector
Definition: TrackBase.h:651
T sqrt(T t)
Definition: SSEVec.h:18
double pt() const
track transverse momentum
Definition: TrackBase.h:621
bool empty() const
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
float extractTrackVertexTime(const TrackingParticle &, const reco::TransientTrack &) const
double f[11][100]
const edm::EDGetTokenT< TrackingParticleCollection > trackingParticles_
const T & get() const
Definition: EventSetup.h:58
const std::vector< edm::EDGetTokenT< reco::TrackToTrackingParticleAssociator > > associators_
edm::EventID id() const
Definition: EventBase.h:60
const edm::EDGetTokenT< edm::View< reco::Track > > tracks_
const edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupSummaryInfo_

Member Data Documentation

const std::vector<edm::EDGetTokenT<reco::TrackToTrackingParticleAssociator> > TrackTimeValueMapProducer::associators_
private

Definition at line 56 of file TrackTimeValueMapProducer.cc.

Referenced by produce().

const float TrackTimeValueMapProducer::etaMax_
private

Definition at line 58 of file TrackTimeValueMapProducer.cc.

Referenced by TrackTimeValueMapProducer().

const float TrackTimeValueMapProducer::etaMaxForPtThreshold_
private

Definition at line 58 of file TrackTimeValueMapProducer.cc.

Referenced by produce(), and TrackTimeValueMapProducer().

const float TrackTimeValueMapProducer::etaMin_
private

Definition at line 58 of file TrackTimeValueMapProducer.cc.

Referenced by produce(), and TrackTimeValueMapProducer().

const edm::EDGetTokenT<std::vector<PileupSummaryInfo> > TrackTimeValueMapProducer::pileupSummaryInfo_
private

Definition at line 54 of file TrackTimeValueMapProducer.cc.

Referenced by produce().

const float TrackTimeValueMapProducer::pMin_
private

Definition at line 58 of file TrackTimeValueMapProducer.cc.

Referenced by produce(), and TrackTimeValueMapProducer().

const float TrackTimeValueMapProducer::ptMin_
private

Definition at line 58 of file TrackTimeValueMapProducer.cc.

Referenced by produce(), and TrackTimeValueMapProducer().

std::vector<std::unique_ptr<const ResolutionModel> > TrackTimeValueMapProducer::resolutions_
private

Definition at line 60 of file TrackTimeValueMapProducer.cc.

Referenced by produce(), and TrackTimeValueMapProducer().

const edm::EDGetTokenT<TrackingParticleCollection> TrackTimeValueMapProducer::trackingParticles_
private

Definition at line 52 of file TrackTimeValueMapProducer.cc.

Referenced by produce().

const edm::EDGetTokenT<TrackingVertexCollection> TrackTimeValueMapProducer::trackingVertices_
private

Definition at line 53 of file TrackTimeValueMapProducer.cc.

const edm::EDGetTokenT<edm::View<reco::Track> > TrackTimeValueMapProducer::tracks_
private

Definition at line 50 of file TrackTimeValueMapProducer.cc.

Referenced by produce().

const std::string TrackTimeValueMapProducer::tracksName_
private

Definition at line 51 of file TrackTimeValueMapProducer.cc.

Referenced by produce(), and TrackTimeValueMapProducer().