CMS 3D CMS Logo

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

#include <DigiSimLinkAlgorithm.h>

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
DigiSimLinkPileUpSignals::HitCounterToDigisMapType 
HitCounterToDigisMapType
 
typedef
DigiSimLinkPileUpSignals::HitToDigisMapType 
HitToDigisMapType
 

Public Member Functions

 DigiSimLinkAlgorithm (const edm::ParameterSet &conf, CLHEP::HepRandomEngine &)
 
std::vector< StripDigiSimLinkmake_link ()
 
void run (edm::DetSet< SiStripDigi > &, edm::DetSet< SiStripRawDigi > &, const std::vector< std::pair< const PSimHit *, int > > &, StripGeomDetUnit *, GlobalVector, float, edm::ESHandle< SiStripGain > &, edm::ESHandle< SiStripThreshold > &, edm::ESHandle< SiStripNoises > &, edm::ESHandle< SiStripPedestals > &, edm::ESHandle< SiStripBadStrip > &, const TrackerTopology *tTopo)
 
void setParticleDataTable (const ParticleDataTable *pardt)
 
 ~DigiSimLinkAlgorithm ()
 

Private Member Functions

void push_link (const DigitalVecType &, const HitToDigisMapType &, const HitCounterToDigisMapType &, const std::vector< float > &, unsigned int)
 
void push_link_raw (const DigitalRawVecType &, const HitToDigisMapType &, const HitCounterToDigisMapType &, const std::vector< float > &, unsigned int)
 

Private Attributes

bool APVSaturationFromHIP
 
double APVSaturationProb
 
bool BaselineShift
 
double cmnRMStec
 
double cmnRMStib
 
double cmnRMStid
 
double cmnRMStob
 
bool CommonModeNoise
 
edm::ParameterSet conf_
 
double cosmicShift
 
std::vector< float > detAmpl
 
DigitalVecType digis
 
size_t firstChannelWithSignal
 
double inefficiency
 
size_t lastChannelWithSignal
 
std::vector< StripDigiSimLinklink_coll
 
size_t localFirstChannel
 
size_t localLastChannel
 
std::vector< float > locAmpl
 
bool noise
 
int numStrips
 
const ParticleDataparticle
 
const ParticleDataTablepdt
 
bool peakMode
 
double pedOffset
 
DigitalRawVecType rawdigis
 
bool RealPedestals
 
CLHEP::HepRandomEngine & rndEngine
 
bool SingleStripNoise
 
int strip
 
DigiSimLinkPileUpSignalstheDigiSimLinkPileUpSignals
 
double theElectronPerADC
 
int theFedAlgo
 
CLHEP::RandFlat * theFlatDistribution
 
SiTrivialDigitalConvertertheSiDigitalConverter
 
SiHitDigitizertheSiHitDigitizer
 
SiGaussianTailNoiseAddertheSiNoiseAdder
 
SiStripFedZeroSuppressiontheSiZeroSuppress
 
double theThreshold
 
double theTOFCutForDeconvolution
 
double theTOFCutForPeak
 
double tofCut
 
bool zeroSuppression
 

Detailed Description

Definition at line 41 of file DigiSimLinkAlgorithm.h.

Member Typedef Documentation

Definition at line 48 of file DigiSimLinkAlgorithm.h.

Definition at line 44 of file DigiSimLinkAlgorithm.h.

Definition at line 43 of file DigiSimLinkAlgorithm.h.

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

Definition at line 47 of file DigiSimLinkAlgorithm.h.

Definition at line 46 of file DigiSimLinkAlgorithm.h.

Definition at line 45 of file DigiSimLinkAlgorithm.h.

Constructor & Destructor Documentation

DigiSimLinkAlgorithm::DigiSimLinkAlgorithm ( const edm::ParameterSet conf,
CLHEP::HepRandomEngine &  eng 
)

Definition at line 19 of file DigiSimLinkAlgorithm.cc.

References APVSaturationFromHIP, APVSaturationProb, BaselineShift, cmnRMStec, cmnRMStib, cmnRMStid, cmnRMStob, CommonModeNoise, conf_, cosmicShift, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), inefficiency, LogDebug, noise, peakMode, pedOffset, RealPedestals, rndEngine, SingleStripNoise, theDigiSimLinkPileUpSignals, theElectronPerADC, theFedAlgo, theFlatDistribution, theSiDigitalConverter, theSiHitDigitizer, theSiNoiseAdder, theSiZeroSuppress, theThreshold, theTOFCutForDeconvolution, theTOFCutForPeak, tofCut, and zeroSuppression.

