CMS 3D CMS Logo

List of all members | Classes | Public Types | Public Member Functions | Private Types | Private Attributes
SiStripDigitizerAlgorithm Class Reference

#include <SiStripDigitizerAlgorithm.h>

Classes

struct  AssociationInfo
 

Public Types

typedef float Amplitude
 
typedef SiDigitalConverter::DigitalRawVecType DigitalRawVecType
 
typedef SiDigitalConverter::DigitalVecType DigitalVecType
 
typedef std::map< int, float, std::less< int > > hit_map_type
 
typedef SiPileUpSignals::SignalMapType SignalMapType
 

Public Member Functions

void accumulateSimHits (const std::vector< PSimHit >::const_iterator inputBegin, const std::vector< PSimHit >::const_iterator inputEnd, size_t inputBeginGlobalIndex, unsigned int tofBin, const StripGeomDetUnit *stripdet, const GlobalVector &bfield, const TrackerTopology *tTopo, CLHEP::HepRandomEngine *)
 
void calculateInstlumiScale (PileupMixingContent *puInfo)
 
void digitize (edm::DetSet< SiStripDigi > &outDigis, edm::DetSet< SiStripRawDigi > &outRawDigis, edm::DetSet< SiStripRawDigi > &outStripAmplitudes, edm::DetSet< SiStripRawDigi > &outStripAmplitudesPostAPV, edm::DetSet< SiStripRawDigi > &outStripAPVBaselines, edm::DetSet< StripDigiSimLink > &outLink, const StripGeomDetUnit *stripdet, edm::ESHandle< SiStripGain > &, edm::ESHandle< SiStripThreshold > &, edm::ESHandle< SiStripNoises > &, edm::ESHandle< SiStripPedestals > &, bool simulateAPVInThisEvent, edm::ESHandle< SiStripApvSimulationParameters > &, std::vector< std::pair< int, std::bitset< 6 >>> &theAffectedAPVvector, CLHEP::HepRandomEngine *, const TrackerTopology *tTopo)
 
void initializeDetUnit (StripGeomDetUnit const *det, const edm::EventSetup &iSetup)
 
void initializeEvent (const edm::EventSetup &iSetup)
 
void setParticleDataTable (const ParticleDataTable *pardt)
 
 SiStripDigitizerAlgorithm (const edm::ParameterSet &conf)
 
 ~SiStripDigitizerAlgorithm ()
 

Private Types

typedef std::map< int, std::vector< AssociationInfo > > AssociationInfoForChannel
 
typedef std::map< uint32_t, AssociationInfoForChannelAssociationInfoForDetId
 

Private Attributes

std::map< unsigned int, std::vector< bool > > allBadChannels
 
std::map< unsigned int, std::vector< bool > > allHIPChannels
 
const double apv_fCPerElectron_
 
const double apv_maxResponse_
 
const double apv_mVPerQ_
 
const double apv_rate_
 
edm::FileInPath APVProbabilityFile
 
std::ifstream APVProbaFile
 
const bool APVSaturationFromHIP
 
double APVSaturationProb_
 
const double APVSaturationProbScaling_
 
AssociationInfoForDetId associationInfoForDetId_
 Structure that holds the information on the SimTrack contributions. Only filled if makeDigiSimLinks_ is true. More...
 
const bool BaselineShift
 
const double cmnRMStec
 
const double cmnRMStib
 
const double cmnRMStid
 
const double cmnRMStob
 
const bool CommonModeNoise
 
const double cosmicShift
 
std::map< unsigned int, size_t > firstChannelsWithSignal
 
bool FirstDigitize_
 
bool FirstLumiCalc_
 
bool includeAPVSimulation_
 
const double inefficiency
 
std::map< unsigned int, size_t > lastChannelsWithSignal
 
edm::ESHandle< SiStripLorentzAnglelorentzAngleHandle
 
const std::string lorentzAngleName
 
const bool makeDigiSimLinks_
 
std::map< int, float > mapOfAPVprobabilities
 
const bool noise
 
unsigned int nTruePU_
 
int NumberOfBxBetweenHIPandEvent
 
const ParticleDataparticle
 
const ParticleDataTablepdt
 
const bool peakMode
 
const double pedOffset
 
const bool PreMixing_
 
const bool RealPedestals
 
const bool SingleStripNoise
 
std::map< int, std::bitset< 6 > > SiStripTrackerAffectedAPVMap
 
const double theElectronPerADC
 
const int theFedAlgo
 
const std::unique_ptr< SiTrivialDigitalConvertertheSiDigitalConverter
 
const std::unique_ptr< SiHitDigitizertheSiHitDigitizer
 
const std::unique_ptr< const SiGaussianTailNoiseAddertheSiNoiseAdder
 
const std::unique_ptr< SiPileUpSignalstheSiPileUpSignals
 
const std::unique_ptr< SiStripFedZeroSuppressiontheSiZeroSuppress
 
const double theThreshold
 
const double theTOFCutForDeconvolution
 
const double theTOFCutForPeak
 
const double tofCut
 
const bool zeroSuppression
 

Detailed Description

SiStripDigitizerAlgorithm converts hits to digis

Definition at line 57 of file SiStripDigitizerAlgorithm.h.

Member Typedef Documentation

◆ Amplitude

Definition at line 63 of file SiStripDigitizerAlgorithm.h.

◆ AssociationInfoForChannel

typedef std::map<int, std::vector<AssociationInfo> > SiStripDigitizerAlgorithm::AssociationInfoForChannel
private

Definition at line 173 of file SiStripDigitizerAlgorithm.h.

◆ AssociationInfoForDetId

Definition at line 174 of file SiStripDigitizerAlgorithm.h.

◆ DigitalRawVecType

Definition at line 60 of file SiStripDigitizerAlgorithm.h.

◆ DigitalVecType

Definition at line 59 of file SiStripDigitizerAlgorithm.h.

◆ hit_map_type

typedef std::map<int, float, std::less<int> > SiStripDigitizerAlgorithm::hit_map_type

Definition at line 62 of file SiStripDigitizerAlgorithm.h.

◆ SignalMapType

Definition at line 61 of file SiStripDigitizerAlgorithm.h.

Constructor & Destructor Documentation

◆ SiStripDigitizerAlgorithm()

SiStripDigitizerAlgorithm::SiStripDigitizerAlgorithm ( const edm::ParameterSet conf)

Definition at line 38 of file SiStripDigitizerAlgorithm.cc.

39  : lorentzAngleName(conf.getParameter<std::string>("LorentzAngle")),
40  theThreshold(conf.getParameter<double>("NoiseSigmaThreshold")),
41  cmnRMStib(conf.getParameter<double>("cmnRMStib")),
42  cmnRMStob(conf.getParameter<double>("cmnRMStob")),
43  cmnRMStid(conf.getParameter<double>("cmnRMStid")),
44  cmnRMStec(conf.getParameter<double>("cmnRMStec")),
45  APVSaturationProbScaling_(conf.getParameter<double>("APVSaturationProbScaling")),
46  makeDigiSimLinks_(conf.getUntrackedParameter<bool>("makeDigiSimLinks", false)),
47  peakMode(conf.getParameter<bool>("APVpeakmode")),
48  noise(conf.getParameter<bool>("Noise")),
49  RealPedestals(conf.getParameter<bool>("RealPedestals")),
50  SingleStripNoise(conf.getParameter<bool>("SingleStripNoise")),
51  CommonModeNoise(conf.getParameter<bool>("CommonModeNoise")),
52  BaselineShift(conf.getParameter<bool>("BaselineShift")),
53  APVSaturationFromHIP(conf.getParameter<bool>("APVSaturationFromHIP")),
54  theFedAlgo(conf.getParameter<int>("FedAlgorithm")),
55  zeroSuppression(conf.getParameter<bool>("ZeroSuppression")),
56  theElectronPerADC(conf.getParameter<double>(peakMode ? "electronPerAdcPeak" : "electronPerAdcDec")),
57  theTOFCutForPeak(conf.getParameter<double>("TOFCutForPeak")),
58  theTOFCutForDeconvolution(conf.getParameter<double>("TOFCutForDeconvolution")),
60  cosmicShift(conf.getUntrackedParameter<double>("CosmicDelayShift")),
61  inefficiency(conf.getParameter<double>("Inefficiency")),
62  pedOffset((unsigned int)conf.getParameter<double>("PedestalsOffset")),
63  PreMixing_(conf.getParameter<bool>("PreMixingMode")),
69  APVProbabilityFile(conf.getParameter<edm::FileInPath>("APVProbabilityFile")),
70  includeAPVSimulation_(conf.getParameter<bool>("includeAPVSimulation")),
71  apv_maxResponse_(conf.getParameter<double>("apv_maxResponse")),
72  apv_rate_(conf.getParameter<double>("apv_rate")),
73  apv_mVPerQ_(conf.getParameter<double>("apv_mVPerQ")),
74  apv_fCPerElectron_(conf.getParameter<double>("apvfCPerElectron")) {
75  if (peakMode) {
76  LogDebug("StripDigiInfo") << "APVs running in peak mode (poor time resolution)";
77  } else {
78  LogDebug("StripDigiInfo") << "APVs running in deconvolution mode (good time resolution)";
79  };
80  if (SingleStripNoise)
81  LogDebug("SiStripDigitizerAlgorithm") << " SingleStripNoise: ON";
82  else
83  LogDebug("SiStripDigitizerAlgorithm") << " SingleStripNoise: OFF";
84  if (CommonModeNoise)
85  LogDebug("SiStripDigitizerAlgorithm") << " CommonModeNoise: ON";
86  else
87  LogDebug("SiStripDigitizerAlgorithm") << " CommonModeNoise: OFF";
89  throw cms::Exception("PreMixing does not work with HIP loss simulation yet");
92  APVProbaFile.open((APVProbabilityFile.fullPath()).c_str());
93  if (APVProbaFile.is_open()) {
94  while (getline(APVProbaFile, line)) {
95  std::vector<std::string> strs;
96  boost::split(strs, line, boost::is_any_of(" "));
97  if (strs.size() == 2) {
98  mapOfAPVprobabilities[std::stoi(strs.at(0))] = std::stof(strs.at(1));
99  }
100  }
101  APVProbaFile.close();
102  } else
103  throw cms::Exception("MissingInput") << "It seems that the APV probability list is missing\n";
104  }
105 }

