CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
AlignmentPrescaler Class Reference
Inheritance diagram for AlignmentPrescaler:
edm::one::EDProducer<> edm::one::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 AlignmentPrescaler (const edm::ParameterSet &iConfig)
 
void beginJob () override
 
void endJob () override
 
void produce (edm::Event &iEvent, const edm::EventSetup &iSetup) override
 
 ~AlignmentPrescaler () override
 
- Public Member Functions inherited from edm::one::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () const final
 
- Public Member Functions inherited from edm::one::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const
 
bool wantsStreamRuns () 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)
 
 ~ProducerBase () noexcept(false) override
 
- 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
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex >
const & 
esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
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::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, 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 selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &)
 
- Static Public Member Functions inherited from edm::one::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Member Functions

int layerFromId (const DetId &id, const TrackerTopology *tTopo) const
 

Private Attributes

edm::EDGetTokenT
< AliClusterValueMap
aliClusterToken_
 
unsigned int detid_
 
TFile * fpresc_
 
float hitPrescFactor_
 
TRandom3 * myrand_
 
float overlapPrescFactor_
 
std::string prescfilename_
 
std::string presctreename_
 
int totnhitspxl_
 
TTree * tpresc_
 
edm::EDGetTokenT
< reco::TrackCollection
tracksToken_
 

Additional Inherited Members

- Public Types inherited from edm::one::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
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< B > consumes (edm::InputTag tag) noexcept
 
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 ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes () noexcept
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag) noexcept
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
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)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

Definition at line 38 of file AlignmentPrescaler.cc.

Constructor & Destructor Documentation

AlignmentPrescaler::AlignmentPrescaler ( const edm::ParameterSet iConfig)

Definition at line 68 of file AlignmentPrescaler.cc.

69  : tracksToken_(consumes(iConfig.getParameter<edm::InputTag>("src"))),
71  prescfilename_(iConfig.getParameter<std::string>("PrescFileName")),
72  presctreename_(iConfig.getParameter<std::string>("PrescTreeName")) {
73  // issue the produce<>
74  produces<AliClusterValueMap>();
75  produces<AliTrackTakenClusterValueMap>();
76 }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< AliClusterValueMap > aliClusterToken_
edm::EDGetTokenT< reco::TrackCollection > tracksToken_
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
AlignmentPrescaler::~AlignmentPrescaler ( )
overridedefault

Member Function Documentation

void AlignmentPrescaler::beginJob ( void  )
overridevirtual

Reimplemented from edm::one::EDProducerBase.

Definition at line 80 of file AlignmentPrescaler.cc.

References detid_, fpresc_, hitPrescFactor_, myrand_, overlapPrescFactor_, prescfilename_, presctreename_, and tpresc_.

80  {
81  //
82  edm::LogPrint("AlignmentPrescaler") << "in AlignmentPrescaler::beginJob" << std::flush;
83  fpresc_ = new TFile(prescfilename_.c_str(), "READ");
84  tpresc_ = (TTree*)fpresc_->Get(presctreename_.c_str());
85  tpresc_->BuildIndex("DetId");
86  tpresc_->SetBranchStatus("*", false);
87  tpresc_->SetBranchStatus("DetId", true);
88  tpresc_->SetBranchStatus("PrescaleFactor", true);
89  tpresc_->SetBranchStatus("PrescaleFactorOverlap", true);
90  edm::LogPrint("AlignmentPrescaler") << " Branches activated " << std::flush;
91  detid_ = 0;
92  hitPrescFactor_ = 99.0;
93  overlapPrescFactor_ = 88.0;
94 
95  tpresc_->SetBranchAddress("DetId", &detid_);
96  tpresc_->SetBranchAddress("PrescaleFactor", &hitPrescFactor_);
97  tpresc_->SetBranchAddress("PrescaleFactorOverlap", &overlapPrescFactor_);
98  edm::LogPrint("AlignmentPrescaler") << " addressed " << std::flush;
99  myrand_ = new TRandom3();
100  // myrand_->SetSeed();
101  edm::LogPrint("AlignmentPrescaler") << " ok ";
102 }
Log< level::Warning, true > LogPrint
void AlignmentPrescaler::endJob ( void  )
overridevirtual

Reimplemented from edm::one::EDProducerBase.

Definition at line 104 of file AlignmentPrescaler.cc.

References fpresc_, myrand_, and tpresc_.

Referenced by o2olib.O2ORunMgr::executeJob().