19  :
20  conf_(conf),rndEngine(eng){
21  theThreshold = conf_.getParameter<double>("NoiseSigmaThreshold");
22  theFedAlgo = conf_.getParameter<int>("FedAlgorithm");
23  peakMode = conf_.getParameter<bool>("APVpeakmode");
24  theElectronPerADC = conf_.getParameter<double>( peakMode ? "electronPerAdcPeak" : "electronPerAdcDec" );
25  noise = conf_.getParameter<bool>("Noise");
26  zeroSuppression = conf_.getParameter<bool>("ZeroSuppression");
27  theTOFCutForPeak = conf_.getParameter<double>("TOFCutForPeak");
28  theTOFCutForDeconvolution = conf_.getParameter<double>("TOFCutForDeconvolution");
29  cosmicShift = conf_.getUntrackedParameter<double>("CosmicDelayShift");
30  inefficiency = conf_.getParameter<double>("Inefficiency");
31  RealPedestals = conf_.getParameter<bool>("RealPedestals");
32  SingleStripNoise = conf_.getParameter<bool>("SingleStripNoise");
33  CommonModeNoise = conf_.getParameter<bool>("CommonModeNoise");
34  BaselineShift = conf_.getParameter<bool>("BaselineShift");
35  APVSaturationFromHIP = conf_.getParameter<bool>("APVSaturationFromHIP");
36  APVSaturationProb = conf_.getParameter<double>("APVSaturationProb");
37  cmnRMStib = conf_.getParameter<double>("cmnRMStib");
38  cmnRMStob = conf_.getParameter<double>("cmnRMStob");
39  cmnRMStid = conf_.getParameter<double>("cmnRMStid");
40  cmnRMStec = conf_.getParameter<double>("cmnRMStec");
41  pedOffset = (unsigned int)conf_.getParameter<double>("PedestalsOffset");
42  if (peakMode) {
44  LogDebug("StripDigiInfo")<<"APVs running in peak mode (poor time resolution)";
45  } else {
47  LogDebug("StripDigiInfo")<<"APVs running in deconvolution mode (good time resolution)";
48  };
49 
53  theSiDigitalConverter = new SiTrivialDigitalConverter(theElectronPerADC);
55  theFlatDistribution = new CLHEP::RandFlat(rndEngine, 0., 1.);
56 
57 
58 }
#define LogDebug(id)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
SiHitDigitizer * theSiHitDigitizer
CLHEP::HepRandomEngine & rndEngine
edm::ParameterSet conf_
SiStripFedZeroSuppression * theSiZeroSuppress
SiTrivialDigitalConverter * theSiDigitalConverter
SiGaussianTailNoiseAdder * theSiNoiseAdder
DigiSimLinkPileUpSignals * theDigiSimLinkPileUpSignals
CLHEP::RandFlat * theFlatDistribution
DigiSimLinkAlgorithm::~DigiSimLinkAlgorithm ( )

Definition at line 60 of file DigiSimLinkAlgorithm.cc.

References theDigiSimLinkPileUpSignals, theFlatDistribution, theSiDigitalConverter, theSiHitDigitizer, theSiNoiseAdder, and theSiZeroSuppress.

60  {
61  delete theSiHitDigitizer;
63  delete theSiNoiseAdder;
64  delete theSiDigitalConverter;
65  delete theSiZeroSuppress;
66  delete theFlatDistribution;
67  //delete particle;
68  //delete pdt;
69 }
SiHitDigitizer * theSiHitDigitizer
SiStripFedZeroSuppression * theSiZeroSuppress
SiTrivialDigitalConverter * theSiDigitalConverter
SiGaussianTailNoiseAdder * theSiNoiseAdder
DigiSimLinkPileUpSignals * theDigiSimLinkPileUpSignals
CLHEP::RandFlat * theFlatDistribution

Member Function Documentation

std::vector<StripDigiSimLink> DigiSimLinkAlgorithm::make_link ( )
inline

Definition at line 65 of file DigiSimLinkAlgorithm.h.

References link_coll.

Referenced by DigiSimLinkProducer::produce().

