CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
TrackingRecHitProducer Class Reference
Inheritance diagram for TrackingRecHitProducer:
edm::stream::EDProducer<>

Public Member Functions

void beginRun (edm::Run const &, const edm::EventSetup &eventSetup) override
 
void beginStream (edm::StreamID id) override
 
void endStream () override
 
void produce (edm::Event &event, const edm::EventSetup &eventSetup) override
 
 TrackingRecHitProducer (const edm::ParameterSet &config)
 
 ~TrackingRecHitProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
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
 

Private Member Functions

void setupDetIdPipes (const edm::EventSetup &eventSetup)
 

Private Attributes

std::map< unsigned int, TrackingRecHitPipe_detIdPipes
 
std::vector< SiPixelTemplateStore_pixelTempStore
 
std::vector< std::unique_ptr< TrackingRecHitAlgorithm > > _recHitAlgorithms
 
edm::EDGetTokenT< std::vector< PSimHit > > _simHitToken
 
unsigned long long _trackerGeometryCacheID = 0
 
unsigned long long _trackerTopologyCacheID = 0
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 44 of file TrackingRecHitProducer.cc.

Constructor & Destructor Documentation

◆ TrackingRecHitProducer()

TrackingRecHitProducer::TrackingRecHitProducer ( const edm::ParameterSet config)

Definition at line 68 of file TrackingRecHitProducer.cc.

68  {
69  edm::ConsumesCollector consumeCollector = consumesCollector();
70  const std::vector<edm::ParameterSet>& pluginConfigs = config.getParameter<std::vector<edm::ParameterSet>>("plugins");
71 
72  for (unsigned int iplugin = 0; iplugin < pluginConfigs.size(); ++iplugin) {
73  const edm::ParameterSet& pluginConfig = pluginConfigs[iplugin];
74  const std::string pluginType = pluginConfig.getParameter<std::string>("type");
75  const std::string pluginName = pluginConfig.getParameter<std::string>("name");
76 
77  std::unique_ptr<TrackingRecHitAlgorithm> recHitAlgorithm{
78  TrackingRecHitAlgorithmFactory::get()->tryToCreate(pluginType, pluginName, pluginConfig, consumeCollector)};
79  if (recHitAlgorithm) {
80  edm::LogInfo("TrackingRecHitProducer: ")
81  << "adding plugin type '" << pluginType << "' as '" << pluginName << "'" << std::endl;
82  _recHitAlgorithms.push_back(std::move(recHitAlgorithm));
83  } else {
84  throw cms::Exception("TrackingRecHitAlgorithm plugin not found: ")
85  << "plugin type = " << pluginType << "\nconfiguration=\n"
86  << pluginConfig.dump();
87  }
88  }
89 
90  edm::InputTag simHitTag = config.getParameter<edm::InputTag>("simHits");
91  _simHitToken = consumes<std::vector<PSimHit>>(simHitTag);
92 
93  produces<FastTrackerRecHitCollection>();
94  produces<FastTrackerRecHitRefCollection>("simHit2RecHitMap");
95 }

References _recHitAlgorithms, _simHitToken, Exception, get, eostools::move(), TrackingRecHitProducer_cfi::pluginConfig, validationMuonRPCDigis_cfi::simHitTag, and AlCaHLTBitMon_QueryRunRegistry::string.

◆ ~TrackingRecHitProducer()

TrackingRecHitProducer::~TrackingRecHitProducer ( )
override

Definition at line 97 of file TrackingRecHitProducer.cc.

97 {}

Member Function Documentation

◆ beginRun()

void TrackingRecHitProducer::beginRun ( edm::Run const &  run,
const edm::EventSetup eventSetup 
)
override

Definition at line 105 of file TrackingRecHitProducer.cc.