104  {
105  delete tpresc_;
106  fpresc_->Close();
107  delete fpresc_;
108  delete myrand_;
109 }
void AlignmentPrescaler::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 280 of file AlignmentPrescaler.cc.

References edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, HLT_FULL_cff::InputTag, edm::ParameterSetDescription::setComment(), and AlCaHLTBitMon_QueryRunRegistry::string.

280  {
282  desc.setComment("Prescale Tracker Alignment hits for alignment procedures");
283  desc.add<edm::InputTag>("src", edm::InputTag("generalTracks"));
284  desc.add<edm::InputTag>("assomap", edm::InputTag("OverlapAssoMap"));
285  desc.add<std::string>("PrescFileName", "PrescaleFactors.root");
286  desc.add<std::string>("PrescTreeName", "AlignmentHitMap");
287  descriptions.addWithDefaultLabel(desc);
288 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)
void setComment(std::string const &value)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
int AlignmentPrescaler::layerFromId ( const DetId id,
const TrackerTopology tTopo 
) const
private

Definition at line 263 of file AlignmentPrescaler.cc.

References PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, TrackerTopology::pxbLayer(), TrackerTopology::pxfDisk(), TrackerTopology::pxfSide(), StripSubdetector::TEC, TrackerTopology::tecWheel(), StripSubdetector::TIB, TrackerTopology::tibLayer(), StripSubdetector::TID, TrackerTopology::tidSide(), TrackerTopology::tidWheel(), StripSubdetector::TOB, and TrackerTopology::tobLayer().

263  {
264  if (uint32_t(id.subdetId()) == PixelSubdetector::PixelBarrel) {
265  return tTopo->pxbLayer(id);
266  } else if (uint32_t(id.subdetId()) == PixelSubdetector::PixelEndcap) {
267  return tTopo->pxfDisk(id) + (3 * (tTopo->pxfSide(id) - 1));
268  } else if (id.subdetId() == StripSubdetector::TIB) {
269  return tTopo->tibLayer(id);
270  } else if (id.subdetId() == StripSubdetector::TOB) {
271  return tTopo->tobLayer(id);
272  } else if (id.subdetId() == StripSubdetector::TEC) {
273  return tTopo->tecWheel(id) + (9 * (tTopo->pxfSide(id) - 1));
274  } else if (id.subdetId() == StripSubdetector::TID) {
275  return tTopo->tidWheel(id) + (3 * (tTopo->tidSide(id) - 1));
276  }
277  return -1;
278 } //end layerfromId
static constexpr auto TEC
unsigned int tibLayer(const DetId &id) const
unsigned int pxfDisk(const DetId &id) const
unsigned int tidWheel(const DetId &id) const
unsigned int tidSide(const DetId &id) const
static constexpr auto TOB
unsigned int pxbLayer(const DetId &id) const
static constexpr auto TIB
unsigned int pxfSide(const DetId &id) const
unsigned int tecWheel(const DetId &id) const
static constexpr auto TID
unsigned int tobLayer(const DetId &id) const
void AlignmentPrescaler::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overridevirtual

Implements edm::one::EDProducerBase.

Definition at line 111 of file AlignmentPrescaler.cc.

References aliClusterToken_, SiStripRecHit1D::cluster(), SiStripRecHit2D::cluster(), SiPixelRecHit::cluster(), gather_cfg::cout, edm::EventID::event(), edm::Event::get(), edm::Event::getByToken(), hitPrescFactor_, edm::EventBase::id(), LogDebug, eostools::move(), myrand_, overlapPrescFactor_, edm::Event::put(), findQualityFiles::rr, edm::EventID::run(), tpresc_, HLT_FULL_cff::Tracks, and tracksToken_.