65 { return link_coll; }
std::vector< StripDigiSimLink > link_coll
void DigiSimLinkAlgorithm::push_link ( const DigitalVecType digis,
const HitToDigisMapType htd,
const HitCounterToDigisMapType hctd,
const std::vector< float > &  afterNoise,
unsigned int  detID 
)
private

Definition at line 298 of file DigiSimLinkAlgorithm.cc.

References i, link_coll, and dtDQMClient_cfg::threshold.

Referenced by run().

302  {
303  link_coll.clear();
304  for ( DigitalVecType::const_iterator i=digis.begin(); i!=digis.end(); i++) {
305  // Instead of checking the validity of the links against the digis,
306  // let's loop over digis and push the corresponding link
307  HitToDigisMapType::const_iterator mi(htd.find(i->strip()));
308  if (mi == htd.end()) continue;
309  HitCounterToDigisMapType::const_iterator cmi(hctd.find(i->strip()));
310  std::map<const PSimHit *, Amplitude> totalAmplitudePerSimHit;
311  for (std::vector < std::pair < const PSimHit*, Amplitude > >::const_iterator simul =
312  (*mi).second.begin() ; simul != (*mi).second.end(); simul ++){
313  totalAmplitudePerSimHit[(*simul).first] += (*simul).second;
314  }
315 
316  //--- include the noise as well
317  double totalAmplitude1 = afterNoise[(*mi).first];
318 
319  //--- digisimlink
320  int sim_counter=0;
321  for (std::map<const PSimHit *, Amplitude>::const_iterator iter = totalAmplitudePerSimHit.begin();
322  iter != totalAmplitudePerSimHit.end(); iter++){
323  float threshold = 0.;
324  float fraction = (*iter).second/totalAmplitude1;
325  if (fraction >= threshold) {
326  // Noise fluctuation could make fraction>1. Unphysical, set it by hand = 1.
327  if(fraction > 1.) fraction = 1.;
328  for (std::vector<std::pair<const PSimHit*, int > >::const_iterator
329  simcount = (*cmi).second.begin() ; simcount != (*cmi).second.end(); ++simcount){
330  if((*iter).first == (*simcount).first) sim_counter = (*simcount).second;
331  }
332  link_coll.push_back(StripDigiSimLink( (*mi).first, //channel
333  ((*iter).first)->trackId(), //simhit trackId
334  sim_counter, //simhit counter
335  ((*iter).first)->eventId(), //simhit eventId
336  fraction)); //fraction
337  }
338  }
339  }
340 }
int i
Definition: DBlmapReader.cc:9
std::vector< StripDigiSimLink > link_coll
void DigiSimLinkAlgorithm::push_link_raw ( const DigitalRawVecType digis,
const HitToDigisMapType htd,
const HitCounterToDigisMapType hctd,
const std::vector< float > &  afterNoise,
unsigned int  detID 
)
private

Definition at line 342 of file DigiSimLinkAlgorithm.cc.

References i, link_coll, and dtDQMClient_cfg::threshold.

Referenced by run().

