CMS 3D CMS Logo

List of all members | Public Member Functions | Private Types | Private Attributes
PreMixingSiPixelWorker Class Reference
Inheritance diagram for PreMixingSiPixelWorker:
PreMixingWorker

Public Member Functions

void addPileups (PileUpEventPrincipal const &, edm::EventSetup const &es) override
 
void addSignals (edm::Event const &e, edm::EventSetup const &es) override
 
void initializeEvent (edm::Event const &e, edm::EventSetup const &c) override
 
 PreMixingSiPixelWorker (const edm::ParameterSet &ps, edm::ProducesCollector, edm::ConsumesCollector &&iC)
 
void put (edm::Event &e, edm::EventSetup const &iSetup, std::vector< PileupSummaryInfo > const &ps, int bs) override
 
 ~PreMixingSiPixelWorker () override=default
 
- Public Member Functions inherited from PreMixingWorker
virtual void beginLuminosityBlock (edm::LuminosityBlock const &iLumi, edm::EventSetup const &iSetup)
 
virtual void beginRun (edm::Run const &iRun, edm::EventSetup const &iSetup)
 
virtual void endRun ()
 
virtual void finalizeBunchCrossing (edm::Event &iEvent, edm::EventSetup const &iSetup, int bunchCrossing)
 
virtual void initializeBunchCrossing (edm::Event const &iEvent, edm::EventSetup const &iSetup, int bunchCrossing)
 
 PreMixingWorker ()=default
 
virtual ~PreMixingWorker ()=default
 

Private Types

typedef int Amplitude
 
typedef std::multimap< int, PixelDigiOneDetectorMap
 
typedef std::map< uint32_t, OneDetectorMapSiGlobalIndex
 
typedef std::map< int, Amplitude, std::less< int > > signal_map_type
 
typedef std::map< uint32_t, signal_map_typesignalMaps
 

Private Attributes

SiPixelDigitizerAlgorithm digitizer_
 
bool firstFinalizeEvent_ = true
 
bool firstInitializeEvent_ = true
 
const std::string geometryType_
 
edm::ESHandle< TrackerGeometrypDD
 
edm::InputTag pixeldigi_collectionPile_
 
edm::InputTag pixeldigi_collectionSig_
 
std::string PixelDigiCollectionDM_
 
edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > PixelDigiPToken_
 
edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > PixelDigiToken_
 
SiGlobalIndex SiHitStorage_
 

Detailed Description

Definition at line 41 of file PreMixingSiPixelWorker.cc.

Member Typedef Documentation

◆ Amplitude

typedef int PreMixingSiPixelWorker::Amplitude
private

Definition at line 66 of file PreMixingSiPixelWorker.cc.

◆ OneDetectorMap

typedef std::multimap<int, PixelDigi> PreMixingSiPixelWorker::OneDetectorMap
private

Definition at line 71 of file PreMixingSiPixelWorker.cc.

◆ SiGlobalIndex

typedef std::map<uint32_t, OneDetectorMap> PreMixingSiPixelWorker::SiGlobalIndex
private

Definition at line 72 of file PreMixingSiPixelWorker.cc.

◆ signal_map_type

typedef std::map<int, Amplitude, std::less<int> > PreMixingSiPixelWorker::signal_map_type
private

Definition at line 67 of file PreMixingSiPixelWorker.cc.

◆ signalMaps

typedef std::map<uint32_t, signal_map_type> PreMixingSiPixelWorker::signalMaps
private

Definition at line 68 of file PreMixingSiPixelWorker.cc.

Constructor & Destructor Documentation

◆ PreMixingSiPixelWorker()

PreMixingSiPixelWorker::PreMixingSiPixelWorker ( const edm::ParameterSet ps,
edm::ProducesCollector  producesCollector,
edm::ConsumesCollector &&  iC 
)

◆ ~PreMixingSiPixelWorker()

PreMixingSiPixelWorker::~PreMixingSiPixelWorker ( )
overridedefault

Member Function Documentation

◆ addPileups()

void PreMixingSiPixelWorker::addPileups ( PileUpEventPrincipal const &  pep,
edm::EventSetup const &  es 
)
overridevirtual

Implements PreMixingWorker.

Definition at line 145 of file PreMixingSiPixelWorker.cc.

