CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Types | Private Member Functions | Private Attributes
cms::SiPixelDigitizer Class Reference

#include <SiPixelDigitizer.h>

Inheritance diagram for cms::SiPixelDigitizer:
DigiAccumulatorMixMod

Public Member Functions

virtual void accumulate (edm::Event const &e, edm::EventSetup const &c) override
 
virtual void accumulate (PileUpEventPrincipal const &e, edm::EventSetup const &c, edm::StreamID const &) override
 
virtual void beginJob ()
 
virtual void finalizeEvent (edm::Event &e, edm::EventSetup const &c) override
 
virtual PileupMixingContentgetEventPileupInfo ()
 
virtual void initializeEvent (edm::Event const &e, edm::EventSetup const &c) override
 
 SiPixelDigitizer (const edm::ParameterSet &conf, edm::one::EDProducerBase &mixMod, edm::ConsumesCollector &iC)
 
virtual void StorePileupInformation (std::vector< int > &numInteractionList, std::vector< int > &bunchCrossingList, std::vector< float > &TrueInteractionList)
 
virtual ~SiPixelDigitizer ()
 
- Public Member Functions inherited from DigiAccumulatorMixMod
virtual void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup)
 
virtual void beginRun (edm::Run const &run, edm::EventSetup const &setup)
 
 DigiAccumulatorMixMod ()
 
virtual void endLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup)
 
virtual void endRun (edm::Run const &run, edm::EventSetup const &setup)
 
virtual void finalizeBunchCrossing (edm::Event &event, edm::EventSetup const &setup, int bunchCrossing)
 
virtual void initializeBunchCrossing (edm::Event const &event, edm::EventSetup const &setup, int bunchCrossing)
 
virtual ~DigiAccumulatorMixMod ()
 

Private Types

typedef std::vector< std::string > vstring
 

Private Member Functions

void accumulatePixelHits (edm::Handle< std::vector< PSimHit > >, CLHEP::HepRandomEngine *)
 
CLHEP::HepRandomEngine * randomEngine (edm::StreamID const &streamID)
 

Private Attributes

std::unique_ptr
< SiPixelDigitizerAlgorithm
_pixeldigialgo
 
std::map< unsigned int,
PixelGeomDetUnit const * > 
detectorUnits
 
bool first
 
const std::string geometryType
 
const std::string hitsProducer
 
const int NumberOfEndcapDisks
 
edm::ESHandle< TrackerGeometrypDD
 
PileupMixingContentPileupInfo_
 
const bool pilotBlades
 
edm::ESHandle< MagneticFieldpSetup
 
std::vector
< CLHEP::HepRandomEngine * > 
randomEngines_
 
const vstring trackerContainers
 

Detailed Description

Definition at line 48 of file SiPixelDigitizer.h.

Member Typedef Documentation

typedef std::vector<std::string> cms::SiPixelDigitizer::vstring
private

Definition at line 76 of file SiPixelDigitizer.h.

Constructor & Destructor Documentation

SiPixelDigitizer::SiPixelDigitizer ( const edm::ParameterSet conf,
edm::one::EDProducerBase mixMod,
edm::ConsumesCollector iC 
)
explicit

Definition at line 95 of file SiPixelDigitizer.cc.

References _pixeldigialgo, edm::ConsumesCollector::consumes(), edm::hlt::Exception, hitsProducer, edm::Service< T >::isAvailable(), AlCaHLTBitMon_QueryRunRegistry::string, GlobalPosition_Frontier_DevDB_cff::tag, and trackerContainers.