346  {
347  link_coll.clear();
348  int nstrip = -1;
349  for ( DigitalRawVecType::const_iterator i=digis.begin(); i!=digis.end(); i++) {
350  nstrip++;
351  // Instead of checking the validity of the links against the digis,
352  // let's loop over digis and push the corresponding link
353  HitToDigisMapType::const_iterator mi(htd.find(nstrip));
354  HitCounterToDigisMapType::const_iterator cmi(hctd.find(nstrip));
355  if (mi == htd.end()) continue;
356  std::map<const PSimHit *, Amplitude> totalAmplitudePerSimHit;
357  for (std::vector < std::pair < const PSimHit*, Amplitude > >::const_iterator simul =
358  (*mi).second.begin() ; simul != (*mi).second.end(); simul ++){
359  totalAmplitudePerSimHit[(*simul).first] += (*simul).second;
360  }
361 
362  //--- include the noise as well
363  double totalAmplitude1 = afterNoise[(*mi).first];
364 
365  //--- digisimlink
366  int sim_counter_raw=0;
367  for (std::map<const PSimHit *, Amplitude>::const_iterator iter = totalAmplitudePerSimHit.begin();
368  iter != totalAmplitudePerSimHit.end(); iter++){
369  float threshold = 0.;
370  float fraction = (*iter).second/totalAmplitude1;
371  if (fraction >= threshold) {
372  //Noise fluctuation could make fraction>1. Unphysical, set it by hand.
373  if(fraction >1.) fraction = 1.;
374  //add counter information
375  for (std::vector<std::pair<const PSimHit*, int > >::const_iterator
376  simcount = (*cmi).second.begin() ; simcount != (*cmi).second.end(); ++simcount){
377  if((*iter).first == (*simcount).first) sim_counter_raw = (*simcount).second;
378  }
379  link_coll.push_back(StripDigiSimLink( (*mi).first, //channel
380  ((*iter).first)->trackId(), //simhit trackId
381  sim_counter_raw, //simhit counter
382  ((*iter).first)->eventId(), //simhit eventId
383  fraction)); //fraction
384  }
385  }
386  }
387 }
int i
Definition: DBlmapReader.cc:9
std::vector< StripDigiSimLink > link_coll
void DigiSimLinkAlgorithm::run ( edm::DetSet< SiStripDigi > &  outdigi,
edm::DetSet< SiStripRawDigi > &  outrawdigi,
const std::vector< std::pair< const PSimHit *, int > > &  input,
StripGeomDetUnit det,
GlobalVector  bfield,
float  langle,
edm::ESHandle< SiStripGain > &  gainHandle,
edm::ESHandle< SiStripThreshold > &  thresholdHandle,
edm::ESHandle< SiStripNoises > &  noiseHandle,
edm::ESHandle< SiStripPedestals > &  pedestalHandle,
edm::ESHandle< SiStripBadStrip > &  deadChannelHandle,
const TrackerTopology tTopo 
)

Definition at line 74 of file DigiSimLinkAlgorithm.cc.

References DigiSimLinkPileUpSignals::add(), SiGaussianTailNoiseAdder::addBaselineShift(), SiGaussianTailNoiseAdder::addCMNoise(), SiGaussianTailNoiseAdder::addNoise(), SiGaussianTailNoiseAdder::addNoiseVR(), SiGaussianTailNoiseAdder::addPedestals(), APVSaturationFromHIP, APVSaturationProb, BaselineShift, DeDxDiscriminatorTools::charge(), cmnRMStec, cmnRMStib, cmnRMStid, cmnRMStob, CommonModeNoise, SiTrivialDigitalConverter::convert(), SiTrivialDigitalConverter::convertRaw(), cosmicShift, gather_cfg::cout, edm::DetSet< T >::data, detAmpl, digis, DigiSimLinkPileUpSignals::dumpCounterLink(), DigiSimLinkPileUpSignals::dumpLink(), firstChannelWithSignal, SiStripBadStrip::data::firstStrip, GeomDet::geographicalId(), inefficiency, LaserDQM_cfg::input, lastChannelWithSignal, localFirstChannel, localLastChannel, locAmpl, mag(), noise, NULL, numStrips, particle, pdt, pedOffset, SiHitDigitizer::processHit(), push_link(), push_link_raw(), SiStripBadStrip::data::range, rawdigis, DetId::rawId(), RealPedestals, DigiSimLinkPileUpSignals::reset(), SingleStripNoise, StripGeomDetUnit::specificTopology(), strip, DetId::subdetId(), SiStripFedZeroSuppression::suppress(), GeomDet::surface(), theDigiSimLinkPileUpSignals, theElectronPerADC, theFlatDistribution, theSiDigitalConverter, theSiHitDigitizer, theSiNoiseAdder, theSiZeroSuppress, tofCut, Surface::toGlobal(), and zeroSuppression.

Referenced by DigiSimLinkProducer::produce().