145  {
146  LogDebug("PreMixingSiPixelWorker") << "\n===============> adding pileups from event " << pep.principal().id()
147  << " for bunchcrossing " << pep.bunchCrossing();
148 
149  // fill in maps of hits; same code as addSignals, except now applied to the pileup events
150 
152  pep.getByLabel(pixeldigi_collectionPile_, inputHandle);
153 
154  if (inputHandle.isValid()) {
155  const auto& input = *inputHandle;
156 
157  //loop on all detsets (detectorIDs) inside the input collection
159  for (; DSViter != input.end(); DSViter++) {
160 #ifdef DEBUG
161  LogDebug("PreMixingSiPixelWorker") << "Pileups: Processing DetID " << DSViter->id;
162 #endif
163 
164  uint32_t detID = DSViter->id;
165  edm::DetSet<PixelDigi>::const_iterator begin = (DSViter->data).begin();
166  edm::DetSet<PixelDigi>::const_iterator end = (DSViter->data).end();
168 
169  // find correct local map (or new one) for this detector ID
170 
171  SiGlobalIndex::const_iterator itest;
172 
173  itest = SiHitStorage_.find(detID);
174 
175  if (itest != SiHitStorage_.end()) { // this detID already has hits, add to existing map
176 
177  OneDetectorMap LocalMap = itest->second;
178 
179  // fill in local map with extra channels
180  for (icopy = begin; icopy != end; icopy++) {
181  LocalMap.insert(OneDetectorMap::value_type((icopy->channel()), *icopy));
182  }
183 
184  SiHitStorage_[detID] = LocalMap;
185 
186  } else { // fill local storage with this information, put in global collection
187 
188  OneDetectorMap LocalMap;
189 
190  for (icopy = begin; icopy != end; icopy++) {
191  LocalMap.insert(OneDetectorMap::value_type((icopy->channel()), *icopy));
192  }
193 
194  SiHitStorage_.insert(SiGlobalIndex::value_type(detID, LocalMap));
195  }
196  }
197  }
198 }

References PileUpEventPrincipal::bunchCrossing(), mps_fire::end, PileUpEventPrincipal::getByLabel(), edm::EventPrincipal::id(), input, edm::HandleBase::isValid(), LogDebug, pixeldigi_collectionPile_, PileUpEventPrincipal::principal(), and SiHitStorage_.

◆ addSignals()

void PreMixingSiPixelWorker::addSignals ( edm::Event const &  e,
edm::EventSetup const &  es 
)
overridevirtual

Implements PreMixingWorker.

Definition at line 114 of file PreMixingSiPixelWorker.cc.

114  {
115  // fill in maps of hits
116 
117  LogDebug("PreMixingSiPixelWorker") << "===============> adding MC signals for " << e.id();
118 
120 
121  if (e.getByToken(PixelDigiToken_, input)) {
122  //loop on all detsets (detectorIDs) inside the input collection
124  for (; DSViter != input->end(); DSViter++) {
125 #ifdef DEBUG
126  LogDebug("PreMixingSiPixelWorker") << "Processing DetID " << DSViter->id;
127 #endif
128 
129  uint32_t detID = DSViter->id;
130  edm::DetSet<PixelDigi>::const_iterator begin = (DSViter->data).begin();
131  edm::DetSet<PixelDigi>::const_iterator end = (DSViter->data).end();
133 
134  OneDetectorMap LocalMap;
135 
136  for (icopy = begin; icopy != end; icopy++) {
137  LocalMap.insert(OneDetectorMap::value_type((icopy->channel()), *icopy));
138  }
139 
140  SiHitStorage_.insert(SiGlobalIndex::value_type(detID, LocalMap));
141  }
142  }
143 } // end of addSiPixelSignals

References MillePedeFileConverter_cfg::e, mps_fire::end, input, LogDebug, PixelDigiToken_, and SiHitStorage_.

◆ initializeEvent()

void PreMixingSiPixelWorker::initializeEvent ( edm::Event const &  e,
edm::EventSetup const &  c 
)
overridevirtual

◆ put()

void PreMixingSiPixelWorker::put ( edm::Event e,
edm::EventSetup const &  iSetup,
std::vector< PileupSummaryInfo > const &  ps,
int  bs 
)
overridevirtual

Implements PreMixingWorker.

Definition at line 200 of file PreMixingSiPixelWorker.cc.