95  :
96  first(true),
98  hitsProducer(iConfig.getParameter<std::string>("hitsProducer")),
99  trackerContainers(iConfig.getParameter<std::vector<std::string> >("ROUList")),
100  geometryType(iConfig.getParameter<std::string>("GeometryType")),
101  pilotBlades(iConfig.exists("enablePilotBlades")?iConfig.getParameter<bool>("enablePilotBlades"):false),
102  NumberOfEndcapDisks(iConfig.exists("NumPixelEndcap")?iConfig.getParameter<int>("NumPixelEndcap"):2)
103  {
104  edm::LogInfo ("PixelDigitizer ") <<"Enter the Pixel Digitizer";
105 
106  const std::string alias ("simSiPixelDigis");
107 
108  mixMod.produces<edm::DetSetVector<PixelDigi> >().setBranchAlias(alias);
109  mixMod.produces<edm::DetSetVector<PixelDigiSimLink> >().setBranchAlias(alias + "siPixelDigiSimLink");
110  for(auto const& trackerContainer : trackerContainers) {
111  edm::InputTag tag(hitsProducer, trackerContainer);
112  iC.consumes<std::vector<PSimHit> >(edm::InputTag(hitsProducer, trackerContainer));
113  }
115  if ( ! rng.isAvailable()) {
116  throw cms::Exception("Configuration")
117  << "SiPixelDigitizer requires the RandomNumberGeneratorService\n"
118  "which is not present in the configuration file. You must add the service\n"
119  "in the configuration file or remove the modules that require it.";
120  }
121 
122  _pixeldigialgo.reset(new SiPixelDigitizerAlgorithm(iConfig));
123  }
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const std::string hitsProducer
bool isAvailable() const
Definition: Service.h:46
std::unique_ptr< SiPixelDigitizerAlgorithm > _pixeldigialgo
const std::string geometryType
const vstring trackerContainers
SiPixelDigitizer::~SiPixelDigitizer ( )
virtual

Definition at line 125 of file SiPixelDigitizer.cc.

125  {
126  edm::LogInfo ("PixelDigitizer ") <<"Destruct the Pixel Digitizer";
127  }

Member Function Documentation

void SiPixelDigitizer::accumulate ( edm::Event const &  e,
edm::EventSetup const &  c 
)
overridevirtual

Implements DigiAccumulatorMixMod.

Definition at line 194 of file SiPixelDigitizer.cc.

References accumulatePixelHits(), edm::Event::getByLabel(), hitsProducer, i, randomEngine(), trackerHits::simHits, edm::Event::streamID(), GlobalPosition_Frontier_DevDB_cff::tag, and trackerContainers.

194  {
195  // Step A: Get Inputs
196  for(vstring::const_iterator i = trackerContainers.begin(), iEnd = trackerContainers.end(); i != iEnd; ++i) {
199 
200  iEvent.getByLabel(tag, simHits);
201  accumulatePixelHits(simHits, randomEngine(iEvent.streamID()));
202  }
203  }
int i
Definition: DBlmapReader.cc:9
CLHEP::HepRandomEngine * randomEngine(edm::StreamID const &streamID)
const std::string hitsProducer
int iEvent
Definition: GenABIO.cc:230
void accumulatePixelHits(edm::Handle< std::vector< PSimHit > >, CLHEP::HepRandomEngine *)
tuple simHits
Definition: trackerHits.py:16
const vstring trackerContainers
void SiPixelDigitizer::accumulate ( PileUpEventPrincipal const &  e,
edm::EventSetup const &  c,
edm::StreamID const &  streamID 
)
overridevirtual

Implements DigiAccumulatorMixMod.

Definition at line 206 of file SiPixelDigitizer.cc.

References accumulatePixelHits(), PileUpEventPrincipal::getByLabel(), hitsProducer, i, randomEngine(), trackerHits::simHits, GlobalPosition_Frontier_DevDB_cff::tag, and trackerContainers.

206  {
207  // Step A: Get Inputs
208  for(vstring::const_iterator i = trackerContainers.begin(), iEnd = trackerContainers.end(); i != iEnd; ++i) {
211 
212  iEvent.getByLabel(tag, simHits);
213  accumulatePixelHits(simHits, randomEngine(streamID));
214  }
215  }
int i
Definition: DBlmapReader.cc:9
CLHEP::HepRandomEngine * randomEngine(edm::StreamID const &streamID)
const std::string hitsProducer
int iEvent
Definition: GenABIO.cc:230
void accumulatePixelHits(edm::Handle< std::vector< PSimHit > >, CLHEP::HepRandomEngine *)
tuple simHits
Definition: trackerHits.py:16
const vstring trackerContainers
void SiPixelDigitizer::accumulatePixelHits ( edm::Handle< std::vector< PSimHit > >  hSimHits,
CLHEP::HepRandomEngine *  engine 
)
private