84  {
86  unsigned int detID = det->geographicalId().rawId();
87  SiStripNoises::Range detNoiseRange = noiseHandle->getRange(detID);
88  SiStripApvGain::Range detGainRange = gainHandle->getRange(detID);
89  SiStripPedestals::Range detPedestalRange = pedestalHandle->getRange(detID);
90  SiStripBadStrip::Range detBadStripRange = deadChannelHandle->getRange(detID);
91  numStrips = (det->specificTopology()).nstrips();
92 
93  //stroing the bad stip of the the module. the module is not removed but just signal put to 0
94  std::vector<bool> badChannels;
95  badChannels.clear();
96  badChannels.insert(badChannels.begin(),numStrips,false);
98  for(SiStripBadStrip::ContainerIterator it=detBadStripRange.first;it!=detBadStripRange.second;++it){
99  fs=deadChannelHandle->decode(*it);
100  for(int strip = fs.firstStrip; strip <fs.firstStrip+fs.range; ++strip )badChannels[strip] = true;
101  }
102 
103 
104  // local amplitude of detector channels (from processed PSimHit)
105 // locAmpl.clear();
106  detAmpl.clear();
107 // locAmpl.insert(locAmpl.begin(),numStrips,0.);
108  // total amplitude of detector channels
109  detAmpl.insert(detAmpl.begin(),numStrips,0.);
110 
113 
114  // First: loop on the SimHits
115  std::vector<std::pair<const PSimHit*, int > >::const_iterator simHitIter = input.begin();
116  std::vector<std::pair<const PSimHit*, int > >::const_iterator simHitIterEnd = input.end();
117  if(theFlatDistribution->fire()>inefficiency) {
118  for (;simHitIter != simHitIterEnd; ++simHitIter) {
119  locAmpl.clear();
120  locAmpl.insert(locAmpl.begin(),numStrips,0.);
121  // check TOF
122  if ( std::fabs( ((*simHitIter).first)->tof() - cosmicShift - det->surface().toGlobal(((*simHitIter).first)->localPosition()).mag()/30.) < tofCut && ((*simHitIter).first)->energyLoss()>0) {
124  localLastChannel = 0;
125  // process the hit
126  theSiHitDigitizer->processHit(((*simHitIter).first),*det,bfield,langle, locAmpl, localFirstChannel, localLastChannel, tTopo);
127 
128  //APV Killer to simulate HIP effect
129  //------------------------------------------------------
130 
132  int pdg_id = ((*simHitIter).first)->particleType();
133  particle = pdt->particle(pdg_id);
134  if(particle != NULL){
135  float charge = particle->charge();
136  bool isHadron = particle->isHadron();
137  if(charge!=0 && isHadron){
139  int FirstAPV = localFirstChannel/128;
140  int LastAPV = localLastChannel/128;
141  std::cout << "-------------------HIP--------------" << std::endl;
142  std::cout << "Killing APVs " << FirstAPV << " - " <<LastAPV << " " << detID <<std::endl;
143  for(int strip = FirstAPV*128; strip < LastAPV*128 +128; ++strip) badChannels[strip] = true; //doing like that I remove the signal information only after the
144  //stip that got the HIP but it remains the signal of the previous
145  //one. I'll make a further loop to remove all signal
146 
147  }
148  }
149  }
150  }
151 
152 
153  theDigiSimLinkPileUpSignals->add(locAmpl, localFirstChannel, localLastChannel, ((*simHitIter).first), (*simHitIter).second);
154 
155  // sum signal on strips
156  for (size_t iChannel=localFirstChannel; iChannel<localLastChannel; iChannel++) {
157  if(locAmpl[iChannel]>0.) {
158  //if(!badChannels[iChannel]) detAmpl[iChannel]+=locAmpl[iChannel];
159  //locAmpl[iChannel]=0;
160  detAmpl[iChannel]+=locAmpl[iChannel];
161  }
162  }
165  }
166  }
167  }
168 
169  //removing signal from the dead (and HIP effected) strips
170  for(int strip =0; strip < numStrips; ++strip) if(badChannels[strip]) detAmpl[strip] =0;
171 
174 
175  if(zeroSuppression){
176  if(noise){
177  int RefStrip = int(numStrips/2.);
178  while(RefStrip<numStrips&&badChannels[RefStrip]){ //if the refstrip is bad, I move up to when I don't find it
179  RefStrip++;
180  }
181  if(RefStrip<numStrips){
182  float noiseRMS = noiseHandle->getNoise(RefStrip,detNoiseRange);
183  float gainValue = gainHandle->getStripGain(RefStrip, detGainRange);
185  }
186  }
187  digis.clear();
188  theSiZeroSuppress->suppress(theSiDigitalConverter->convert(detAmpl, gainHandle, detID), digis, detID,noiseHandle,thresholdHandle);
189  push_link(digis, theLink, theCounterLink, detAmpl,detID);
190  outdigi.data = digis;
191  }
192 
193 
194  if(!zeroSuppression){
195  //if(noise){
196  // the constant pedestal offset is needed because
197  // negative adc counts are not allowed in case
198  // Pedestal and CMN subtraction is performed.
199  // The pedestal value read from the conditions
200  // is pedValue and after the pedestal subtraction
201  // the baseline is zero. The Common Mode Noise
202  // is not subtracted from the negative adc counts
203  // channels. Adding pedOffset the baseline is set
204  // to pedOffset after pedestal subtraction and CMN
205  // is subtracted to all the channels since none of
206  // them has negative adc value. The pedOffset is
207  // treated as a constant component in the CMN
208  // estimation and subtracted as CMN.
209 
210 
211  //calculating the charge deposited on each APV and subtracting the shift
212  //------------------------------------------------------
213  if(BaselineShift){
215  }
216 
217  //Adding the strip noise
218  //------------------------------------------------------
219  if(noise){
220  std::vector<float> noiseRMSv;
221  noiseRMSv.clear();
222  noiseRMSv.insert(noiseRMSv.begin(),numStrips,0.);
223 
224  if(SingleStripNoise){
225  for(int strip=0; strip< numStrips; ++strip){
226  if(!badChannels[strip]) noiseRMSv[strip] = (noiseHandle->getNoise(strip,detNoiseRange))* theElectronPerADC;
227  }
228 
229  } else {
230  int RefStrip = 0; //int(numStrips/2.);
231  while(RefStrip<numStrips&&badChannels[RefStrip]){ //if the refstrip is bad, I move up to when I don't find it
232  RefStrip++;
233  }
234  if(RefStrip<numStrips){
235  float noiseRMS = noiseHandle->getNoise(RefStrip,detNoiseRange) *theElectronPerADC;
236  for(int strip=0; strip< numStrips; ++strip){
237  if(!badChannels[strip]) noiseRMSv[strip] = noiseRMS;
238  }
239  }
240  }
241 
242  theSiNoiseAdder->addNoiseVR(detAmpl, noiseRMSv);
243  }
244 
245  //adding the CMN
246  //------------------------------------------------------
247  if(CommonModeNoise){
248  float cmnRMS = 0.;
249  DetId detId(detID);
250  uint32_t SubDet = detId.subdetId();
251  if(SubDet==3){
252  cmnRMS = cmnRMStib;
253  }else if(SubDet==4){
254  cmnRMS = cmnRMStid;
255  }else if(SubDet==5){
256  cmnRMS = cmnRMStob;
257  }else if(SubDet==6){
258  cmnRMS = cmnRMStec;
259  }
260  cmnRMS *= theElectronPerADC;
261  theSiNoiseAdder->addCMNoise(detAmpl, cmnRMS, badChannels);
262  }
263 
264 
265  //Adding the pedestals
266  //------------------------------------------------------
267 
268  std::vector<float> vPeds;
269  vPeds.clear();
270  vPeds.insert(vPeds.begin(),numStrips,0.);
271 
272  if(RealPedestals){
273  for(int strip=0; strip< numStrips; ++strip){
274  if(!badChannels[strip]) vPeds[strip] = (pedestalHandle->getPed(strip,detPedestalRange)+pedOffset)* theElectronPerADC;
275  }
276  } else {
277  for(int strip=0; strip< numStrips; ++strip){
278  if(!badChannels[strip]) vPeds[strip] = pedOffset* theElectronPerADC;
279  }
280  }
281 
283 
284 
285  //if(!RealPedestals&&!CommonModeNoise&&!noise&&!BaselineShift&&!APVSaturationFromHIP){
286  // edm::LogWarning("DigiSimLinkAlgorithm")<<"You are running the digitizer without Noise generation and without applying Zero Suppression. ARE YOU SURE???";
287  //}else{
288 
289  rawdigis.clear();
290  rawdigis = theSiDigitalConverter->convertRaw(detAmpl, gainHandle, detID);
291  push_link_raw(rawdigis, theLink, theCounterLink, detAmpl,detID);
292  outrawdigi.data = rawdigis;
293 
294  //}
295  }
296 }
unsigned short range
void push_link(const DigitalVecType &, const HitToDigisMapType &, const HitCounterToDigisMapType &, const std::vector< float > &, unsigned int)
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:114
void processHit(const PSimHit *, const StripGeomDetUnit &, GlobalVector, float, std::vector< float > &, size_t &, size_t &, const TrackerTopology *tTopo)
SiHitDigitizer * theSiHitDigitizer
DigitalVecType convert(const std::vector< float > &, edm::ESHandle< SiStripGain > &, unsigned int detid)
DigitalRawVecType rawdigis
SiStripFedZeroSuppression * theSiZeroSuppress
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
std::vector< unsigned int >::const_iterator ContainerIterator
#define NULL
Definition: scimark2.h:8
std::pair< ContainerIterator, ContainerIterator > Range
const ParticleDataTable * pdt
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:35
double charge(const std::vector< uint8_t > &Ampls)
void push_link_raw(const DigitalRawVecType &, const HitToDigisMapType &, const HitCounterToDigisMapType &, const std::vector< float > &, unsigned int)
uint32_t rawId() const
get the raw id
Definition: DetId.h:45
void addPedestals(std::vector< float > &, std::vector< float > &) const
SiTrivialDigitalConverter * theSiDigitalConverter
DigitalRawVecType convertRaw(const std::vector< float > &, edm::ESHandle< SiStripGain > &, unsigned int detid)
virtual void add(const std::vector< float > &locAmpl, const size_t &firstChannelWithSignal, const size_t &lastChannelWithSignal, const PSimHit *hit, const int &counter)
std::vector< float > detAmpl
SiGaussianTailNoiseAdder * theSiNoiseAdder
const HitToDigisMapType & dumpLink() const
void suppress(const std::vector< SiStripDigi > &, std::vector< SiStripDigi > &, const uint32_t &, edm::ESHandle< SiStripNoises > &, edm::ESHandle< SiStripThreshold > &)
std::pair< ContainerIterator, ContainerIterator > Range
DetId geographicalId() const
The label of this GeomDet.
Definition: GeomDet.h:72
void addNoiseVR(std::vector< float > &, std::vector< float > &) const
const HitCounterToDigisMapType & dumpCounterLink() const
void addBaselineShift(std::vector< float > &, std::vector< bool > &) const
Definition: DetId.h:20
const ParticleData * particle
unsigned short firstStrip
collection_type data
Definition: DetSet.h:79
std::pair< ContainerIterator, ContainerIterator > Range
DigiSimLinkPileUpSignals * theDigiSimLinkPileUpSignals
void addNoise(std::vector< float > &, size_t &, size_t &, int, float) const
tuple cout
Definition: gather_cfg.py:121
std::map< int, std::vector< std::pair< const PSimHit *, Amplitude > >, std::less< int > > HitToDigisMapType
std::map< int, std::vector< std::pair< const PSimHit *, int > >, std::less< int > > HitCounterToDigisMapType
std::vector< float > locAmpl
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripNoises.h:41
CLHEP::RandFlat * theFlatDistribution
void addCMNoise(std::vector< float > &, float, std::vector< bool > &) const
void DigiSimLinkAlgorithm::setParticleDataTable ( const ParticleDataTable pardt)
inline