References APVProbabilityFile, APVProbaFile, APVSaturationFromHIP, CommonModeNoise, Exception, edm::FileInPath::fullPath(), mps_splice::line, LogDebug, mapOfAPVprobabilities, peakMode, PreMixing_, SingleStripNoise, cms::dd::split(), and AlCaHLTBitMon_QueryRunRegistry::string.

◆ ~SiStripDigitizerAlgorithm()

SiStripDigitizerAlgorithm::~SiStripDigitizerAlgorithm ( )

Definition at line 107 of file SiStripDigitizerAlgorithm.cc.

107 {}

Member Function Documentation

◆ accumulateSimHits()

void SiStripDigitizerAlgorithm::accumulateSimHits ( const std::vector< PSimHit >::const_iterator  inputBegin,
const std::vector< PSimHit >::const_iterator  inputEnd,
size_t  inputBeginGlobalIndex,
unsigned int  tofBin,
const StripGeomDetUnit stripdet,
const GlobalVector bfield,
const TrackerTopology tTopo,
CLHEP::HepRandomEngine *  engine 
)

Definition at line 158 of file SiStripDigitizerAlgorithm.cc.

165  {
166  // produce SignalPoints for all SimHits in detector
167  unsigned int detID = det->geographicalId().rawId();
168  int numStrips = (det->specificTopology()).nstrips();
169 
170  size_t thisFirstChannelWithSignal = numStrips;
171  size_t thisLastChannelWithSignal = 0;
172 
173  float langle = (lorentzAngleHandle.isValid()) ? lorentzAngleHandle->getLorentzAngle(detID) : 0.;
174 
175  std::vector<float> locAmpl(numStrips, 0.);
176 
177  // Loop over hits
178 
179  uint32_t detId = det->geographicalId().rawId();
180  // First: loop on the SimHits
181  if (CLHEP::RandFlat::shoot(engine) > inefficiency) {
182  AssociationInfoForChannel* pDetIDAssociationInfo; // I only need this if makeDigiSimLinks_ is true...
183  if (makeDigiSimLinks_)
184  pDetIDAssociationInfo = &(associationInfoForDetId_[detId]); // ...so only search the map if that is the case
185  std::vector<float>
186  previousLocalAmplitude; // Only used if makeDigiSimLinks_ is true. Needed to work out the change in amplitude.
187 
188  size_t simHitGlobalIndex = inputBeginGlobalIndex; // This needs to stored to create the digi-sim link later
189  for (std::vector<PSimHit>::const_iterator simHitIter = inputBegin; simHitIter != inputEnd;
190  ++simHitIter, ++simHitGlobalIndex) {
191  // skip hits not in this detector.
192  if ((*simHitIter).detUnitId() != detId) {
193  continue;
194  }
195  // check TOF
196  if (std::fabs(simHitIter->tof() - cosmicShift -
197  det->surface().toGlobal(simHitIter->localPosition()).mag() / 30.) < tofCut &&
198  simHitIter->energyLoss() > 0) {
199  if (makeDigiSimLinks_)
200  previousLocalAmplitude = locAmpl; // Not needed except to make the sim link association.
201  size_t localFirstChannel = numStrips;
202  size_t localLastChannel = 0;
203  // process the hit
204  theSiHitDigitizer->processHit(
205  &*simHitIter, *det, bfield, langle, locAmpl, localFirstChannel, localLastChannel, tTopo, engine);
206 
207  if (thisFirstChannelWithSignal > localFirstChannel)
208  thisFirstChannelWithSignal = localFirstChannel;
209  if (thisLastChannelWithSignal < localLastChannel)
210  thisLastChannelWithSignal = localLastChannel;
211 
212  if (makeDigiSimLinks_) { // No need to do any of this if truth association was turned off in the configuration
213  for (size_t stripIndex = 0; stripIndex < locAmpl.size(); ++stripIndex) {
214  // Work out the amplitude from this SimHit from the difference of what it was before and what it is now
215  float signalFromThisSimHit = locAmpl[stripIndex] - previousLocalAmplitude[stripIndex];
216  if (signalFromThisSimHit != 0) { // If this SimHit had any contribution I need to record it.
217  auto& associationVector = (*pDetIDAssociationInfo)[stripIndex];
218  bool addNewEntry = true;
219  // Make sure the hit isn't in already. I've seen this a few times, it always seems to happen in pairs so I think
220  // it's something to do with the stereo strips.
221  for (auto& associationInfo : associationVector) {
222  if (associationInfo.trackID == simHitIter->trackId() &&
223  associationInfo.eventID == simHitIter->eventId()) {
224  // The hit is already in, so add this second contribution and move on
225  associationInfo.contributionToADC += signalFromThisSimHit;
226  addNewEntry = false;
227  break;
228  }
229  } // end of loop over associationVector
230  // If the hit wasn't already in create a new association info structure.
231  if (addNewEntry)
232  associationVector.push_back(AssociationInfo{
233  simHitIter->trackId(), simHitIter->eventId(), signalFromThisSimHit, simHitGlobalIndex, tofBin});
234  } // end of "if( signalFromThisSimHit!=0 )"
235  } // end of loop over locAmpl strips
236  } // end of "if( makeDigiSimLinks_ )"
237  } // end of TOF check
238  } // end for
239  }
240  theSiPileUpSignals->add(detID, locAmpl, thisFirstChannelWithSignal, thisLastChannelWithSignal);
241 
242  if (firstChannelsWithSignal[detID] > thisFirstChannelWithSignal)
243  firstChannelsWithSignal[detID] = thisFirstChannelWithSignal;
244  if (lastChannelsWithSignal[detID] < thisLastChannelWithSignal)
245  lastChannelsWithSignal[detID] = thisLastChannelWithSignal;
246 }

References associationInfoForDetId_, cosmicShift, firstChannelsWithSignal, GeomDet::geographicalId(), SiStripLorentzAngle::getLorentzAngle(), inefficiency, edm::ESHandleBase::isValid(), lastChannelsWithSignal, lorentzAngleHandle, mag(), makeDigiSimLinks_, DetId::rawId(), StripGeomDetUnit::specificTopology(), GeomDet::surface(), theSiHitDigitizer, theSiPileUpSignals, tofCut, and Surface::toGlobal().

◆ calculateInstlumiScale()

void SiStripDigitizerAlgorithm::calculateInstlumiScale ( PileupMixingContent puInfo)

Definition at line 249 of file SiStripDigitizerAlgorithm.cc.