203  {
204  // collection of Digis to put in the event
205 
206  std::vector<edm::DetSet<PixelDigi>> vPixelDigi;
207 
208  // loop through our collection of detectors, merging hits and putting new ones in the output
209  signalMaps signal;
210 
211  // big loop over Detector IDs:
212 
213  for (SiGlobalIndex::const_iterator IDet = SiHitStorage_.begin(); IDet != SiHitStorage_.end(); IDet++) {
214  uint32_t detID = IDet->first;
215 
216  OneDetectorMap LocalMap = IDet->second;
217 
218  signal_map_type Signals;
219  Signals.clear();
220 
221  //counter variables
222  int formerPixel = -1;
223  int currentPixel;
224  int ADCSum = 0;
225 
226  OneDetectorMap::const_iterator iLocalchk;
227 
228  for (OneDetectorMap::const_iterator iLocal = LocalMap.begin(); iLocal != LocalMap.end(); ++iLocal) {
229  currentPixel = iLocal->first;
230 
231  if (currentPixel == formerPixel) { // we have to add these digis together
232  ADCSum += (iLocal->second).adc();
233  } else {
234  if (formerPixel != -1) { // ADC info stolen from SiStrips...
235  if (ADCSum > 511)
236  ADCSum = 255;
237  else if (ADCSum > 253 && ADCSum < 512)
238  ADCSum = 254;
239 
240  Signals.insert(std::make_pair(formerPixel, ADCSum));
241  }
242  // save pointers for next iteration
243  formerPixel = currentPixel;
244  ADCSum = (iLocal->second).adc();
245  }
246 
247  iLocalchk = iLocal;
248  if ((++iLocalchk) == LocalMap.end()) { //make sure not to lose the last one
249  if (ADCSum > 511)
250  ADCSum = 255;
251  else if (ADCSum > 253 && ADCSum < 512)
252  ADCSum = 254;
253  Signals.insert(std::make_pair(formerPixel, ADCSum));
254  }
255 
256  } // end of loop over one detector
257 
258  // stick this into the global vector of detector info
259  signal.insert(std::make_pair(detID, Signals));
260 
261  } // end of big loop over all detector IDs
262 
263  // put the collection of digis in the event
264  edm::LogInfo("PreMixingSiPixelWorker") << "total # Merged Pixels: " << signal.size();
265 
266  std::vector<edm::DetSet<PixelDigi>> theDigiVector;
267 
268  // Load inefficiency constants (1st pass), set pileup information.
269  if (firstFinalizeEvent_) {
270  digitizer_.init_DynIneffDB(iSetup, bs);
271  firstFinalizeEvent_ = false;
272  }
273 
276 
278  CLHEP::HepRandomEngine* engine = &rng->getEngine(e.streamID());
279 
281  iSetup.get<TrackerTopologyRcd>().get(tTopoHand);
282  const TrackerTopology* tTopo = tTopoHand.product();
283 
285  std::unique_ptr<PixelFEDChannelCollection> PixelFEDChannelCollection_ = digitizer_.chooseScenario(ps, engine);
286  if (PixelFEDChannelCollection_ == nullptr) {
287  throw cms::Exception("NullPointerError") << "PixelFEDChannelCollection not set in chooseScenario function.\n";
288  }
289  e.put(std::move(PixelFEDChannelCollection_), PixelDigiCollectionDM_);
290  }
291 
292  for (const auto& iu : pDD->detUnits()) {
293  if (iu->type().isTrackerPixel()) {
294  edm::DetSet<PixelDigi> collector(iu->geographicalId().rawId());
295  edm::DetSet<PixelDigiSimLink> linkcollector(
296  iu->geographicalId().rawId()); // ignored as DigiSimLinks are combined separately
297 
298  digitizer_.digitize(dynamic_cast<const PixelGeomDetUnit*>(iu), collector.data, linkcollector.data, tTopo, engine);
299  if (!collector.data.empty()) {
300  theDigiVector.push_back(std::move(collector));
301  }
302  }
303  }
304 
305  e.put(std::make_unique<edm::DetSetVector<PixelDigi>>(theDigiVector), PixelDigiCollectionDM_);
306 
307  // clear local storage for this event
308  SiHitStorage_.clear();
309 }

References ecalLiteDTU::adc(), cms::cuda::bs, SiPixelDigitizerAlgorithm::calculateInstlumiFactor(), SiPixelDigitizerAlgorithm::chooseScenario(), TrackerGeometry::detUnits(), SiPixelDigitizerAlgorithm::digitize(), digitizer_, MillePedeFileConverter_cfg::e, Exception, firstFinalizeEvent_, edm::EventSetup::get(), get, edm::RandomNumberGenerator::getEngine(), SiPixelDigitizerAlgorithm::init_DynIneffDB(), SiPixelDigitizerAlgorithm::killBadFEDChannels(), eostools::move(), pDD, PixelDigiCollectionDM_, edm::ESHandle< T >::product(), SiPixelDigitizerAlgorithm::setSimAccumulator(), and SiHitStorage_.