Definition at line 68 of file DigiSimLinkAlgorithm.h.

References pdt, SiHitDigitizer::setParticleDataTable(), and theSiHitDigitizer.

Referenced by DigiSimLinkProducer::produce().

68  {
70  pdt= pardt;
71  }
SiHitDigitizer * theSiHitDigitizer
const ParticleDataTable * pdt
void setParticleDataTable(const ParticleDataTable *pdt)

Member Data Documentation

bool DigiSimLinkAlgorithm::APVSaturationFromHIP
private

Definition at line 88 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

double DigiSimLinkAlgorithm::APVSaturationProb
private

Definition at line 81 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

bool DigiSimLinkAlgorithm::BaselineShift
private

Definition at line 87 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

double DigiSimLinkAlgorithm::cmnRMStec
private

Definition at line 80 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

double DigiSimLinkAlgorithm::cmnRMStib
private

Definition at line 77 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

double DigiSimLinkAlgorithm::cmnRMStid
private

Definition at line 79 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

double DigiSimLinkAlgorithm::cmnRMStob
private

Definition at line 78 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

bool DigiSimLinkAlgorithm::CommonModeNoise
private

Definition at line 86 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

edm::ParameterSet DigiSimLinkAlgorithm::conf_
private

Definition at line 74 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm().