249  {
250  //Instlumi scalefactor calculating for dynamic inefficiency
251 
252  if (puInfo && FirstLumiCalc_) {
253  const std::vector<int>& bunchCrossing = puInfo->getMix_bunchCrossing();
254  const std::vector<float>& TrueInteractionList = puInfo->getMix_TrueInteractions();
255  const int bunchSpacing = puInfo->getMix_bunchSpacing();
256 
257  double RevFreq = 11245.;
258  double minBXsec = 70.0E-27; // use 70mb as an approximation
259  double Bunch = 2100.; // 2016 value
260  if (bunchSpacing == 50)
261  Bunch = Bunch / 2.;
262 
263  int pui = 0, p = 0;
264  std::vector<int>::const_iterator pu;
265  std::vector<int>::const_iterator pu0 = bunchCrossing.end();
266 
267  for (pu = bunchCrossing.begin(); pu != bunchCrossing.end(); ++pu) {
268  if (*pu == 0) {
269  pu0 = pu;
270  p = pui;
271  }
272  pui++;
273  }
274  if (pu0 != bunchCrossing.end()) { // found the in-time interaction
275  nTruePU_ = TrueInteractionList.at(p);
276  double instLumi = Bunch * nTruePU_ * RevFreq / minBXsec;
277  APVSaturationProb_ = instLumi / 6.0E33;
278  }
279  FirstLumiCalc_ = false;
280  }
281 }

References APVSaturationProb_, HLTEgPhaseIITestSequence_cff::bunchSpacing, FirstLumiCalc_, PileupMixingContent::getMix_bunchCrossing(), PileupMixingContent::getMix_bunchSpacing(), PileupMixingContent::getMix_TrueInteractions(), muonGEMDigis_cfi::instLumi, nTruePU_, AlCaHLTBitMon_ParallelJobs::p, and muons2muons_cfi::pu.

◆ digitize()

void SiStripDigitizerAlgorithm::digitize ( edm::DetSet< SiStripDigi > &  outDigis,
edm::DetSet< SiStripRawDigi > &  outRawDigis,
edm::DetSet< SiStripRawDigi > &  outStripAmplitudes,
edm::DetSet< SiStripRawDigi > &  outStripAmplitudesPostAPV,
edm::DetSet< SiStripRawDigi > &  outStripAPVBaselines,
edm::DetSet< StripDigiSimLink > &  outLink,
const StripGeomDetUnit stripdet,
edm::ESHandle< SiStripGain > &  gainHandle,
edm::ESHandle< SiStripThreshold > &  thresholdHandle,
edm::ESHandle< SiStripNoises > &  noiseHandle,
edm::ESHandle< SiStripPedestals > &  pedestalHandle,
bool  simulateAPVInThisEvent,
edm::ESHandle< SiStripApvSimulationParameters > &  apvSimulationParametersHandle,
std::vector< std::pair< int, std::bitset< 6 >>> &  theAffectedAPVvector,
CLHEP::HepRandomEngine *  engine,
const TrackerTopology tTopo 
)

Definition at line 285 of file SiStripDigitizerAlgorithm.cc.