105  {
106  //--- Since all pixel algorithms (of which there could be several) use the same
107  // templateStore, filled out from the same DB Object, we need to it centrally
108  // (namely here), and then distribute it to the algorithms. Note that only
109  // the pixel algorithms implement beginRun(), for the strip tracker this defaults
110  // to a no-op.
111 
113  eventSetup.get<SiPixelTemplateDBObjectESProducerRcd>().get(templateDBobject);
114  const SiPixelTemplateDBObject* pixelTemplateDBObject = templateDBobject.product();
115 
116  //--- Now that we have the DB object, load the correct templates from the DB.
117  // (They are needed for data and full sim MC, so in a production FastSim
118  // run, everything should already be in the DB.)
119  if (!SiPixelTemplate::pushfile(*pixelTemplateDBObject, _pixelTempStore)) {
120  throw cms::Exception("TrackingRecHitProducer:")
121  << "SiPixel Templates not loaded correctly from the DB object!" << std::endl;
122  }
123 
124  for (auto& algo : _recHitAlgorithms) {
125  algo->beginRun(run, eventSetup, pixelTemplateDBObject, _pixelTempStore);
126  }
127 }

References _pixelTempStore, _recHitAlgorithms, Exception, edm::EventSetup::get(), get, edm::ESHandle< T >::product(), SiPixelTemplate::pushfile(), and writedatasetfile::run.

◆ beginStream()

void TrackingRecHitProducer::beginStream ( edm::StreamID  id)
override

Definition at line 99 of file TrackingRecHitProducer.cc.

99  {
100  for (auto& algo : _recHitAlgorithms) {
101  algo->beginStream(id);
102  }
103 }

References _recHitAlgorithms.

◆ endStream()

void TrackingRecHitProducer::endStream ( )
override

Definition at line 251 of file TrackingRecHitProducer.cc.

251  {
252  for (auto& algo : _recHitAlgorithms) {
253  algo->endStream();
254  }
255 }

References _recHitAlgorithms.

◆ produce()

void TrackingRecHitProducer::produce ( edm::Event event,
const edm::EventSetup eventSetup 
)
override

Definition at line 169 of file TrackingRecHitProducer.cc.