double DigiSimLinkAlgorithm::cosmicShift
private

Definition at line 99 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

std::vector<float> DigiSimLinkAlgorithm::detAmpl
private

Definition at line 111 of file DigiSimLinkAlgorithm.h.

Referenced by run().

DigitalVecType DigiSimLinkAlgorithm::digis
private

Definition at line 123 of file DigiSimLinkAlgorithm.h.

Referenced by run().

size_t DigiSimLinkAlgorithm::firstChannelWithSignal
private

Definition at line 103 of file DigiSimLinkAlgorithm.h.

Referenced by run().

double DigiSimLinkAlgorithm::inefficiency
private

Definition at line 100 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

size_t DigiSimLinkAlgorithm::lastChannelWithSignal
private

Definition at line 104 of file DigiSimLinkAlgorithm.h.

Referenced by run().

std::vector<StripDigiSimLink> DigiSimLinkAlgorithm::link_coll
private

Definition at line 125 of file DigiSimLinkAlgorithm.h.

Referenced by make_link(), push_link(), and push_link_raw().

size_t DigiSimLinkAlgorithm::localFirstChannel
private

Definition at line 105 of file DigiSimLinkAlgorithm.h.

Referenced by run().

size_t DigiSimLinkAlgorithm::localLastChannel
private

