#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_, Exception, geometryType, edm::ParameterSet::getParameter(), rndEngine, AlCaHLTBitMon_QueryRunRegistry::string, 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] |
Implements edm::EDProducer.
Definition at line 94 of file DigiSimLinkProducer.cc.
References conf_, geometryType, edm::EventSetup::get(), edm::Event::getByLabel(), edm::EventSetup::getData(), edm::ParameterSet::getParameter(), SimHitSelectorFromDB::getSimHit(), i, edm::ESHandleBase::isValid(), DigiSimLinkAlgorithm::make_link(), edm::ESHandle< T >::product(), edm::Handle< T >::product(), edm::Event::put(), DigiSimLinkAlgorithm::run(), DigiSimLinkAlgorithm::setParticleDataTable(), SimHitMap, SimHitSelectorFromDB_, AlCaHLTBitMon_QueryRunRegistry::string, 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().
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().
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().