169  {
170  //resetup pipes if new iov
171  setupDetIdPipes(eventSetup);
172  //begin event
173  for (auto& algo : _recHitAlgorithms) {
174  algo->beginEvent(event, eventSetup);
175  }
176 
177  //build DetId -> PSimHit map
179  event.getByToken(_simHitToken, simHits);
180 
181  auto output_recHits = std::make_unique<FastTrackerRecHitCollection>();
182  output_recHits->reserve(simHits->size());
183 
184  edm::RefProd<FastTrackerRecHitCollection> output_recHits_refProd =
185  event.getRefBeforePut<FastTrackerRecHitCollection>();
186  auto output_recHitRefs = std::make_unique<FastTrackerRecHitRefCollection>(simHits->size(), FastTrackerRecHitRef());
187 
188  std::map<unsigned int, std::vector<std::pair<unsigned int, const PSimHit*>>> simHitsIdPairPerDetId;
189  for (unsigned int ihit = 0; ihit < simHits->size(); ++ihit) {
190  const PSimHit* simHit = &(*simHits)[ihit];
191  simHitsIdPairPerDetId[simHit->detUnitId()].push_back(std::make_pair(ihit, simHit));
192  }
193 
194  for (auto simHitsIdPairIt = simHitsIdPairPerDetId.begin(); simHitsIdPairIt != simHitsIdPairPerDetId.end();
195  ++simHitsIdPairIt) {
196  const DetId& detId = simHitsIdPairIt->first;
197  std::map<unsigned int, TrackingRecHitPipe>::const_iterator pipeIt = _detIdPipes.find(detId);
198  if (pipeIt != _detIdPipes.cend()) {
199  auto& simHitIdPairList = simHitsIdPairIt->second;
200  const TrackingRecHitPipe& pipe = pipeIt->second;
201 
202  TrackingRecHitProductPtr product = std::make_shared<TrackingRecHitProduct>(detId, simHitIdPairList);
203 
204  product = pipe.produce(product);
205 
206  const std::vector<TrackingRecHitProduct::RecHitToSimHitIdPairs>& recHitToSimHitIdPairsList =
207  product->getRecHitToSimHitIdPairs();
208 
209  for (unsigned int irecHit = 0; irecHit < recHitToSimHitIdPairsList.size(); ++irecHit) {
210  output_recHits->push_back(recHitToSimHitIdPairsList[irecHit].first);
211  const std::vector<TrackingRecHitProduct::SimHitIdPair>& simHitIdPairList =
212  recHitToSimHitIdPairsList[irecHit].second;
213  double energyLoss_tot = 0; //
214  for (unsigned int isimHit = 0; isimHit < simHitIdPairList.size(); ++isimHit) {
215  unsigned int simHitId = simHitIdPairList[isimHit].first;
216  const PSimHit* simHit = simHitIdPairList[isimHit].second;
217  energyLoss_tot +=
218  simHit
219  ->energyLoss(); //energy loss of sim hit in GeV std::cout << "energyLoss_tot" << energyLoss_tot << std::endl;
220  if (not(*output_recHitRefs)[simHitId].isNull()) {
221  throw cms::Exception("FastSimulation/TrackingRecHitProducer",
222  "A PSimHit cannot lead to multiple FastTrackerRecHits");
223  }
224  (*output_recHitRefs)[simHitId] = FastTrackerRecHitRef(output_recHits_refProd, output_recHits->size() - 1);
225  }
226  static_cast<FastSingleTrackerRecHit&>(output_recHits->back()).setEnergyLoss(energyLoss_tot);
227  }
228  } else {
229  //there should be at least an empty pipe for each DetId
230  throw cms::Exception(
231  "FastSimulation/TrackingRecHitProducer",
232  "A PSimHit carries a DetId which does not belong to the TrackerGeometry: " + std::to_string(detId));
233  }
234  }
235 
236  //end event
237  for (auto& algo : _recHitAlgorithms) {
238  algo->endEvent(event, eventSetup);
239  }
240 
241  // note from lukas:
242  // all rechits need a unique id numbers
243  for (unsigned recHitIndex = 0; recHitIndex < output_recHits->size(); ++recHitIndex) {
244  ((FastSingleTrackerRecHit*)&(*output_recHits)[recHitIndex])->setId(recHitIndex);
245  }
246 
247  event.put(std::move(output_recHits));
248  event.put(std::move(output_recHitRefs), "simHit2RecHitMap");
249 }

References _detIdPipes, _recHitAlgorithms, _simHitToken, Exception, first, eostools::move(), setupDetIdPipes(), rpcPointValidation_cfi::simHit, FastTrackerRecHitCombiner_cfi::simHits, and edm::OwnVector< T, P >::size().

◆ setupDetIdPipes()

void TrackingRecHitProducer::setupDetIdPipes ( const edm::EventSetup eventSetup)
private

Definition at line 129 of file TrackingRecHitProducer.cc.