Definition at line 135 of file SiPixelDigitizer.cc.

References _pixeldigialgo, detectorUnits, LogDebug, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, pSetup, trackerHits::simHits, and DetId::subdetId().

Referenced by accumulate().

135  {
136  if(hSimHits.isValid()) {
137  std::set<unsigned int> detIds;
138  std::vector<PSimHit> const& simHits = *hSimHits.product();
139  for(std::vector<PSimHit>::const_iterator it = simHits.begin(), itEnd = simHits.end(); it != itEnd; ++it) {
140  unsigned int detId = (*it).detUnitId();
141  if(detIds.insert(detId).second) {
142  // The insert succeeded, so this detector element has not yet been processed.
143  unsigned int isub = DetId(detId).subdetId();
145  std::map<unsigned int, PixelGeomDetUnit const *>::iterator itDet = detectorUnits.find(detId);
146  if (itDet == detectorUnits.end()) continue;
147  auto pixdet = itDet->second;
148  //access to magnetic field in global coordinates
149  GlobalVector bfield = pSetup->inTesla(pixdet->surface().position());
150  LogDebug ("PixelDigitizer ") << "B-field(T) at " << pixdet->surface().position() << "(cm): "
151  << pSetup->inTesla(pixdet->surface().position());
152  _pixeldigialgo->accumulateSimHits(it, itEnd, pixdet, bfield, engine);
153  }
154  }
155  }
156  }
157  }
#define LogDebug(id)
std::map< unsigned int, PixelGeomDetUnit const * > detectorUnits
edm::ESHandle< MagneticField > pSetup
bool isValid() const
Definition: HandleBase.h:76
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
std::unique_ptr< SiPixelDigitizerAlgorithm > _pixeldigialgo
Definition: DetId.h:18
tuple simHits
Definition: trackerHits.py:16
T const * product() const
Definition: Handle.h:81
virtual void cms::SiPixelDigitizer::beginJob ( void  )
inlinevirtual

Definition at line 60 of file SiPixelDigitizer.h.

60 {}
void SiPixelDigitizer::finalizeEvent ( edm::Event e,
edm::EventSetup const &  c 
)
overridevirtual

Implements DigiAccumulatorMixMod.

Definition at line 219 of file SiPixelDigitizer.cc.

References _pixeldigialgo, edm::EventSetup::get(), edm::RandomNumberGenerator::getEngine(), getEventPileupInfo(), convertSQLitetoXML_cfg::output, pDD, PileupInfo_, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, edm::ESHandle< class >::product(), edm::Event::put(), edm::Event::streamID(), and DetId::subdetId().

