74 const std::vector<edm::ParameterSet>& pluginConfigs = config.
getParameter<std::vector<edm::ParameterSet>>(
"plugins");
76 for (
unsigned int iplugin = 0; iplugin<pluginConfigs.size(); ++iplugin)
85 edm::LogInfo(
"TrackingRecHitProducer: ")<<
"adding plugin type '"<<pluginType<<
"' as '"<<pluginName<<
"'"<<std::endl;
90 throw cms::Exception(
"TrackingRecHitAlgorithm plugin not found: ") <<
"plugin type = "<<pluginType<<
"\nconfiguration=\n"<<pluginConfig.
dump();
97 produces<FastTrackerRecHitCollection>();
98 produces<FastTrackerRecHitRefCollection>(
"simHit2RecHitMap");
107 _recHitAlgorithms.clear();
118 algo->beginStream(
id);
139 <<
"SiPixel Templates not loaded correctly from the DB object!" << std::endl;
159 trackerGeomRec.get(trackerGeometryHandle);
160 trackerTopoRec.
get(trackerTopologyHandle);
167 const std::vector<DetId>& detIds = trackerGeometry->
detIds();
168 std::vector<unsigned int> numberOfDetIdsPerAlgorithm(
_recHitAlgorithms.size(),0);
170 for (
const DetId& detId: detIds)
180 numberOfDetIdsPerAlgorithm[ialgo]+=1;
186 throw cms::Exception(
"FastSimulation/TrackingRecHitProducer: DetId not configured! ("+trackerTopology->
print(detId)+
")");
202 algo->beginEvent(event,eventSetup);
210 output_recHits->reserve(simHits->size());
215 std::map<unsigned int,std::vector<std::pair<unsigned int,const PSimHit*>>> simHitsIdPairPerDetId;
216 for (
unsigned int ihit = 0; ihit < simHits->size(); ++ihit)
219 simHitsIdPairPerDetId[simHit->
detUnitId()].push_back(std::make_pair(ihit,simHit));
222 for (
auto simHitsIdPairIt = simHitsIdPairPerDetId.begin(); simHitsIdPairIt != simHitsIdPairPerDetId.end(); ++simHitsIdPairIt)
224 const DetId& detId = simHitsIdPairIt->first;
225 std::map<unsigned int, TrackingRecHitPipe>::const_iterator pipeIt =
_detIdPipes.find(detId);
228 auto& simHitIdPairList = simHitsIdPairIt->second;
233 product = pipe.
produce(product);
235 const std::vector<TrackingRecHitProduct::RecHitToSimHitIdPairs>& recHitToSimHitIdPairsList = product->getRecHitToSimHitIdPairs();
238 for (
unsigned int irecHit = 0; irecHit < recHitToSimHitIdPairsList.size(); ++irecHit)
240 output_recHits->push_back(recHitToSimHitIdPairsList[irecHit].
first);
241 const std::vector<TrackingRecHitProduct::SimHitIdPair>& simHitIdPairList = recHitToSimHitIdPairsList[irecHit].second;
242 for (
unsigned int isimHit = 0; isimHit < simHitIdPairList.size(); ++isimHit)
244 unsigned int simHitId = simHitIdPairList[isimHit].first;
245 if (not (*output_recHitRefs)[simHitId].isNull())
247 throw cms::Exception(
"FastSimulation/TrackingRecHitProducer",
"A PSimHit cannot lead to multiple FastTrackerRecHits");
256 throw cms::Exception(
"FastSimulation/TrackingRecHitProducer",
"A PSimHit carries a DetId which does not belong to the TrackerGeometry: "+std::to_string(detId));
263 algo->endEvent(event,eventSetup);
268 for(
unsigned recHitIndex = 0; recHitIndex < output_recHits->size(); ++recHitIndex)
274 event.put(
std::move(output_recHitRefs),
"simHit2RecHitMap");
T getParameter(std::string const &) const
unsigned long long cacheIdentifier() const
std::string dump(unsigned int indent=0) const
#define DEFINE_FWK_MODULE(type)
void setupDetIdPipes(const edm::EventSetup &eventSetup)
std::map< unsigned int, TrackingRecHitPipe > _detIdPipes
void beginStream(edm::StreamID id) override
~TrackingRecHitProducer() override
void addAlgorithm(TrackingRecHitAlgorithm *algorithm)
edm::EDGetTokenT< std::vector< PSimHit > > _simHitToken
std::string print(DetId detid) const
unsigned long long _trackerGeometryCacheID
edm::Ref< FastTrackerRecHitCollection > FastTrackerRecHitRef
bool passSelection(std::string selectionStr) const
const std::string & getSelectionString() const
std::vector< TrackingRecHitAlgorithm * > _recHitAlgorithms
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
unsigned int size() const
void get(HolderT &iHolder) const
const DetIdContainer & detIds() const override
Returm a vector of all GeomDet DetIds (including those of GeomDetUnits)
void produce(edm::Event &event, const edm::EventSetup &eventSetup) override
def pipe(cmdline, input=None)
std::shared_ptr< TrackingRecHitProduct > TrackingRecHitProductPtr
static bool pushfile(int filenum, std::vector< SiPixelTemplateStore > &pixelTemp, std::string dir="CalibTracker/SiPixelESProducers/data/")
std::vector< FastTrackerRecHitRef > FastTrackerRecHitRefCollection
TrackingRecHitProducer(const edm::ParameterSet &config)
void beginRun(edm::Run const &, const edm::EventSetup &eventSetup) override
void endStream() override
std::vector< SiPixelTemplateStore > _pixelTempStore
unsigned long long _trackerTopologyCacheID
T const * product() const
TrackingRecHitProductPtr produce(TrackingRecHitProductPtr product) const
T get(const Candidate &c)
unsigned int detUnitId() const