129  {
130  auto const& trackerGeomRec = eventSetup.get<TrackerDigiGeometryRecord>();
131  auto const& trackerTopoRec = eventSetup.get<TrackerTopologyRcd>();
132  if (trackerGeomRec.cacheIdentifier() != _trackerGeometryCacheID or
133  trackerTopoRec.cacheIdentifier() != _trackerTopologyCacheID) {
134  _trackerGeometryCacheID = trackerGeomRec.cacheIdentifier();
135  _trackerTopologyCacheID = trackerTopoRec.cacheIdentifier();
136  edm::ESHandle<TrackerGeometry> trackerGeometryHandle;
137  edm::ESHandle<TrackerTopology> trackerTopologyHandle;
138  trackerGeomRec.get(trackerGeometryHandle);
139  trackerTopoRec.get(trackerTopologyHandle);
140  const TrackerGeometry* trackerGeometry = trackerGeometryHandle.product();
141  const TrackerTopology* trackerTopology = trackerTopologyHandle.product();
142 
143  _detIdPipes.clear();
144 
145  //build pipes for all detIds
146  const std::vector<DetId>& detIds = trackerGeometry->detIds();
147  std::vector<unsigned int> numberOfDetIdsPerAlgorithm(_recHitAlgorithms.size(), 0);
148 
149  for (const DetId& detId : detIds) {
150  TrackerDetIdSelector selector(detId, *trackerTopology);
151 
153  for (unsigned int ialgo = 0; ialgo < _recHitAlgorithms.size(); ++ialgo) {
154  auto& algo = _recHitAlgorithms[ialgo];
155  if (selector.passSelection(algo->getSelectionString())) {
156  numberOfDetIdsPerAlgorithm[ialgo] += 1;
157  pipe.addAlgorithm(algo.get());
158  }
159  }
160  if (pipe.size() == 0) {
161  throw cms::Exception("FastSimulation/TrackingRecHitProducer: DetId not configured! (" +
162  trackerTopology->print(detId) + ")");
163  }
164  _detIdPipes[detId.rawId()] = pipe;
165  }
166  }
167 }

References _detIdPipes, _recHitAlgorithms, _trackerGeometryCacheID, _trackerTopologyCacheID, edm::eventsetup::EventSetupRecord::cacheIdentifier(), TrackerGeometry::detIds(), Exception, edm::EventSetup::get(), edm::eventsetup::DependentRecordImplementation< RecordT, ListT >::get(), or, TrackerDetIdSelector::passSelection(), pipe::pipe(), TrackerTopology::print(), and edm::ESHandle< T >::product().

Referenced by produce().

Member Data Documentation

◆ _detIdPipes

std::map<unsigned int, TrackingRecHitPipe> TrackingRecHitProducer::_detIdPipes
private

Definition at line 50 of file TrackingRecHitProducer.cc.

Referenced by produce(), and setupDetIdPipes().

◆ _pixelTempStore

std::vector<SiPixelTemplateStore> TrackingRecHitProducer::_pixelTempStore
private

Definition at line 52 of file TrackingRecHitProducer.cc.

Referenced by beginRun().

◆ _recHitAlgorithms

std::vector<std::unique_ptr<TrackingRecHitAlgorithm> > TrackingRecHitProducer::_recHitAlgorithms
private

◆ _simHitToken

edm::EDGetTokenT<std::vector<PSimHit> > TrackingRecHitProducer::_simHitToken
private

Definition at line 46 of file TrackingRecHitProducer.cc.

Referenced by produce(), and TrackingRecHitProducer().

◆ _trackerGeometryCacheID

unsigned long long TrackingRecHitProducer::_trackerGeometryCacheID = 0
private

Definition at line 48 of file TrackingRecHitProducer.cc.

Referenced by setupDetIdPipes().

◆ _trackerTopologyCacheID

unsigned long long TrackingRecHitProducer::_trackerTopologyCacheID = 0
private

Definition at line 49 of file TrackingRecHitProducer.cc.

Referenced by setupDetIdPipes().