219  {
220 
222  CLHEP::HepRandomEngine* engine = &rng->getEngine(iEvent.streamID());
223 
225  iSetup.get<IdealGeometryRecord>().get(tTopoHand);
226  const TrackerTopology *tTopo=tTopoHand.product();
227 
228  std::vector<edm::DetSet<PixelDigi> > theDigiVector;
229  std::vector<edm::DetSet<PixelDigiSimLink> > theDigiLinkVector;
230 
232  _pixeldigialgo->calculateInstlumiFactor(PileupInfo_);
233 
234  for(TrackingGeometry::DetUnitContainer::const_iterator iu = pDD->detUnits().begin(); iu != pDD->detUnits().end(); iu ++){
235  DetId idet=DetId((*iu)->geographicalId().rawId());
236  unsigned int isub=idet.subdetId();
237 
239 
240  //
241 
242  edm::DetSet<PixelDigi> collector((*iu)->geographicalId().rawId());
243  edm::DetSet<PixelDigiSimLink> linkcollector((*iu)->geographicalId().rawId());
244 
245 
246  _pixeldigialgo->digitize(dynamic_cast<const PixelGeomDetUnit*>((*iu)),
247  collector.data,
248  linkcollector.data,
249  tTopo,
250  engine);
251  if(collector.data.size() > 0) {
252  theDigiVector.push_back(std::move(collector));
253  }
254  if(linkcollector.data.size() > 0) {
255  theDigiLinkVector.push_back(std::move(linkcollector));
256  }
257  }
258  }
259 
260  // Step C: create collection with the cache vector of DetSet
261  std::auto_ptr<edm::DetSetVector<PixelDigi> >
262  output(new edm::DetSetVector<PixelDigi>(theDigiVector) );
263  std::auto_ptr<edm::DetSetVector<PixelDigiSimLink> >
264  outputlink(new edm::DetSetVector<PixelDigiSimLink>(theDigiLinkVector) );
265 
266  // Step D: write output to file
267  iEvent.put(output);
268  iEvent.put(outputlink);
269  }
int iEvent
Definition: GenABIO.cc:230
edm::ESHandle< TrackerGeometry > pDD
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
std::unique_ptr< SiPixelDigitizerAlgorithm > _pixeldigialgo
Definition: DetId.h:18
T const * product() const
Definition: ESHandle.h:62
PileupMixingContent * PileupInfo_
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &) const =0
Use this engine in event methods.
virtual PileupMixingContent * getEventPileupInfo()
virtual PileupMixingContent* cms::SiPixelDigitizer::getEventPileupInfo ( )
inlinevirtual

Reimplemented from DigiAccumulatorMixMod.

Definition at line 68 of file SiPixelDigitizer.h.

References PileupInfo_.

Referenced by finalizeEvent().

68 { return PileupInfo_; }
PileupMixingContent * PileupInfo_
void SiPixelDigitizer::initializeEvent ( edm::Event const &  e,
edm::EventSetup const &  c 
)
overridevirtual

Implements DigiAccumulatorMixMod.

Definition at line 160 of file SiPixelDigitizer.cc.

References _pixeldigialgo, detectorUnits, first, geometryType, edm::EventSetup::get(), NumberOfEndcapDisks, pDD, pilotBlades, PixelSubdetector::PixelBarrel, PixelSubdetector::PixelEndcap, edm::ESHandle< class >::product(), pSetup, TrackerTopology::pxfDisk(), and DetId::subdetId().

160  {
161  if(first){
162  _pixeldigialgo->init(iSetup);
163  first = false;
164  }
165  _pixeldigialgo->initializeEvent();
166  iSetup.get<TrackerDigiGeometryRecord>().get(geometryType, pDD);
167  iSetup.get<IdealMagneticFieldRecord>().get(pSetup);
169  iSetup.get<IdealGeometryRecord>().get(tTopoHand);
170  const TrackerTopology *tTopo=tTopoHand.product();
171 
172  // FIX THIS! We only need to clear and (re)fill this map when the geometry type IOV changes. Use ESWatcher to determine this.
173  if(true) { // Replace with ESWatcher
174  detectorUnits.clear();
175  for(TrackingGeometry::DetUnitContainer::const_iterator iu = pDD->detUnits().begin(); iu != pDD->detUnits().end(); ++iu) {
176  unsigned int detId = (*iu)->geographicalId().rawId();
177  DetId idet=DetId(detId);
178  unsigned int isub=idet.subdetId();
180  auto pixdet = dynamic_cast<const PixelGeomDetUnit*>((*iu));
181  assert(pixdet != 0);
182  if (isub==PixelSubdetector::PixelEndcap) {
183  unsigned int disk = tTopo->pxfDisk(detId);
184  //if using pilot blades, then allowing it for current detector only
185  if ((disk == 3)&&((!pilotBlades)&&(NumberOfEndcapDisks == 2))) continue;
186  }
187  detectorUnits.insert(std::make_pair(detId, pixdet));
188  }
189  }
190  }
191  }
unsigned int pxfDisk(const DetId &id) const
std::map< unsigned int, PixelGeomDetUnit const * > detectorUnits
edm::ESHandle< MagneticField > pSetup
edm::ESHandle< TrackerGeometry > pDD
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
std::unique_ptr< SiPixelDigitizerAlgorithm > _pixeldigialgo
Definition: DetId.h:18
T const * product() const
Definition: ESHandle.h:62
const std::string geometryType
CLHEP::HepRandomEngine * SiPixelDigitizer::randomEngine ( edm::StreamID const &  streamID)
private