300  {
301  unsigned int detID = det->geographicalId().rawId();
302  int numStrips = (det->specificTopology()).nstrips();
303 
304  DetId detId(detID);
305  uint32_t SubDet = detId.subdetId();
306 
307  const SiPileUpSignals::SignalMapType* theSignal(theSiPileUpSignals->getSignal(detID));
308 
309  std::vector<float> detAmpl(numStrips, 0.);
310  if (theSignal) {
311  for (const auto& amp : *theSignal) {
312  detAmpl[amp.first] = amp.second;
313  }
314  }
315 
316  //removing signal from the dead (and HIP effected) strips
317  std::vector<bool>& badChannels = allBadChannels[detID];
318  for (int strip = 0; strip < numStrips; ++strip) {
319  if (badChannels[strip]) {
320  detAmpl[strip] = 0.;
321  }
322  }
323 
324  if (includeAPVSimulation_ && simulateAPVInThisEvent) {
325  // Get index in apv baseline distributions corresponding to z of detSet and PU
326  const StripTopology* topol = dynamic_cast<const StripTopology*>(&(det->specificTopology()));
327  LocalPoint localPos = topol->localPosition(0);
328  GlobalPoint globalPos = det->surface().toGlobal(Local3DPoint(localPos.x(), localPos.y(), localPos.z()));
329  float detSet_z = fabs(globalPos.z());
330  float detSet_r = globalPos.perp();
331 
332  // Store SCD, before APV sim
333  outStripAmplitudes.reserve(numStrips);
334  for (int strip = 0; strip < numStrips; ++strip) {
335  outStripAmplitudes.emplace_back(SiStripRawDigi(detAmpl[strip] / theElectronPerADC));
336  }
337 
338  // Simulate APV response for each strip
339  for (int strip = 0; strip < numStrips; ++strip) {
340  if (detAmpl[strip] > 0) {
341  // Convert charge from electrons to fC
342  double stripCharge = detAmpl[strip] * apv_fCPerElectron_;
343 
344  // Get APV baseline
345  double baselineV = 0;
347  baselineV = apvSimulationParametersHandle->sampleTIB(tTopo->tibLayer(detId), detSet_z, nTruePU_, engine);
348  } else if (SubDet == SiStripSubdetector::TOB) {
349  baselineV = apvSimulationParametersHandle->sampleTOB(tTopo->tobLayer(detId), detSet_z, nTruePU_, engine);
350  } else if (SubDet == SiStripSubdetector::TID) {
351  baselineV = apvSimulationParametersHandle->sampleTID(tTopo->tidWheel(detId), detSet_r, nTruePU_, engine);
352  } else if (SubDet == SiStripSubdetector::TEC) {
353  baselineV = apvSimulationParametersHandle->sampleTEC(tTopo->tecWheel(detId), detSet_r, nTruePU_, engine);
354  }
355  // Store APV baseline for this strip
356  outStripAPVBaselines.emplace_back(SiStripRawDigi(baselineV));
357 
358  // Fitted parameters from G Hall/M Raymond
359  double maxResponse = apv_maxResponse_;
360  double rate = apv_rate_;
361 
362  double outputChargeInADC = 0;
363  if (baselineV < apv_maxResponse_) {
364  // Convert V0 into baseline charge
365  double baselineQ = -1.0 * rate * log(2 * maxResponse / (baselineV + maxResponse) - 1);
366 
367  // Add charge deposited in this BX
368  double newStripCharge = baselineQ + stripCharge;
369 
370  // Apply APV response
371  double signalV = 2 * maxResponse / (1 + exp(-1.0 * newStripCharge / rate)) - maxResponse;
372  double gain = signalV - baselineV;
373 
374  // Convert gain (mV) to charge (assuming linear region of APV) and then to electrons
375  double outputCharge = gain / apv_mVPerQ_;
376  outputChargeInADC = outputCharge / apv_fCPerElectron_;
377  }
378 
379  // Output charge back to original container
380  detAmpl[strip] = outputChargeInADC;
381  }
382  }
383 
384  // Store SCD, after APV sim
385  outStripAmplitudesPostAPV.reserve(numStrips);
386  for (int strip = 0; strip < numStrips; ++strip)
387  outStripAmplitudesPostAPV.emplace_back(SiStripRawDigi(detAmpl[strip] / theElectronPerADC));
388  }
389 
390  if (APVSaturationFromHIP) {
391  //Implementation of the proper charge scaling function. Need consider resaturation effect:
392  //The probability map gives the probability that at least one HIP happened during the last N bunch crossings (cfr APV recovery time).
393  //The impact on the charge depends on the clostest HIP occurance (in terms of bunch crossing).
394  //The function discribing the APV recovery is therefore the weighted average function which takes into account all possibilities of HIP occurances across the last bx's.
395 
396  // do this step here because we now have access to luminosity information
397  if (FirstDigitize_) {
398  for (std::map<int, float>::iterator iter = mapOfAPVprobabilities.begin(); iter != mapOfAPVprobabilities.end();
399  ++iter) {
400  std::bitset<6> bs;
401  for (int Napv = 0; Napv < 6; Napv++) {
402  float cursor = CLHEP::RandFlat::shoot(engine);
403  bs[Napv] = cursor < iter->second * APVSaturationProb_
404  ? true
405  : false; //APVSaturationProb has been scaled by PU luminosity
406  }
407  SiStripTrackerAffectedAPVMap[iter->first] = bs;
408  }
409 
411  bool HasAtleastOneAffectedAPV = false;
412  while (!HasAtleastOneAffectedAPV) {
413  for (int bx = floor(300.0 / 25.0); bx > 0; bx--) { //Reminder: make these numbers not hard coded!!
414  float temp = CLHEP::RandFlat::shoot(engine) < 0.5 ? 1 : 0;
415  if (temp == 1 && bx < NumberOfBxBetweenHIPandEvent) {
417  HasAtleastOneAffectedAPV = true;
418  }
419  }
420  }
421 
422  FirstDigitize_ = false;
423  }
424 
425  std::bitset<6>& bs = SiStripTrackerAffectedAPVMap[detID];
426 
427  if (bs.any()) {
428  // store this information so it can be saved to the event later
429  theAffectedAPVvector.push_back(std::make_pair(detID, bs));
430 
431  if (!PreMixing_) {
432  // Here below is the scaling function which describes the evolution of the baseline (i.e. how the charge is suppressed).
433  // This must be replaced as soon as we have a proper modeling of the baseline evolution from VR runs
434  float Shift =
435  1 - NumberOfBxBetweenHIPandEvent / floor(300.0 / 25.0); //Reminder: make these numbers not hardcoded!!
436  float randomX = CLHEP::RandFlat::shoot(engine);
437  float scalingValue = (randomX - Shift) * 10.0 / 7.0 - 3.0 / 7.0;
438 
439  for (int strip = 0; strip < numStrips; ++strip) {
440  if (!badChannels[strip] && bs[strip / 128] == 1) {
441  detAmpl[strip] *= scalingValue > 0 ? scalingValue : 0.0;
442  }
443  }
444  }
445  }
446  }
447 
448  SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID);
449  SiStripApvGain::Range detGainRange = gainHandle->getRange(detID);
450  SiStripPedestals::Range detPedestalRange = pedestalHandle->getRange(detID);
451 
452  // -----------------------------------------------------------
453 
454  auto& firstChannelWithSignal = firstChannelsWithSignal[detID];
455  auto& lastChannelWithSignal = lastChannelsWithSignal[detID];
456  auto iAssociationInfoByChannel =
457  associationInfoForDetId_.find(detID); // Use an iterator so that I can easily remove it once finished
458 
459  if (zeroSuppression) {
460  //Adding the strip noise
461  //------------------------------------------------------
462  if (noise) {
463  if (SingleStripNoise) {
464  // std::cout<<"In SSN, detId="<<detID<<std::endl;
465  std::vector<float> noiseRMSv;
466  noiseRMSv.clear();
467  noiseRMSv.insert(noiseRMSv.begin(), numStrips, 0.);
468  for (int strip = 0; strip < numStrips; ++strip) {
469  if (!badChannels[strip]) {
470  float gainValue = gainHandle->getStripGain(strip, detGainRange);
471  noiseRMSv[strip] = (noiseHandle->getNoise(strip, detNoiseRange)) * theElectronPerADC / gainValue;
472  //std::cout<<"<SiStripDigitizerAlgorithm::digitize>: gainValue: "<<gainValue<<"\tnoiseRMSv["<<strip<<"]: "<<noiseRMSv[strip]<<std::endl;
473  }
474  }
475  theSiNoiseAdder->addNoiseVR(detAmpl, noiseRMSv, engine);
476  } else {
477  int RefStrip = int(numStrips / 2.);
478  while (RefStrip < numStrips &&
479  badChannels[RefStrip]) { //if the refstrip is bad, I move up to when I don't find it
480  RefStrip++;
481  }
482  if (RefStrip < numStrips) {
483  float RefgainValue = gainHandle->getStripGain(RefStrip, detGainRange);
484  float RefnoiseRMS = noiseHandle->getNoise(RefStrip, detNoiseRange) * theElectronPerADC / RefgainValue;
485 
486  theSiNoiseAdder->addNoise(
487  detAmpl, firstChannelWithSignal, lastChannelWithSignal, numStrips, RefnoiseRMS, engine);
488  //std::cout<<"<SiStripDigitizerAlgorithm::digitize>: RefgainValue: "<<RefgainValue<<"\tRefnoiseRMS: "<<RefnoiseRMS<<std::endl;
489  }
490  }
491  } //if noise
492 
493  DigitalVecType digis;
494  theSiZeroSuppress->suppress(
495  theSiDigitalConverter->convert(detAmpl, gainHandle, detID), digis, detID, noiseHandle, thresholdHandle);
496  // Now do the association to truth. Note that if truth association was turned off in the configuration this map
497  // will be empty and the iterator will always equal associationInfoForDetId_.end().
498  if (iAssociationInfoByChannel !=
499  associationInfoForDetId_.end()) { // make sure the readings for this DetID aren't completely from noise
500  for (const auto& iDigi : digis) {
501  auto& associationInfoByChannel = iAssociationInfoByChannel->second;
502  const std::vector<AssociationInfo>& associationInfo = associationInfoByChannel[iDigi.channel()];
503 
504  // Need to find the total from all sim hits, because this might not be the same as the total
505  // digitised due to noise or whatever.
506  float totalSimADC = 0;
507  for (const auto& iAssociationInfo : associationInfo)
508  totalSimADC += iAssociationInfo.contributionToADC;
509  // Now I know that I can loop again and create the links
510  for (const auto& iAssociationInfo : associationInfo) {
511  // Note simHitGlobalIndex used to have +1 because TrackerHitAssociator (the only place I can find this value being used)
512  // expected counting to start at 1, not 0. Now changed.
513  outLink.push_back(StripDigiSimLink(iDigi.channel(),
514  iAssociationInfo.trackID,
515  iAssociationInfo.simHitGlobalIndex,
516  iAssociationInfo.tofBin,
517  iAssociationInfo.eventID,
518  iAssociationInfo.contributionToADC / totalSimADC));
519  } // end of loop over associationInfo
520  } // end of loop over the digis
521  } // end of check that iAssociationInfoByChannel is a valid iterator
522  outdigi.data = digis;
523  } //if zeroSuppression
524 
525  if (!zeroSuppression) {
526  //if(noise){
527  // the constant pedestal offset is needed because
528  // negative adc counts are not allowed in case
529  // Pedestal and CMN subtraction is performed.
530  // The pedestal value read from the conditions
531  // is pedValue and after the pedestal subtraction
532  // the baseline is zero. The Common Mode Noise
533  // is not subtracted from the negative adc counts
534  // channels. Adding pedOffset the baseline is set
535  // to pedOffset after pedestal subtraction and CMN
536  // is subtracted to all the channels since none of
537  // them has negative adc value. The pedOffset is
538  // treated as a constant component in the CMN
539  // estimation and subtracted as CMN.
540 
541  //calculating the charge deposited on each APV and subtracting the shift
542  //------------------------------------------------------
543  if (BaselineShift) {
544  theSiNoiseAdder->addBaselineShift(detAmpl, badChannels);
545  }
546 
547  //Adding the strip noise
548  //------------------------------------------------------
549  if (noise) {
550  std::vector<float> noiseRMSv;
551  noiseRMSv.clear();
552  noiseRMSv.insert(noiseRMSv.begin(), numStrips, 0.);
553 
554  if (SingleStripNoise) {
555  for (int strip = 0; strip < numStrips; ++strip) {
556  if (!badChannels[strip])
557  noiseRMSv[strip] = (noiseHandle->getNoise(strip, detNoiseRange)) * theElectronPerADC;
558  }
559 
560  } else {
561  int RefStrip = 0; //int(numStrips/2.);
562  while (RefStrip < numStrips &&
563  badChannels[RefStrip]) { //if the refstrip is bad, I move up to when I don't find it
564  RefStrip++;
565  }
566  if (RefStrip < numStrips) {
567  float noiseRMS = noiseHandle->getNoise(RefStrip, detNoiseRange) * theElectronPerADC;
568  for (int strip = 0; strip < numStrips; ++strip) {
569  if (!badChannels[strip])
570  noiseRMSv[strip] = noiseRMS;
571  }
572  }
573  }
574 
575  theSiNoiseAdder->addNoiseVR(detAmpl, noiseRMSv, engine);
576  }
577 
578  //adding the CMN
579  //------------------------------------------------------
580  if (CommonModeNoise) {
581  float cmnRMS = 0.;
582  DetId detId(detID);
583  switch (detId.subdetId()) {
585  cmnRMS = cmnRMStib;
586  break;
588  cmnRMS = cmnRMStid;
589  break;
591  cmnRMS = cmnRMStob;
592  break;
594  cmnRMS = cmnRMStec;
595  break;
596  }
597  cmnRMS *= theElectronPerADC;
598  theSiNoiseAdder->addCMNoise(detAmpl, cmnRMS, badChannels, engine);
599  }
600 
601  //Adding the pedestals
602  //------------------------------------------------------
603 
604  std::vector<float> vPeds;
605  vPeds.clear();
606  vPeds.insert(vPeds.begin(), numStrips, 0.);
607 
608  if (RealPedestals) {
609  for (int strip = 0; strip < numStrips; ++strip) {
610  if (!badChannels[strip])
611  vPeds[strip] = (pedestalHandle->getPed(strip, detPedestalRange) + pedOffset) * theElectronPerADC;
612  }
613  } else {
614  for (int strip = 0; strip < numStrips; ++strip) {
615  if (!badChannels[strip])
616  vPeds[strip] = pedOffset * theElectronPerADC;
617  }
618  }
619 
620  theSiNoiseAdder->addPedestals(detAmpl, vPeds);
621 
622  //if(!RealPedestals&&!CommonModeNoise&&!noise&&!BaselineShift&&!APVSaturationFromHIP){
623 
624  // edm::LogWarning("SiStripDigitizer")<<"You are running the digitizer without Noise generation and without applying Zero Suppression. ARE YOU SURE???";
625  //}else{
626 
627  DigitalRawVecType rawdigis = theSiDigitalConverter->convertRaw(detAmpl, gainHandle, detID);
628 
629  // Now do the association to truth. Note that if truth association was turned off in the configuration this map
630  // will be empty and the iterator will always equal associationInfoForDetId_.end().
631  if (iAssociationInfoByChannel !=
632  associationInfoForDetId_.end()) { // make sure the readings for this DetID aren't completely from noise
633  // N.B. For the raw digis the channel is inferred from the position in the vector.
634  // I'VE NOT TESTED THIS YET!!!!!
635  // ToDo Test this properly.
636  for (size_t channel = 0; channel < rawdigis.size(); ++channel) {
637  auto& associationInfoByChannel = iAssociationInfoByChannel->second;
638  const auto iAssociationInfo = associationInfoByChannel.find(channel);
639  if (iAssociationInfo == associationInfoByChannel.end())
640  continue; // Skip if there is no sim information for this channel (i.e. it's all noise)
641  const std::vector<AssociationInfo>& associationInfo = iAssociationInfo->second;
642 
643  // Need to find the total from all sim hits, because this might not be the same as the total
644  // digitised due to noise or whatever.
645  float totalSimADC = 0;
646  for (const auto& iAssociationInfo : associationInfo)
647  totalSimADC += iAssociationInfo.contributionToADC;
648  // Now I know that I can loop again and create the links
649  for (const auto& iAssociationInfo : associationInfo) {
650  // Note simHitGlobalIndex used to have +1 because TrackerHitAssociator (the only place I can find this value being used)
651  // expected counting to start at 1, not 0. Now changed.
652  outLink.push_back(StripDigiSimLink(channel,
653  iAssociationInfo.trackID,
654  iAssociationInfo.simHitGlobalIndex,
655  iAssociationInfo.tofBin,
656  iAssociationInfo.eventID,
657  iAssociationInfo.contributionToADC / totalSimADC));
658  } // end of loop over associationInfo
659  } // end of loop over the digis
660  } // end of check that iAssociationInfoByChannel is a valid iterator
661 
662  outrawdigi.data = rawdigis;
663 
664  //}
665  }
666 
667  // Now that I've finished with this entry in the map of associations, I can remove it.
668  // Note that there might not be an association if the ADC reading is from noise in which
669  // case associationIsValid will be false.
670  if (iAssociationInfoByChannel != associationInfoForDetId_.end())
671  associationInfoForDetId_.erase(iAssociationInfoByChannel);
672 }