Definition at line 106 of file DigiSimLinkAlgorithm.h.

Referenced by run().

std::vector<float> DigiSimLinkAlgorithm::locAmpl
private

Definition at line 109 of file DigiSimLinkAlgorithm.h.

Referenced by run().

bool DigiSimLinkAlgorithm::noise
private

Definition at line 83 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

int DigiSimLinkAlgorithm::numStrips
private

Definition at line 95 of file DigiSimLinkAlgorithm.h.

Referenced by run().

const ParticleData* DigiSimLinkAlgorithm::particle
private

Definition at line 114 of file DigiSimLinkAlgorithm.h.

Referenced by run().

const ParticleDataTable* DigiSimLinkAlgorithm::pdt
private

Definition at line 113 of file DigiSimLinkAlgorithm.h.

Referenced by run(), and setParticleDataTable().

bool DigiSimLinkAlgorithm::peakMode
private

Definition at line 82 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm().

double DigiSimLinkAlgorithm::pedOffset
private

Definition at line 101 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

DigitalRawVecType DigiSimLinkAlgorithm::rawdigis
private

Definition at line 124 of file DigiSimLinkAlgorithm.h.

Referenced by run().

bool DigiSimLinkAlgorithm::RealPedestals
private

Definition at line 84 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

CLHEP::HepRandomEngine& DigiSimLinkAlgorithm::rndEngine
private

Definition at line 121 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm().

bool DigiSimLinkAlgorithm::SingleStripNoise
private

Definition at line 85 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

int DigiSimLinkAlgorithm::strip
private

Definition at line 96 of file DigiSimLinkAlgorithm.h.

Referenced by run().

DigiSimLinkPileUpSignals* DigiSimLinkAlgorithm::theDigiSimLinkPileUpSignals
private

Definition at line 117 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), run(), and ~DigiSimLinkAlgorithm().

double DigiSimLinkAlgorithm::theElectronPerADC
private

Definition at line 75 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

int DigiSimLinkAlgorithm::theFedAlgo
private

Definition at line 90 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm().

CLHEP::RandFlat* DigiSimLinkAlgorithm::theFlatDistribution
private

Definition at line 126 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), run(), and ~DigiSimLinkAlgorithm().

SiTrivialDigitalConverter* DigiSimLinkAlgorithm::theSiDigitalConverter
private

Definition at line 119 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), run(), and ~DigiSimLinkAlgorithm().

SiHitDigitizer* DigiSimLinkAlgorithm::theSiHitDigitizer
private
SiGaussianTailNoiseAdder* DigiSimLinkAlgorithm::theSiNoiseAdder
private

Definition at line 118 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), run(), and ~DigiSimLinkAlgorithm().

SiStripFedZeroSuppression* DigiSimLinkAlgorithm::theSiZeroSuppress
private

Definition at line 120 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), run(), and ~DigiSimLinkAlgorithm().

double DigiSimLinkAlgorithm::theThreshold
private

Definition at line 76 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm().

double DigiSimLinkAlgorithm::theTOFCutForDeconvolution
private

Definition at line 93 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm().

double DigiSimLinkAlgorithm::theTOFCutForPeak
private

Definition at line 92 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm().

double DigiSimLinkAlgorithm::tofCut
private

Definition at line 94 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().

bool DigiSimLinkAlgorithm::zeroSuppression
private

Definition at line 91 of file DigiSimLinkAlgorithm.h.

Referenced by DigiSimLinkAlgorithm(), and run().