111  {
112  LogDebug("AlignmentPrescaler") << "\n\n#################\n### Starting the AlignmentPrescaler::produce ; Event: "
113  << iEvent.id().run() << ", " << iEvent.id().event() << std::endl;
114 
116  iEvent.getByToken(tracksToken_, Tracks);
117 
118  //take HitAssomap
119  AliClusterValueMap InValMap = iEvent.get(aliClusterToken_);
120 
121  //prepare the output of the ValueMap flagging tracks
122  std::vector<int> trackflags(Tracks->size(), 0);
123 
124  int npxlhits = 0;
125 
126  //loop on tracks
127  for (std::vector<reco::Track>::const_iterator ittrk = Tracks->begin(), edtrk = Tracks->end(); ittrk != edtrk;
128  ++ittrk) {
129  //loop on tracking rechits
130  LogDebug("AlignmentPrescaler") << "Loop on hits of track #" << (ittrk - Tracks->begin()) << std::endl;
131  int nhit = 0;
132  int ntakenhits = 0;
133  bool firstTakenHit = false;
134 
135  for (auto const& hit : ittrk->recHits()) {
136  if (!hit->isValid()) {
137  nhit++;
138  continue;
139  }
140  uint32_t tmpdetid = hit->geographicalId().rawId();
141  tpresc_->GetEntryWithIndex(tmpdetid);
142 
143  //-------------
144  //decide whether to take this hit or not
145  bool takeit = false;
146  int subdetId = hit->geographicalId().subdetId();
147 
148  //check first if the cluster is also in the overlap asso map
149  bool isOverlapHit = false;
150  // bool first=true;
151  //ugly...
152  const SiPixelRecHit* pixelhit = dynamic_cast<const SiPixelRecHit*>(hit);
153  const SiStripRecHit1D* stripHit1D = dynamic_cast<const SiStripRecHit1D*>(hit);
154  const SiStripRecHit2D* stripHit2D = dynamic_cast<const SiStripRecHit2D*>(hit);
155 
156  AlignmentClusterFlag tmpflag(hit->geographicalId());
157  int stripType = 0;
158  if (subdetId > 2) { // SST case
159  const std::type_info& type = typeid(*hit);
160  if (type == typeid(SiStripRecHit1D))
161  stripType = 1;
162  else if (type == typeid(SiStripRecHit2D))
163  stripType = 2;
164  else
165  stripType = 3;
166 
167  if (stripType == 1) {
168  // const SiStripRecHit1D* stripHit1D = dynamic_cast<const SiStripRecHit1D*>(hit);
169 
170  if (stripHit1D != nullptr) {
171  SiStripRecHit1D::ClusterRef stripclust(stripHit1D->cluster());
172  tmpflag = InValMap[stripclust];
173  tmpflag.SetDetId(hit->geographicalId());
174  if (tmpflag.isOverlap())
175  isOverlapHit = true;
176  LogDebug("AlignmentPrescaler")
177  << "~*~*~* Prescale (1D) for module " << tmpflag.detId().rawId() << "("
178  << InValMap[stripclust].detId().rawId() << ") is " << hitPrescFactor_ << std::flush;
179  if (tmpflag.isOverlap())
180  LogDebug("AlignmentPrescaler") << " (it is Overlap)";
181  } //end if striphit1D!=0
182  } else if (stripType == 2) {
183  //const SiStripRecHit2D* stripHit2D = dynamic_cast<const SiStripRecHit2D*>(hit);
184  if (stripHit2D != nullptr) {
185  SiStripRecHit2D::ClusterRef stripclust(stripHit2D->cluster());
186  tmpflag = InValMap[stripclust];
187  tmpflag.SetDetId(hit->geographicalId());
188  if (tmpflag.isOverlap())
189  isOverlapHit = true;
190  LogDebug("AlignmentPrescaler")
191  << "~*~*~* Prescale (2D) for module " << tmpflag.detId().rawId() << "("
192  << InValMap[stripclust].detId().rawId() << ") is " << hitPrescFactor_ << std::flush;
193  if (tmpflag.isOverlap())
194  LogDebug("AlignmentPrescaler") << " (it is Overlap)" << endl;
195  } //end if striphit2D!=0
196  }
197  } //end if is a strip hit
198  else {
199  // const SiPixelRecHit* pixelhit= dynamic_cast<const SiPixelRecHit*>(hit);
200  if (pixelhit != nullptr) {
201  npxlhits++;
202  SiPixelClusterRefNew pixclust(pixelhit->cluster());
203  tmpflag = InValMap[pixclust];
204  tmpflag.SetDetId(hit->geographicalId());
205  if (tmpflag.isOverlap())
206  isOverlapHit = true;
207  }
208  } //end else is a pixel hit
209  // tmpflag.SetDetId(hit->geographicalId());
210 
211  if (isOverlapHit) {
212  LogDebug("AlignmentPrescaler") << " DetId=" << tmpdetid << " is Overlap! " << flush;
213  takeit = (float(myrand_->Rndm()) <= overlapPrescFactor_);
214  }
215  if (!takeit) {
216  float rr = float(myrand_->Rndm());
217  takeit = (rr <= hitPrescFactor_);
218  }
219  if (takeit) { //HIT TAKEN !
220  LogDebug("AlignmentPrescaler") << " DetId=" << tmpdetid << " taken!" << flush;
221  tmpflag.SetTakenFlag();
222 
223  if (subdetId > 2) {
224  if (stripType == 1) {
225  SiStripRecHit1D::ClusterRef stripclust(stripHit1D->cluster());
226  InValMap[stripclust] = tmpflag; //.SetTakenFlag();
227  } else if (stripType == 2) {
228  SiStripRecHit1D::ClusterRef stripclust(stripHit2D->cluster());
229  InValMap[stripclust] = tmpflag; //.SetTakenFlag();
230  } else
231  std::cout << "Unknown type of strip hit" << std::endl;
232  } else {
233  SiPixelClusterRefNew pixclust(pixelhit->cluster());
234  InValMap[pixclust] = tmpflag; //.SetTakenFlag();
235  }
236 
237  if (!firstTakenHit) {
238  firstTakenHit = true;
239  LogDebug("AlignmentPrescaler") << "Index of the track iterator is " << ittrk - Tracks->begin();
240  }
241  ntakenhits++;
242  } //end if take this hit
243  nhit++;
244  } //end loop on RecHits
245  trackflags[ittrk - Tracks->begin()] = ntakenhits;
246  } //end loop on tracks
247 
248  //save the asso map, tracks...
249  // prepare output
250  auto OutVM = std::make_unique<AliClusterValueMap>();
251  *OutVM = InValMap;
252 
253  iEvent.put(std::move(OutVM));
254 
255  auto trkVM = std::make_unique<AliTrackTakenClusterValueMap>();
256  AliTrackTakenClusterValueMap::Filler trkmapfiller(*trkVM);
257  trkmapfiller.insert(Tracks, trackflags.begin(), trackflags.end());
258  trkmapfiller.fill();
259  iEvent.put(std::move(trkVM));
260 
261 } //end produce
RunNumber_t run() const
Definition: EventID.h:38
ClusterRef cluster() const
EventNumber_t event() const
Definition: EventID.h:40
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
def move
Definition: eostools.py:511
bool get(ProductID const &oid, Handle< PROD > &result) const
Definition: Event.h:346
ClusterRef cluster() const
edm::EDGetTokenT< AliClusterValueMap > aliClusterToken_
edm::EDGetTokenT< reco::TrackCollection > tracksToken_
ClusterRef cluster() const
Definition: SiPixelRecHit.h:47
edm::EventID id() const
Definition: EventBase.h:59
tuple cout
Definition: gather_cfg.py:144
Our base class.
Definition: SiPixelRecHit.h:23
#define LogDebug(id)