References allBadChannels, apv_fCPerElectron_, apv_maxResponse_, apv_mVPerQ_, apv_rate_, APVSaturationFromHIP, APVSaturationProb_, associationInfoForDetId_, BaselineShift, cms::cuda::bs, l1GtPatternGenerator_cfi::bx, cmnRMStec, cmnRMStib, cmnRMStid, cmnRMStob, CommonModeNoise, edm::DetSet< T >::data, SiPixelPhase1Clusters_cfi::e3, edm::DetSet< T >::emplace_back(), JetChargeProducer_cfi::exp, firstChannelsWithSignal, FirstDigitize_, PedestalClient_cfi::gain, GeomDet::geographicalId(), SiStripNoises::getNoise(), SiStripPedestals::getPed(), SiStripNoises::getRange(), SiStripPedestals::getRange(), SiStripGain::getRange(), SiStripGain::getStripGain(), includeAPVSimulation_, createfilelist::int, lastChannelsWithSignal, StripTopology::localPosition(), dqm-mbProfile::log, mapOfAPVprobabilities, noise, nTruePU_, NumberOfBxBetweenHIPandEvent, pedOffset, PV3DBase< T, PVType, FrameType >::perp(), PreMixing_, edm::DetSet< T >::push_back(), RPCpg::rate(), DetId::rawId(), RealPedestals, edm::DetSet< T >::reserve(), SiStripApvSimulationParameters::sampleTEC(), SiStripApvSimulationParameters::sampleTIB(), SiStripApvSimulationParameters::sampleTID(), SiStripApvSimulationParameters::sampleTOB(), SingleStripNoise, SiStripTrackerAffectedAPVMap, StripGeomDetUnit::specificTopology(), digitizers_cfi::strip, ntupleEnum::SubDet, DetId::subdetId(), GeomDet::surface(), SiStripSubdetector::TEC, TrackerTopology::tecWheel(), groupFilesInBlocks::temp, theElectronPerADC, theSiDigitalConverter, theSiNoiseAdder, theSiPileUpSignals, theSiZeroSuppress, SiStripSubdetector::TIB, TrackerTopology::tibLayer(), SiStripSubdetector::TID, TrackerTopology::tidWheel(), SiStripSubdetector::TOB, TrackerTopology::tobLayer(), Surface::toGlobal(), funct::true, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), PV3DBase< T, PVType, FrameType >::z(), and zeroSuppression.

◆ initializeDetUnit()

void SiStripDigitizerAlgorithm::initializeDetUnit ( StripGeomDetUnit const *  det,
const edm::EventSetup iSetup 
)

Definition at line 109 of file SiStripDigitizerAlgorithm.cc.

109  {
110  edm::ESHandle<SiStripBadStrip> deadChannelHandle;
111  iSetup.get<SiStripBadChannelRcd>().get(deadChannelHandle);
112 
113  unsigned int detId = det->geographicalId().rawId();
114  int numStrips = (det->specificTopology()).nstrips();
115 
116  SiStripBadStrip::Range detBadStripRange = deadChannelHandle->getRange(detId);
117  //storing the bad strip of the the module. the module is not removed but just signal put to 0
118  std::vector<bool>& badChannels = allBadChannels[detId];
119  badChannels.clear();
120  badChannels.insert(badChannels.begin(), numStrips, false);
121  for (SiStripBadStrip::ContainerIterator it = detBadStripRange.first; it != detBadStripRange.second; ++it) {
122  SiStripBadStrip::data fs = deadChannelHandle->decode(*it);
123  for (int strip = fs.firstStrip; strip < fs.firstStrip + fs.range; ++strip) {
124  badChannels[strip] = true;
125  }
126  }
127  firstChannelsWithSignal[detId] = numStrips;
128  lastChannelsWithSignal[detId] = 0;
129 
130  // if(APVSaturationFromHIP){
131  // std::bitset<6> &bs=SiStripTrackerAffectedAPVMap[detId];
132  // if(bs.any())theAffectedAPVvector.push_back(std::make_pair(detId,bs));
133  //}
134 }

References allBadChannels, SiStripBadStrip::decode(), firstChannelsWithSignal, SiStripBadStrip::data::firstStrip, GeomDet::geographicalId(), edm::EventSetup::get(), get, SiStripBadStrip::getRange(), lastChannelsWithSignal, SiStripBadStrip::data::range, DetId::rawId(), StripGeomDetUnit::specificTopology(), and digitizers_cfi::strip.

◆ initializeEvent()

void SiStripDigitizerAlgorithm::initializeEvent ( const edm::EventSetup iSetup)

Definition at line 136 of file SiStripDigitizerAlgorithm.cc.

136  {
137  theSiPileUpSignals->reset();
138  // This should be clear by after all calls to digitize(), but I might as well make sure
139  associationInfoForDetId_.clear();
140 
141  APVSaturationProb_ = APVSaturationProbScaling_; // reset probability
143  FirstLumiCalc_ = true;
144  FirstDigitize_ = true;
145 
146  nTruePU_ = 0;
147 
148  //get gain noise pedestal lorentzAngle from ES handle
150  iSetup.getData(pdt);
153 }

References APVSaturationProb_, APVSaturationProbScaling_, associationInfoForDetId_, FirstDigitize_, FirstLumiCalc_, edm::EventSetup::get(), get, edm::EventSetup::getData(), lorentzAngleHandle, lorentzAngleName, nTruePU_, pdt, setParticleDataTable(), SiStripTrackerAffectedAPVMap, and theSiPileUpSignals.

