#include <DigiSimLinkProducer.h>
Public Member Functions | |
DigiSimLinkProducer (const edm::ParameterSet &conf) | |
virtual void | produce (edm::Event &e, const edm::EventSetup &c) |
virtual | ~DigiSimLinkProducer () |
Private Types | |
typedef std::map< unsigned int, std::vector< std::pair< const PSimHit *, int > >, std::less < unsigned int > > | simhit_map |
typedef simhit_map::iterator | simhit_map_iterator |
typedef std::vector< std::string > | vstring |
Private Attributes | |
std::string | alias |
edm::ParameterSet | conf_ |
std::string | geometryType |
int | numStrips |
CLHEP::HepRandomEngine * | rndEngine |
simhit_map | SimHitMap |
SimHitSelectorFromDB | SimHitSelectorFromDB_ |
std::map< uint32_t, std::vector< int > > | theDetIdList |
DigiSimLinkAlgorithm * | theDigiAlgo |
std::vector< edm::DetSet < StripDigiSimLink > > | theDigiLinkVector |
std::vector< edm::DetSet < SiStripDigi > > | theDigiVector |
std::vector< edm::DetSet < SiStripRawDigi > > | theRawDigiVector |
SiStripFedZeroSuppression * | theSiFEDZeroSuppress |
vstring | trackerContainers |
bool | useConfFromDB |
bool | zeroSuppression |
DigiSimLinkProducer to convert hits to digis
Definition at line 34 of file DigiSimLinkProducer.h.
typedef std::map<unsigned int, std::vector<std::pair<const PSimHit*, int> >,std::less<unsigned int> > DigiSimLinkProducer::simhit_map [private] |
Definition at line 46 of file DigiSimLinkProducer.h.
typedef simhit_map::iterator DigiSimLinkProducer::simhit_map_iterator [private] |
Definition at line 47 of file DigiSimLinkProducer.h.
typedef std::vector<std::string> DigiSimLinkProducer::vstring [private] |
Definition at line 45 of file DigiSimLinkProducer.h.
DigiSimLinkProducer::DigiSimLinkProducer | ( | const edm::ParameterSet & | conf | ) | [explicit] |
Definition at line 63 of file DigiSimLinkProducer.cc.
References alias, conf_, geometryType, rndEngine, theDigiAlgo, trackerContainers, useConfFromDB, and zeroSuppression.
: conf_(conf) { alias = conf.getParameter<std::string>("@module_label"); edm::ParameterSet ParamSet=conf_.getParameter<edm::ParameterSet>("DigiModeList"); produces<edm::DetSetVector<StripDigiSimLink> >().setBranchAlias ( alias + "siStripDigiSimLink"); trackerContainers.clear(); trackerContainers = conf.getParameter<std::vector<std::string> >("ROUList"); geometryType = conf.getParameter<std::string>("GeometryType"); useConfFromDB = conf.getParameter<bool>("TrackerConfigurationFromDB"); edm::Service<edm::RandomNumberGenerator> rng; if ( ! rng.isAvailable()) { throw cms::Exception("Configuration") << "DigiSimLinkProducer requires the RandomNumberGeneratorService\n" "which is not present in the configuration file. You must add the service\n" "in the configuration file or remove the modules that require it."; } rndEngine = &(rng->getEngine()); zeroSuppression = conf_.getParameter<bool>("ZeroSuppression"); theDigiAlgo = new DigiSimLinkAlgorithm(conf_,(*rndEngine)); }
DigiSimLinkProducer::~DigiSimLinkProducer | ( | ) | [virtual] |
Definition at line 89 of file DigiSimLinkProducer.cc.
References theDigiAlgo.
{ delete theDigiAlgo; }
void DigiSimLinkProducer::produce | ( | edm::Event & | e, |
const edm::EventSetup & | c | ||
) | [virtual] |
Definition at line 94 of file DigiSimLinkProducer.cc.
References conf_, geometryType, linker::i, DigiSimLinkAlgorithm::make_link(), DigiSimLinkAlgorithm::run(), DigiSimLinkAlgorithm::setParticleDataTable(), SimHitMap, SimHitSelectorFromDB_, theDetIdList, theDigiAlgo, theDigiLinkVector, theDigiVector, theRawDigiVector, trackerContainers, useConfFromDB, and zeroSuppression.
{ // Step A: Get Inputs edm::ESHandle < ParticleDataTable > pdt; iSetup.getData( pdt ); if(useConfFromDB){ edm::ESHandle<SiStripDetCabling> detCabling; iSetup.get<SiStripDetCablingRcd>().get( detCabling ); detCabling->addConnected(theDetIdList); } edm::Handle<CrossingFrame<PSimHit> > cf_simhit; std::vector<const CrossingFrame<PSimHit> *> cf_simhitvec; for(uint32_t i = 0; i< trackerContainers.size();i++){ iEvent.getByLabel("mix",trackerContainers[i],cf_simhit); cf_simhitvec.push_back(cf_simhit.product()); } std::auto_ptr<MixCollection<PSimHit> > allTrackerHits(new MixCollection<PSimHit>(cf_simhitvec)); //Loop on PSimHit SimHitMap.clear(); //inside SimHitSelectorFromDb add the counter information from the original allhits collection std::vector<std::pair<const PSimHit*,int> > trackerHits(SimHitSelectorFromDB_.getSimHit(allTrackerHits,theDetIdList)); std::vector<std::pair<const PSimHit*,int> >::iterator isim; for (isim=trackerHits.begin() ; isim!= trackerHits.end();isim++) { //make a pair = <*isim, counter> and save also position in the vector for DigiSimLink SimHitMap[((*isim).first)->detUnitId()].push_back(*isim); } edm::ESHandle<TrackerGeometry> pDD; iSetup.get<TrackerDigiGeometryRecord>().get(geometryType,pDD); edm::ESHandle<MagneticField> pSetup; iSetup.get<IdealMagneticFieldRecord>().get(pSetup); //get gain noise pedestal lorentzAngle from ES handle edm::ESHandle<SiStripLorentzAngle> lorentzAngleHandle; edm::ESHandle<SiStripGain> gainHandle; edm::ESHandle<SiStripNoises> noiseHandle; edm::ESHandle<SiStripThreshold> thresholdHandle; edm::ESHandle<SiStripPedestals> pedestalHandle; edm::ESHandle<SiStripBadStrip> deadChannelHandle; std::string LAname = conf_.getParameter<std::string>("LorentzAngle"); iSetup.get<SiStripLorentzAngleSimRcd>().get(LAname,lorentzAngleHandle); std::string gainLabel = conf_.getParameter<std::string>("Gain"); iSetup.get<SiStripGainSimRcd>().get(gainLabel,gainHandle); iSetup.get<SiStripNoisesRcd>().get(noiseHandle); iSetup.get<SiStripThresholdRcd>().get(thresholdHandle); iSetup.get<SiStripPedestalsRcd>().get(pedestalHandle); iSetup.get<SiStripBadChannelRcd>().get(deadChannelHandle); //Retrieve tracker topology from geometry edm::ESHandle<TrackerTopology> tTopoHand; iSetup.get<IdealGeometryRecord>().get(tTopoHand); const TrackerTopology *tTopo=tTopoHand.product(); theDigiAlgo->setParticleDataTable(&*pdt); // Step B: LOOP on StripGeomDetUnit theDigiVector.reserve(10000); theDigiVector.clear(); theDigiLinkVector.reserve(10000); theDigiLinkVector.clear(); for(TrackingGeometry::DetUnitContainer::const_iterator iu = pDD->detUnits().begin(); iu != pDD->detUnits().end(); iu ++){ if(useConfFromDB){ //apply the cable map _before_ digitization: consider only the detis that are connected if(theDetIdList.find((*iu)->geographicalId().rawId())==theDetIdList.end()) continue; } GlobalVector bfield=pSetup->inTesla((*iu)->surface().position()); StripGeomDetUnit* sgd = dynamic_cast<StripGeomDetUnit*>((*iu)); if (sgd != 0){ edm::DetSet<SiStripDigi> collectorZS((*iu)->geographicalId().rawId()); edm::DetSet<SiStripRawDigi> collectorRaw((*iu)->geographicalId().rawId()); edm::DetSet<StripDigiSimLink> linkcollector((*iu)->geographicalId().rawId()); float langle = (lorentzAngleHandle.isValid()) ? lorentzAngleHandle->getLorentzAngle((*iu)->geographicalId().rawId()) : 0.; theDigiAlgo->run(collectorZS,collectorRaw,SimHitMap[(*iu)->geographicalId().rawId()],sgd,bfield,langle, gainHandle,thresholdHandle,noiseHandle,pedestalHandle, deadChannelHandle, tTopo); if(zeroSuppression){ if(collectorZS.data.size()>0){ theDigiVector.push_back(collectorZS); if(SimHitMap[(*iu)->geographicalId().rawId()].size()>0){ linkcollector.data = theDigiAlgo->make_link(); if(linkcollector.data.size()>0) theDigiLinkVector.push_back(linkcollector); } } }else{ if(collectorRaw.data.size()>0){ theRawDigiVector.push_back(collectorRaw); if(SimHitMap[(*iu)->geographicalId().rawId()].size()>0){ linkcollector.data = theDigiAlgo->make_link(); if(linkcollector.data.size()>0) theDigiLinkVector.push_back(linkcollector); } } } } } // Step C: create output collection std::auto_ptr<edm::DetSetVector<StripDigiSimLink> > outputlink(new edm::DetSetVector<StripDigiSimLink>(theDigiLinkVector)); // Step D: write output to file iEvent.put(outputlink); }
std::string DigiSimLinkProducer::alias [private] |
Definition at line 62 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer().
edm::ParameterSet DigiSimLinkProducer::conf_ [private] |
Definition at line 56 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer(), and produce().
std::string DigiSimLinkProducer::geometryType [private] |
Definition at line 61 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer(), and produce().
int DigiSimLinkProducer::numStrips [private] |
Definition at line 59 of file DigiSimLinkProducer.h.
CLHEP::HepRandomEngine* DigiSimLinkProducer::rndEngine [private] |
Definition at line 60 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer().
simhit_map DigiSimLinkProducer::SimHitMap [private] |
Definition at line 58 of file DigiSimLinkProducer.h.
Referenced by produce().
SimHitSelectorFromDB DigiSimLinkProducer::SimHitSelectorFromDB_ [private] |
Definition at line 52 of file DigiSimLinkProducer.h.
Referenced by produce().
std::map<uint32_t, std::vector<int> > DigiSimLinkProducer::theDetIdList [private] |
Definition at line 51 of file DigiSimLinkProducer.h.
Referenced by produce().
Definition at line 49 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer(), produce(), and ~DigiSimLinkProducer().
std::vector<edm::DetSet<StripDigiSimLink> > DigiSimLinkProducer::theDigiLinkVector [private] |
Definition at line 55 of file DigiSimLinkProducer.h.
Referenced by produce().
std::vector<edm::DetSet<SiStripDigi> > DigiSimLinkProducer::theDigiVector [private] |
Definition at line 53 of file DigiSimLinkProducer.h.
Referenced by produce().
std::vector<edm::DetSet<SiStripRawDigi> > DigiSimLinkProducer::theRawDigiVector [private] |
Definition at line 54 of file DigiSimLinkProducer.h.
Referenced by produce().
SiStripFedZeroSuppression* DigiSimLinkProducer::theSiFEDZeroSuppress [private] |
Definition at line 50 of file DigiSimLinkProducer.h.
Definition at line 57 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer(), and produce().
bool DigiSimLinkProducer::useConfFromDB [private] |
Definition at line 64 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer(), and produce().
bool DigiSimLinkProducer::zeroSuppression [private] |
Definition at line 63 of file DigiSimLinkProducer.h.
Referenced by DigiSimLinkProducer(), and produce().