Member Data Documentation

◆ digitizer_

SiPixelDigitizerAlgorithm PreMixingSiPixelWorker::digitizer_
private

Definition at line 61 of file PreMixingSiPixelWorker.cc.

Referenced by initializeEvent(), and put().

◆ firstFinalizeEvent_

bool PreMixingSiPixelWorker::firstFinalizeEvent_ = true
private

Definition at line 79 of file PreMixingSiPixelWorker.cc.

Referenced by put().

◆ firstInitializeEvent_

bool PreMixingSiPixelWorker::firstInitializeEvent_ = true
private

Definition at line 78 of file PreMixingSiPixelWorker.cc.

Referenced by initializeEvent().

◆ geometryType_

const std::string PreMixingSiPixelWorker::geometryType_
private

Definition at line 76 of file PreMixingSiPixelWorker.cc.

Referenced by initializeEvent().

◆ pDD

edm::ESHandle<TrackerGeometry> PreMixingSiPixelWorker::pDD
private

Definition at line 59 of file PreMixingSiPixelWorker.cc.

Referenced by initializeEvent(), and put().

◆ pixeldigi_collectionPile_

edm::InputTag PreMixingSiPixelWorker::pixeldigi_collectionPile_
private

Definition at line 53 of file PreMixingSiPixelWorker.cc.

Referenced by addPileups(), and PreMixingSiPixelWorker().

◆ pixeldigi_collectionSig_

edm::InputTag PreMixingSiPixelWorker::pixeldigi_collectionSig_
private

Definition at line 52 of file PreMixingSiPixelWorker.cc.

Referenced by PreMixingSiPixelWorker().

◆ PixelDigiCollectionDM_

std::string PreMixingSiPixelWorker::PixelDigiCollectionDM_
private

Definition at line 54 of file PreMixingSiPixelWorker.cc.

Referenced by PreMixingSiPixelWorker(), and put().

◆ PixelDigiPToken_

edm::EDGetTokenT<edm::DetSetVector<PixelDigi> > PreMixingSiPixelWorker::PixelDigiPToken_
private

Definition at line 57 of file PreMixingSiPixelWorker.cc.

Referenced by PreMixingSiPixelWorker().

◆ PixelDigiToken_

edm::EDGetTokenT<edm::DetSetVector<PixelDigi> > PreMixingSiPixelWorker::PixelDigiToken_
private

Definition at line 56 of file PreMixingSiPixelWorker.cc.

Referenced by addSignals(), and PreMixingSiPixelWorker().

◆ SiHitStorage_

SiGlobalIndex PreMixingSiPixelWorker::SiHitStorage_
private

Definition at line 74 of file PreMixingSiPixelWorker.cc.

Referenced by addPileups(), addSignals(), PreMixingSiPixelWorker(), and put().

edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
edm::DetSetVector
Definition: DetSetVector.h:61
PreMixingSiPixelWorker::digitizer_
SiPixelDigitizerAlgorithm digitizer_
Definition: PreMixingSiPixelWorker.cc:61
edm::RandomNumberGenerator::getEngine
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
input
static const std::string input
Definition: EdmProvDump.cc:48
SiPixelDigitizerAlgorithm::killBadFEDChannels
bool killBadFEDChannels() const
Definition: SiPixelDigitizerAlgorithm.cc:877
edm::DetSet
Definition: DetSet.h:23
TrackerTopology
Definition: TrackerTopology.h:16
PreMixingSiPixelWorker::geometryType_
const std::string geometryType_
Definition: PreMixingSiPixelWorker.cc:76
PreMixingSiPixelWorker::signalMaps
std::map< uint32_t, signal_map_type > signalMaps
Definition: PreMixingSiPixelWorker.cc:68
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
edm::Handle
Definition: AssociativeIterator.h:50
ecalLiteDTU::adc
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
Definition: EcalLiteDTUSample.h:12
cms::cuda::bs
bs
Definition: HistoContainer.h:127
PreMixingSiPixelWorker::pDD
edm::ESHandle< TrackerGeometry > pDD
Definition: PreMixingSiPixelWorker.cc:59
SiPixelDigitizerAlgorithm::init
void init(const edm::EventSetup &es)
Definition: SiPixelDigitizerAlgorithm.cc:116
TrackerGeometry::detUnits
const DetContainer & detUnits() const override
Returm a vector of all GeomDet.
Definition: TrackerGeometry.h:61
TrackerDigiGeometryRecord
Definition: TrackerDigiGeometryRecord.h:15
PreMixingSiPixelWorker::pixeldigi_collectionSig_
edm::InputTag pixeldigi_collectionSig_
Definition: PreMixingSiPixelWorker.cc:52
mps_fire.end
end
Definition: mps_fire.py:242
edm::ESHandle< TrackerTopology >
edm::ConsumesCollector::consumes
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
Definition: ConsumesCollector.h:55
SiPixelDigitizerAlgorithm::chooseScenario
std::unique_ptr< PixelFEDChannelCollection > chooseScenario(PileupMixingContent *puInfo, CLHEP::HepRandomEngine *)
Definition: SiPixelDigitizerAlgorithm.cc:926
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:223
SiPixelDigitizerAlgorithm::calculateInstlumiFactor
void calculateInstlumiFactor(PileupMixingContent *puInfo)
Definition: SiPixelDigitizerAlgorithm.cc:814
PreMixingSiPixelWorker::PixelDigiPToken_
edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > PixelDigiPToken_
Definition: PreMixingSiPixelWorker.cc:57
PreMixingSiPixelWorker::firstInitializeEvent_
bool firstInitializeEvent_
Definition: PreMixingSiPixelWorker.cc:78
edm::DetSetVector::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
edm::Service< edm::RandomNumberGenerator >
edm::ProducesCollector::produces
ProductRegistryHelper::BranchAliasSetterT< ProductType > produces()
Definition: ProducesCollector.h:52
PreMixingSiPixelWorker::firstFinalizeEvent_
bool firstFinalizeEvent_
Definition: PreMixingSiPixelWorker.cc:79
reco::JetExtendedAssociation::value_type
Container::value_type value_type
Definition: JetExtendedAssociation.h:30
get
#define get
PreMixingSiPixelWorker::PixelDigiToken_
edm::EDGetTokenT< edm::DetSetVector< PixelDigi > > PixelDigiToken_
Definition: PreMixingSiPixelWorker.cc:56
PreMixingSiPixelWorker::signal_map_type
std::map< int, Amplitude, std::less< int > > signal_map_type
Definition: PreMixingSiPixelWorker.cc:67
edmNew::DetSetVector
Definition: DetSetNew.h:13
eostools.move
def move(src, dest)
Definition: eostools.py:511
PreMixingSiPixelWorker::SiHitStorage_
SiGlobalIndex SiHitStorage_
Definition: PreMixingSiPixelWorker.cc:74
Exception
Definition: hltDiff.cc:246
PreMixingSiPixelWorker::pixeldigi_collectionPile_
edm::InputTag pixeldigi_collectionPile_
Definition: PreMixingSiPixelWorker.cc:53
PreMixingSiPixelWorker::OneDetectorMap
std::multimap< int, PixelDigi > OneDetectorMap
Definition: PreMixingSiPixelWorker.cc:71
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
PreMixingSiPixelWorker::PixelDigiCollectionDM_
std::string PixelDigiCollectionDM_
Definition: PreMixingSiPixelWorker.cc:54
TrackerTopologyRcd
Definition: TrackerTopologyRcd.h:10
SiPixelDigitizerAlgorithm::setSimAccumulator
void setSimAccumulator(const std::map< uint32_t, std::map< int, int > > &signalMap)
Definition: SiPixelDigitizerAlgorithm.cc:971
SiPixelDigitizerAlgorithm::digitize
void digitize(const PixelGeomDetUnit *pixdet, std::vector< PixelDigi > &digis, std::vector< PixelDigiSimLink > &simlinks, const TrackerTopology *tTopo, CLHEP::HepRandomEngine *)
Definition: SiPixelDigitizerAlgorithm.cc:982
edm::HandleBase::isValid
bool isValid() const
Definition: HandleBase.h:70
SiPixelDigitizerAlgorithm::init_DynIneffDB
void init_DynIneffDB(const edm::EventSetup &, const unsigned int &)
Definition: SiPixelDigitizerAlgorithm.cc:587
edm::InputTag
Definition: InputTag.h:15
SiPixelDigitizerAlgorithm::initializeEvent
void initializeEvent()
Definition: SiPixelDigitizerAlgorithm.h:63
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
edm::DetSet::const_iterator
collection_type::const_iterator const_iterator
Definition: DetSet.h:31