◆ setParticleDataTable()

void SiStripDigitizerAlgorithm::setParticleDataTable ( const ParticleDataTable pardt)
inline

Definition at line 105 of file SiStripDigitizerAlgorithm.h.

105  {
106  theSiHitDigitizer->setParticleDataTable(pardt);
107  pdt = pardt;
108  }

References pdt, and theSiHitDigitizer.

Referenced by initializeEvent().

Member Data Documentation

◆ allBadChannels

std::map<unsigned int, std::vector<bool> > SiStripDigitizerAlgorithm::allBadChannels
private

Definition at line 154 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and initializeDetUnit().

◆ allHIPChannels

std::map<unsigned int, std::vector<bool> > SiStripDigitizerAlgorithm::allHIPChannels
private

Definition at line 155 of file SiStripDigitizerAlgorithm.h.

◆ apv_fCPerElectron_

const double SiStripDigitizerAlgorithm::apv_fCPerElectron_
private

Definition at line 189 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ apv_maxResponse_

const double SiStripDigitizerAlgorithm::apv_maxResponse_
private

Definition at line 186 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ apv_mVPerQ_

const double SiStripDigitizerAlgorithm::apv_mVPerQ_
private

Definition at line 188 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ apv_rate_

const double SiStripDigitizerAlgorithm::apv_rate_
private

Definition at line 187 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ APVProbabilityFile

edm::FileInPath SiStripDigitizerAlgorithm::APVProbabilityFile
private

Definition at line 178 of file SiStripDigitizerAlgorithm.h.

Referenced by SiStripDigitizerAlgorithm().

◆ APVProbaFile

std::ifstream SiStripDigitizerAlgorithm::APVProbaFile
private

Definition at line 180 of file SiStripDigitizerAlgorithm.h.

Referenced by SiStripDigitizerAlgorithm().

◆ APVSaturationFromHIP

const bool SiStripDigitizerAlgorithm::APVSaturationFromHIP
private

Definition at line 126 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and SiStripDigitizerAlgorithm().

◆ APVSaturationProb_

double SiStripDigitizerAlgorithm::APVSaturationProb_
private

Definition at line 143 of file SiStripDigitizerAlgorithm.h.

Referenced by calculateInstlumiScale(), digitize(), and initializeEvent().

◆ APVSaturationProbScaling_

const double SiStripDigitizerAlgorithm::APVSaturationProbScaling_
private

Definition at line 117 of file SiStripDigitizerAlgorithm.h.

Referenced by initializeEvent().

◆ associationInfoForDetId_

AssociationInfoForDetId SiStripDigitizerAlgorithm::associationInfoForDetId_
private

Structure that holds the information on the SimTrack contributions. Only filled if makeDigiSimLinks_ is true.

Definition at line 176 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits(), digitize(), and initializeEvent().

◆ BaselineShift

const bool SiStripDigitizerAlgorithm::BaselineShift
private

Definition at line 125 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ cmnRMStec

const double SiStripDigitizerAlgorithm::cmnRMStec
private

Definition at line 116 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ cmnRMStib

const double SiStripDigitizerAlgorithm::cmnRMStib
private

Definition at line 113 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ cmnRMStid

const double SiStripDigitizerAlgorithm::cmnRMStid
private

Definition at line 115 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ cmnRMStob

const double SiStripDigitizerAlgorithm::cmnRMStob
private

Definition at line 114 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ CommonModeNoise

const bool SiStripDigitizerAlgorithm::CommonModeNoise
private

Definition at line 124 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and SiStripDigitizerAlgorithm().

◆ cosmicShift

const double SiStripDigitizerAlgorithm::cosmicShift
private

Definition at line 135 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits().

◆ firstChannelsWithSignal

std::map<unsigned int, size_t> SiStripDigitizerAlgorithm::firstChannelsWithSignal
private

Definition at line 157 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits(), digitize(), and initializeDetUnit().

◆ FirstDigitize_

bool SiStripDigitizerAlgorithm::FirstDigitize_
private

Definition at line 145 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and initializeEvent().

◆ FirstLumiCalc_

bool SiStripDigitizerAlgorithm::FirstLumiCalc_
private

Definition at line 144 of file SiStripDigitizerAlgorithm.h.

Referenced by calculateInstlumiScale(), and initializeEvent().

◆ includeAPVSimulation_

bool SiStripDigitizerAlgorithm::includeAPVSimulation_
private

Definition at line 185 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ inefficiency

const double SiStripDigitizerAlgorithm::inefficiency
private

Definition at line 136 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits().

◆ lastChannelsWithSignal

std::map<unsigned int, size_t> SiStripDigitizerAlgorithm::lastChannelsWithSignal
private

Definition at line 158 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits(), digitize(), and initializeDetUnit().

◆ lorentzAngleHandle

edm::ESHandle<SiStripLorentzAngle> SiStripDigitizerAlgorithm::lorentzAngleHandle
private

Definition at line 161 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits(), and initializeEvent().

◆ lorentzAngleName

const std::string SiStripDigitizerAlgorithm::lorentzAngleName
private

Definition at line 111 of file SiStripDigitizerAlgorithm.h.

Referenced by initializeEvent().

◆ makeDigiSimLinks_

const bool SiStripDigitizerAlgorithm::makeDigiSimLinks_
private

Definition at line 119 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits().

◆ mapOfAPVprobabilities

std::map<int, float> SiStripDigitizerAlgorithm::mapOfAPVprobabilities
private

Definition at line 181 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and SiStripDigitizerAlgorithm().

◆ noise

const bool SiStripDigitizerAlgorithm::noise
private

Definition at line 121 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ nTruePU_

unsigned int SiStripDigitizerAlgorithm::nTruePU_
private

Definition at line 190 of file SiStripDigitizerAlgorithm.h.

Referenced by calculateInstlumiScale(), digitize(), and initializeEvent().

◆ NumberOfBxBetweenHIPandEvent

int SiStripDigitizerAlgorithm::NumberOfBxBetweenHIPandEvent
private

Definition at line 183 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ particle

const ParticleData* SiStripDigitizerAlgorithm::particle
private

Definition at line 141 of file SiStripDigitizerAlgorithm.h.

◆ pdt

const ParticleDataTable* SiStripDigitizerAlgorithm::pdt
private

Definition at line 140 of file SiStripDigitizerAlgorithm.h.

Referenced by initializeEvent(), and setParticleDataTable().

◆ peakMode

const bool SiStripDigitizerAlgorithm::peakMode
private

Definition at line 120 of file SiStripDigitizerAlgorithm.h.

Referenced by SiStripDigitizerAlgorithm().

◆ pedOffset

const double SiStripDigitizerAlgorithm::pedOffset
private

Definition at line 137 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ PreMixing_

const bool SiStripDigitizerAlgorithm::PreMixing_
private

Definition at line 138 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and SiStripDigitizerAlgorithm().

◆ RealPedestals

const bool SiStripDigitizerAlgorithm::RealPedestals
private

Definition at line 122 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ SingleStripNoise

const bool SiStripDigitizerAlgorithm::SingleStripNoise
private

Definition at line 123 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and SiStripDigitizerAlgorithm().

◆ SiStripTrackerAffectedAPVMap

std::map<int, std::bitset<6> > SiStripDigitizerAlgorithm::SiStripTrackerAffectedAPVMap
private

Definition at line 182 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize(), and initializeEvent().

◆ theElectronPerADC

const double SiStripDigitizerAlgorithm::theElectronPerADC
private

Definition at line 130 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ theFedAlgo

const int SiStripDigitizerAlgorithm::theFedAlgo
private

Definition at line 128 of file SiStripDigitizerAlgorithm.h.

◆ theSiDigitalConverter

const std::unique_ptr<SiTrivialDigitalConverter> SiStripDigitizerAlgorithm::theSiDigitalConverter
private

Definition at line 150 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ theSiHitDigitizer

const std::unique_ptr<SiHitDigitizer> SiStripDigitizerAlgorithm::theSiHitDigitizer
private

Definition at line 147 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits(), and setParticleDataTable().

◆ theSiNoiseAdder

const std::unique_ptr<const SiGaussianTailNoiseAdder> SiStripDigitizerAlgorithm::theSiNoiseAdder
private

Definition at line 149 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ theSiPileUpSignals

const std::unique_ptr<SiPileUpSignals> SiStripDigitizerAlgorithm::theSiPileUpSignals
private

Definition at line 148 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits(), digitize(), and initializeEvent().

◆ theSiZeroSuppress

const std::unique_ptr<SiStripFedZeroSuppression> SiStripDigitizerAlgorithm::theSiZeroSuppress
private