Definition at line 271 of file SiPixelDigitizer.cc.

References edm::RandomNumberGenerator::getEngine(), cmsHarvester::index, randomEngines_, and edm::StreamID::value().

Referenced by accumulate().

271  {
272  unsigned int index = streamID.value();
273  if(index >= randomEngines_.size()) {
274  randomEngines_.resize(index + 1, nullptr);
275  }
276  CLHEP::HepRandomEngine* ptr = randomEngines_[index];
277  if(!ptr) {
279  ptr = &rng->getEngine(streamID);
280  randomEngines_[index] = ptr;
281  }
282  return ptr;
283  }
std::vector< CLHEP::HepRandomEngine * > randomEngines_
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &) const =0
Use this engine in event methods.
virtual void cms::SiPixelDigitizer::StorePileupInformation ( std::vector< int > &  numInteractionList,
std::vector< int > &  bunchCrossingList,
std::vector< float > &  TrueInteractionList 
)
inlinevirtual

Reimplemented from DigiAccumulatorMixMod.

Definition at line 62 of file SiPixelDigitizer.h.

References PileupInfo_.

64  {
65  PileupInfo_ = new PileupMixingContent(numInteractionList, bunchCrossingList, TrueInteractionList);
66  }
PileupMixingContent * PileupInfo_

Member Data Documentation

std::unique_ptr<SiPixelDigitizerAlgorithm> cms::SiPixelDigitizer::_pixeldigialgo
private
std::map<unsigned int, PixelGeomDetUnit const *> cms::SiPixelDigitizer::detectorUnits
private

Definition at line 82 of file SiPixelDigitizer.h.

Referenced by accumulatePixelHits(), and initializeEvent().

bool cms::SiPixelDigitizer::first
private

Definition at line 74 of file SiPixelDigitizer.h.

Referenced by initializeEvent().

const std::string cms::SiPixelDigitizer::geometryType
private

Definition at line 79 of file SiPixelDigitizer.h.

Referenced by initializeEvent().

const std::string cms::SiPixelDigitizer::hitsProducer
private

Definition at line 77 of file SiPixelDigitizer.h.

Referenced by accumulate(), and SiPixelDigitizer().

const int cms::SiPixelDigitizer::NumberOfEndcapDisks
private

Definition at line 88 of file SiPixelDigitizer.h.

Referenced by initializeEvent().

edm::ESHandle<TrackerGeometry> cms::SiPixelDigitizer::pDD
private

Definition at line 80 of file SiPixelDigitizer.h.

Referenced by finalizeEvent(), and initializeEvent().

PileupMixingContent* cms::SiPixelDigitizer::PileupInfo_
private

Definition at line 85 of file SiPixelDigitizer.h.

Referenced by finalizeEvent(), getEventPileupInfo(), and StorePileupInformation().

const bool cms::SiPixelDigitizer::pilotBlades
private

Definition at line 87 of file SiPixelDigitizer.h.

Referenced by initializeEvent().

edm::ESHandle<MagneticField> cms::SiPixelDigitizer::pSetup
private

Definition at line 81 of file SiPixelDigitizer.h.

Referenced by accumulatePixelHits(), and initializeEvent().

std::vector<CLHEP::HepRandomEngine*> cms::SiPixelDigitizer::randomEngines_
private

Definition at line 83 of file SiPixelDigitizer.h.

Referenced by randomEngine().

const vstring cms::SiPixelDigitizer::trackerContainers
private

Definition at line 78 of file SiPixelDigitizer.h.

Referenced by accumulate(), and SiPixelDigitizer().