Member Data Documentation

edm::EDGetTokenT<AliClusterValueMap> AlignmentPrescaler::aliClusterToken_
private

Definition at line 50 of file AlignmentPrescaler.cc.

Referenced by produce().

unsigned int AlignmentPrescaler::detid_
private

Definition at line 61 of file AlignmentPrescaler.cc.

Referenced by beginJob().

TFile* AlignmentPrescaler::fpresc_
private

Definition at line 55 of file AlignmentPrescaler.cc.

Referenced by beginJob(), and endJob().

float AlignmentPrescaler::hitPrescFactor_
private

Definition at line 62 of file AlignmentPrescaler.cc.

Referenced by beginJob(), and produce().

TRandom3* AlignmentPrescaler::myrand_
private

Definition at line 57 of file AlignmentPrescaler.cc.

Referenced by beginJob(), endJob(), and produce().

float AlignmentPrescaler::overlapPrescFactor_
private

Definition at line 62 of file AlignmentPrescaler.cc.

Referenced by beginJob(), and produce().

std::string AlignmentPrescaler::prescfilename_
private

Definition at line 52 of file AlignmentPrescaler.cc.

Referenced by beginJob().

std::string AlignmentPrescaler::presctreename_
private

Definition at line 53 of file AlignmentPrescaler.cc.

Referenced by beginJob().

int AlignmentPrescaler::totnhitspxl_
private

Definition at line 63 of file AlignmentPrescaler.cc.

TTree* AlignmentPrescaler::tpresc_
private

Definition at line 56 of file AlignmentPrescaler.cc.

Referenced by beginJob(), endJob(), and produce().

edm::EDGetTokenT<reco::TrackCollection> AlignmentPrescaler::tracksToken_
private

Definition at line 49 of file AlignmentPrescaler.cc.

Referenced by produce().