Definition at line 151 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

◆ theThreshold

const double SiStripDigitizerAlgorithm::theThreshold
private

Definition at line 112 of file SiStripDigitizerAlgorithm.h.

◆ theTOFCutForDeconvolution

const double SiStripDigitizerAlgorithm::theTOFCutForDeconvolution
private

Definition at line 133 of file SiStripDigitizerAlgorithm.h.

◆ theTOFCutForPeak

const double SiStripDigitizerAlgorithm::theTOFCutForPeak
private

Definition at line 132 of file SiStripDigitizerAlgorithm.h.

◆ tofCut

const double SiStripDigitizerAlgorithm::tofCut
private

Definition at line 134 of file SiStripDigitizerAlgorithm.h.

Referenced by accumulateSimHits().

◆ zeroSuppression

const bool SiStripDigitizerAlgorithm::zeroSuppression
private

Definition at line 129 of file SiStripDigitizerAlgorithm.h.

Referenced by digitize().

SiStripDigitizerAlgorithm::firstChannelsWithSignal
std::map< unsigned int, size_t > firstChannelsWithSignal
Definition: SiStripDigitizerAlgorithm.h:157
SiStripDigitizerAlgorithm::APVSaturationProbScaling_
const double APVSaturationProbScaling_
Definition: SiStripDigitizerAlgorithm.h:117
edm::DetSet::push_back
void push_back(const T &t)
Definition: DetSet.h:66
SiStripDigitizerAlgorithm::NumberOfBxBetweenHIPandEvent
int NumberOfBxBetweenHIPandEvent
Definition: SiStripDigitizerAlgorithm.h:183
PileupMixingContent::getMix_bunchCrossing
const std::vector< int > & getMix_bunchCrossing() const
Definition: PileupMixingContent.h:65
SiStripDigitizerAlgorithm::PreMixing_
const bool PreMixing_
Definition: SiStripDigitizerAlgorithm.h:138
SiStripDigitizerAlgorithm::CommonModeNoise
const bool CommonModeNoise
Definition: SiStripDigitizerAlgorithm.h:124
SiStripDigitizerAlgorithm::makeDigiSimLinks_
const bool makeDigiSimLinks_
Definition: SiStripDigitizerAlgorithm.h:119
SiStripBadStrip::getRange
const Range getRange(const uint32_t detID) const
Definition: SiStripBadStrip.cc:27
SiStripDigitizerAlgorithm::includeAPVSimulation_
bool includeAPVSimulation_
Definition: SiStripDigitizerAlgorithm.h:185
SiStripDigitizerAlgorithm::noise
const bool noise
Definition: SiStripDigitizerAlgorithm.h:121
SiStripDigitizerAlgorithm::SingleStripNoise
const bool SingleStripNoise
Definition: SiStripDigitizerAlgorithm.h:123
SiStripBadChannelRcd
Definition: SiStripCondDataRecords.h:14
SiStripPedestals::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripPedestals.h:51
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
StripTopology::localPosition
virtual LocalPoint localPosition(float strip) const =0
digitizers_cfi.strip
strip
Definition: digitizers_cfi.py:19
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
l1GtPatternGenerator_cfi.bx
bx
Definition: l1GtPatternGenerator_cfi.py:18
SiStripBadStrip::decode
data decode(const unsigned int &value) const
Definition: SiStripBadStrip.h:78
SiStripDigitizerAlgorithm::BaselineShift
const bool BaselineShift
Definition: SiStripDigitizerAlgorithm.h:125
SiStripDigitizerAlgorithm::apv_rate_
const double apv_rate_
Definition: SiStripDigitizerAlgorithm.h:187
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
SiStripDigitizerAlgorithm::associationInfoForDetId_
AssociationInfoForDetId associationInfoForDetId_
Structure that holds the information on the SimTrack contributions. Only filled if makeDigiSimLinks_ ...
Definition: SiStripDigitizerAlgorithm.h:176
cms::dd::split
std::vector< std::string_view > split(std::string_view, const char *)
SiStripNoises::getRange
const Range getRange(const uint32_t detID) const
Definition: SiStripNoises.cc:34
RPCpg::rate
double rate(double x)
Definition: Constants.cc:3
SiStripSubdetector::TEC
Definition: SiStripEnums.h:5
groupFilesInBlocks.temp
list temp
Definition: groupFilesInBlocks.py:142
SiStripDigitizerAlgorithm::theTOFCutForDeconvolution
const double theTOFCutForDeconvolution
Definition: SiStripDigitizerAlgorithm.h:133
SiStripApvSimulationParameters::sampleTID
float sampleTID(layerid wheel, float r, float pu, CLHEP::HepRandomEngine *engine) const
Definition: SiStripApvSimulationParameters.h:57
SiStripDigitizerAlgorithm::theThreshold
const double theThreshold
Definition: SiStripDigitizerAlgorithm.h:112
SiStripDigitizerAlgorithm::cmnRMStib
const double cmnRMStib
Definition: SiStripDigitizerAlgorithm.h:113
TrackerTopology::tidWheel
unsigned int tidWheel(const DetId &id) const
Definition: TrackerTopology.h:201
SiStripGain::getStripGain
static float getStripGain(const uint16_t &strip, const SiStripApvGain::Range &range)
Definition: SiStripGain.h:73
SiStripDigitizerAlgorithm::apv_mVPerQ_
const double apv_mVPerQ_
Definition: SiStripDigitizerAlgorithm.h:188
SiStripSubdetector::TOB
Definition: SiStripEnums.h:5
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
DetId
Definition: DetId.h:17
edm::FileInPath
Definition: FileInPath.h:64
SiStripDigitizerAlgorithm::pdt
const ParticleDataTable * pdt
Definition: SiStripDigitizerAlgorithm.h:140
cms::cuda::bs
bs
Definition: HistoContainer.h:127
SiStripBadStrip::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripBadStrip.h:53
SiStripRawDigi
A Digi for the silicon strip detector, containing only adc information, and suitable for storing raw ...
Definition: SiStripRawDigi.h:15
SiStripDigitizerAlgorithm::lastChannelsWithSignal
std::map< unsigned int, size_t > lastChannelsWithSignal
Definition: SiStripDigitizerAlgorithm.h:158
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
SiStripDigitizerAlgorithm::theFedAlgo
const int theFedAlgo
Definition: SiStripDigitizerAlgorithm.h:128
HLTEgPhaseIITestSequence_cff.bunchSpacing
bunchSpacing
Definition: HLTEgPhaseIITestSequence_cff.py:1574
ntupleEnum.SubDet
SubDet
Definition: ntupleEnum.py:15
SiStripNoises::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:47
SiStripGain::getRange
const SiStripApvGain::Range getRange(uint32_t detID) const
Definition: SiStripGain.h:71
SiStripDigitizerAlgorithm::DigitalRawVecType
SiDigitalConverter::DigitalRawVecType DigitalRawVecType
Definition: SiStripDigitizerAlgorithm.h:60
SiStripDigitizerAlgorithm::theElectronPerADC
const double theElectronPerADC
Definition: SiStripDigitizerAlgorithm.h:130
SiStripFedZeroSuppression
Definition: SiStripFedZeroSuppression.h:16
SiStripDigitizerAlgorithm::cmnRMStid
const double cmnRMStid
Definition: SiStripDigitizerAlgorithm.h:115
edm::ESHandle
Definition: DTSurvey.h:22
SiStripDigitizerAlgorithm::tofCut
const double tofCut
Definition: SiStripDigitizerAlgorithm.h:134
SiStripDigitizerAlgorithm::nTruePU_
unsigned int nTruePU_
Definition: SiStripDigitizerAlgorithm.h:190
Point3DBase< float, LocalTag >
SiStripDigitizerAlgorithm::allBadChannels
std::map< unsigned int, std::vector< bool > > allBadChannels
Definition: SiStripDigitizerAlgorithm.h:154
SiStripApvSimulationParameters::sampleTIB
float sampleTIB(layerid layer, float z, float pu, CLHEP::HepRandomEngine *engine) const
Definition: SiStripApvSimulationParameters.h:51
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SiStripPedestals::getRange
const Range getRange(const uint32_t &detID) const
Definition: SiStripPedestals.cc:28
SiStripDigitizerAlgorithm::inefficiency
const double inefficiency
Definition: SiStripDigitizerAlgorithm.h:136
SiStripDigitizerAlgorithm::FirstLumiCalc_
bool FirstLumiCalc_
Definition: SiStripDigitizerAlgorithm.h:144
SiStripDigitizerAlgorithm::theSiDigitalConverter
const std::unique_ptr< SiTrivialDigitalConverter > theSiDigitalConverter
Definition: SiStripDigitizerAlgorithm.h:150
funct::true
true
Definition: Factorize.h:173
SiStripDigitizerAlgorithm::AssociationInfoForChannel
std::map< int, std::vector< AssociationInfo > > AssociationInfoForChannel
Definition: SiStripDigitizerAlgorithm.h:173
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
SiGaussianTailNoiseAdder
Definition: SiGaussianTailNoiseAdder.h:17
edm::DetSet::emplace_back
decltype(auto) emplace_back(Args &&... args)
Definition: DetSet.h:68
SiStripDigitizerAlgorithm::pedOffset
const double pedOffset
Definition: SiStripDigitizerAlgorithm.h:137
SiStripDigitizerAlgorithm::RealPedestals
const bool RealPedestals
Definition: SiStripDigitizerAlgorithm.h:122
SiStripDigitizerAlgorithm::theSiHitDigitizer
const std::unique_ptr< SiHitDigitizer > theSiHitDigitizer
Definition: SiStripDigitizerAlgorithm.h:147
SiStripDigitizerAlgorithm::apv_maxResponse_
const double apv_maxResponse_
Definition: SiStripDigitizerAlgorithm.h:186
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
createfilelist.int
int
Definition: createfilelist.py:10
SiStripBadStrip::data::firstStrip
unsigned short firstStrip
Definition: SiStripBadStrip.h:33
SiStripDigitizerAlgorithm::theSiZeroSuppress
const std::unique_ptr< SiStripFedZeroSuppression > theSiZeroSuppress
Definition: SiStripDigitizerAlgorithm.h:151
SiStripDigitizerAlgorithm::setParticleDataTable
void setParticleDataTable(const ParticleDataTable *pardt)
Definition: SiStripDigitizerAlgorithm.h:105
SiStripDigitizerAlgorithm::zeroSuppression
const bool zeroSuppression
Definition: SiStripDigitizerAlgorithm.h:129
SiPileUpSignals::SignalMapType
std::map< int, Amplitude > SignalMapType
Definition: SiPileUpSignals.h:20
get
#define get
muonGEMDigis_cfi.instLumi
instLumi
Definition: muonGEMDigis_cfi.py:10
SiStripDigitizerAlgorithm::DigitalVecType
SiDigitalConverter::DigitalVecType DigitalVecType
Definition: SiStripDigitizerAlgorithm.h:59
edm::ESHandleBase::isValid
bool isValid() const
Definition: ESHandle.h:44
SiStripSubdetector::TIB
Definition: SiStripEnums.h:5
SiStripDigitizerAlgorithm::APVSaturationFromHIP
const bool APVSaturationFromHIP
Definition: SiStripDigitizerAlgorithm.h:126
edm::EventSetup::getData
bool getData(T &iHolder) const
Definition: EventSetup.h:113
PedestalClient_cfi.gain
gain
Definition: PedestalClient_cfi.py:37
SiPixelPhase1Clusters_cfi.e3
e3
Definition: SiPixelPhase1Clusters_cfi.py:9
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
SiStripLorentzAngle::getLorentzAngle
float getLorentzAngle(const uint32_t &) const
Definition: SiStripLorentzAngle.cc:15
PileupMixingContent::getMix_bunchSpacing
const int & getMix_bunchSpacing() const
Definition: PileupMixingContent.h:66
edm::DetSet::reserve
void reserve(size_t s)
Definition: DetSet.h:65
mag
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Definition: Basic3DVectorLD.h:127
SiStripDigitizerAlgorithm::theSiPileUpSignals
const std::unique_ptr< SiPileUpSignals > theSiPileUpSignals
Definition: SiStripDigitizerAlgorithm.h:148
TrackerTopology::tobLayer
unsigned int tobLayer(const DetId &id) const
Definition: TrackerTopology.h:147
SiStripDigitizerAlgorithm::cmnRMStob
const double cmnRMStob
Definition: SiStripDigitizerAlgorithm.h:114
SiStripDigitizerAlgorithm::mapOfAPVprobabilities
std::map< int, float > mapOfAPVprobabilities
Definition: SiStripDigitizerAlgorithm.h:181
SiStripDigitizerAlgorithm::APVSaturationProb_
double APVSaturationProb_
Definition: SiStripDigitizerAlgorithm.h:143
SiStripApvGain::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripApvGain.h:28
SiStripLorentzAngleSimRcd
Definition: SiStripCondDataRecords.h:28
SiStripDigitizerAlgorithm::cmnRMStec
const double cmnRMStec
Definition: SiStripDigitizerAlgorithm.h:116
SiTrivialDigitalConverter
Definition: SiTrivialDigitalConverter.h:8
Exception
Definition: hltDiff.cc:246
SiStripDigitizerAlgorithm::theSiNoiseAdder
const std::unique_ptr< const SiGaussianTailNoiseAdder > theSiNoiseAdder
Definition: SiStripDigitizerAlgorithm.h:149
SiStripDigitizerAlgorithm::lorentzAngleHandle
edm::ESHandle< SiStripLorentzAngle > lorentzAngleHandle
Definition: SiStripDigitizerAlgorithm.h:161
SiStripDigitizerAlgorithm::lorentzAngleName
const std::string lorentzAngleName
Definition: SiStripDigitizerAlgorithm.h:111
SiStripDigitizerAlgorithm::FirstDigitize_
bool FirstDigitize_
Definition: SiStripDigitizerAlgorithm.h:145
dqm-mbProfile.log
log
Definition: dqm-mbProfile.py:17
SiStripBadStrip::data::range
unsigned short range
Definition: SiStripBadStrip.h:34
muons2muons_cfi.pu
pu
Definition: muons2muons_cfi.py:31
SiPileUpSignals
Definition: SiPileUpSignals.h:14
SiStripDigitizerAlgorithm::theTOFCutForPeak
const double theTOFCutForPeak
Definition: SiStripDigitizerAlgorithm.h:132
SiStripApvSimulationParameters::sampleTEC
float sampleTEC(layerid wheel, float r, float pu, CLHEP::HepRandomEngine *engine) const
Definition: SiStripApvSimulationParameters.h:60
SiStripPedestals::getPed
float getPed(const uint16_t &strip, const Range &range) const
Definition: SiStripPedestals.cc:51
SiHitDigitizer
Definition: SiHitDigitizer.h:31
SiStripDigitizerAlgorithm::apv_fCPerElectron_
const double apv_fCPerElectron_
Definition: SiStripDigitizerAlgorithm.h:189
JetChargeProducer_cfi.exp
exp
Definition: JetChargeProducer_cfi.py:6
SiStripApvSimulationParameters::sampleTOB
float sampleTOB(layerid layer, float z, float pu, CLHEP::HepRandomEngine *engine) const
Definition: SiStripApvSimulationParameters.h:54
SiStripNoises::getNoise
static float getNoise(uint16_t strip, const Range &range)
Definition: SiStripNoises.h:71
mps_splice.line
line
Definition: mps_splice.py:76
TrackerTopology::tecWheel
unsigned int tecWheel(const DetId &id) const
Definition: TrackerTopology.h:198
StripTopology
Definition: StripTopology.h:11
SiStripDigitizerAlgorithm::peakMode
const bool peakMode
Definition: SiStripDigitizerAlgorithm.h:120
PileupMixingContent::getMix_TrueInteractions
const std::vector< float > & getMix_TrueInteractions() const
Definition: PileupMixingContent.h:64
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
SiStripDigitizerAlgorithm::APVProbabilityFile
edm::FileInPath APVProbabilityFile
Definition: SiStripDigitizerAlgorithm.h:178
SiStripBadStrip::ContainerIterator
std::vector< unsigned int >::const_iterator ContainerIterator
Definition: SiStripBadStrip.h:52
SiStripDigitizerAlgorithm::SiStripTrackerAffectedAPVMap
std::map< int, std::bitset< 6 > > SiStripTrackerAffectedAPVMap
Definition: SiStripDigitizerAlgorithm.h:182
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
SiStripDigitizerAlgorithm::cosmicShift
const double cosmicShift
Definition: SiStripDigitizerAlgorithm.h:135
SiStripSubdetector::TID
Definition: SiStripEnums.h:5
Local3DPoint
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
SiStripBadStrip::data
Definition: SiStripBadStrip.h:32
SiStripDigitizerAlgorithm::APVProbaFile
std::ifstream APVProbaFile
Definition: SiStripDigitizerAlgorithm.h:180
TrackerTopology::tibLayer
unsigned int tibLayer(const DetId &id) const
Definition: TrackerTopology.h:150