edm::RefProd
Definition: EDProductfwd.h:25
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
validationMuonRPCDigis_cfi.simHitTag
simHitTag
Definition: validationMuonRPCDigis_cfi.py:9
SiPixelTemplate::pushfile
static bool pushfile(int filenum, std::vector< SiPixelTemplateStore > &pixelTemp, std::string dir="CalibTracker/SiPixelESProducers/data/")
Definition: SiPixelTemplate.cc:130
TrackerTopology
Definition: TrackerTopology.h:16
FastTrackerRecHitCombiner_cfi.simHits
simHits
Definition: FastTrackerRecHitCombiner_cfi.py:5
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
TrackingRecHitProducer::_trackerTopologyCacheID
unsigned long long _trackerTopologyCacheID
Definition: TrackingRecHitProducer.cc:49
edm::Handle
Definition: AssociativeIterator.h:50
config
Definition: config.py:1
DetId
Definition: DetId.h:17
cmsdt::algo
algo
Definition: constants.h:171
TrackingRecHitPipe
Definition: TrackingRecHitPipe.h:9
TrackingRecHitProductPtr
std::shared_ptr< TrackingRecHitProduct > TrackingRecHitProductPtr
Definition: TrackingRecHitProduct.h:47
TrackingRecHitProducer::_recHitAlgorithms
std::vector< std::unique_ptr< TrackingRecHitAlgorithm > > _recHitAlgorithms
Definition: TrackingRecHitProducer.cc:47
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
rpcPointValidation_cfi.simHit
simHit
Definition: rpcPointValidation_cfi.py:24
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:16
TrackerDetIdSelector
Definition: TrackerDetIdSelector.h:94
FastTrackerRecHitRef
edm::Ref< FastTrackerRecHitCollection > FastTrackerRecHitRef
Definition: FastTrackerRecHitCollection.h:9
edm::ESHandle
Definition: DTSurvey.h:22
TrackerTopology::print
std::string print(DetId detid) const
Definition: TrackerTopology.cc:252
edm::eventsetup::DependentRecordImplementation::get
ProductT const & get(ESGetToken< ProductT, DepRecordT > const &iToken) const
Definition: DependentRecordImplementation.h:109
first
auto first
Definition: CAHitNtupletGeneratorKernelsImpl.h:125
pipe
Definition: pipe.py:1
edm::ParameterSet
Definition: ParameterSet.h:47
FastSingleTrackerRecHit
Definition: FastSingleTrackerRecHit.h:7
SiPixelTemplateDBObject
Definition: SiPixelTemplateDBObject.h:16
TrackingRecHitProducer::setupDetIdPipes
void setupDetIdPipes(const edm::EventSetup &eventSetup)
Definition: TrackingRecHitProducer.cc:129
TrackingRecHitProducer::_pixelTempStore
std::vector< SiPixelTemplateStore > _pixelTempStore
Definition: TrackingRecHitProducer.cc:52
get
#define get
AlCaHLTBitMon_QueryRunRegistry.string
string string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SiPixelTemplateDBObjectESProducerRcd
Definition: SiPixelTemplateDBObjectESProducerRcd.h:11
TrackingRecHitProducer::_detIdPipes
std::map< unsigned int, TrackingRecHitPipe > _detIdPipes
Definition: TrackingRecHitProducer.cc:50
TrackingRecHitProducer_cfi.pluginConfig
pluginConfig
Definition: TrackingRecHitProducer_cfi.py:65
eostools.move
def move(src, dest)
Definition: eostools.py:511
writedatasetfile.run
run
Definition: writedatasetfile.py:27
TrackingRecHitProducer::_trackerGeometryCacheID
unsigned long long _trackerGeometryCacheID
Definition: TrackingRecHitProducer.cc:48
Exception
Definition: hltDiff.cc:245
or
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
Definition: Activities.doc:12
TrackerGeometry::detIds
const DetIdContainer & detIds() const override
Returm a vector of all GeomDet DetIds (including those of GeomDetUnits)
Definition: TrackerGeometry.h:64
TrackingRecHitProducer::_simHitToken
edm::EDGetTokenT< std::vector< PSimHit > > _simHitToken
Definition: TrackingRecHitProducer.cc:46
edm::eventsetup::EventSetupRecord::cacheIdentifier
unsigned long long cacheIdentifier() const
Definition: EventSetupRecord.h:187
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
pipe.pipe
def pipe(cmdline, input=None)
Definition: pipe.py:5
PSimHit
Definition: PSimHit.h:15
event
Definition: event.py:1
edm::InputTag
Definition: InputTag.h:15
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
edm::OwnVector
Definition: OwnVector.h:24
TrackerGeometry
Definition: TrackerGeometry.h:14