CMS 3D CMS Logo

GaussNoiseFP420.cc
Go to the documentation of this file.
1 // File: GaussNoiseFP420.cc
3 // Date: 12.2006
4 // Description: GaussNoiseFP420 for FP420
5 // Modifications:
7 #include "CLHEP/Random/RandGauss.h"
10 
11 GaussNoiseFP420::GaussNoiseFP420(int ns, float nrms, float th, bool aNpixel, int verbosity)
12  : numPixels(ns), noiseRMS(nrms), threshold(th), addNoisyPixels(aNpixel), verbosi(verbosity) {}
13 
16 
17  // Add noise on non-hit pixels
18  std::map<int, float, std::less<int>> generatedNoise;
19 
20  // int numberOfPixels = (numRows * numColumns);// numPixels=numberOfPixels
21 
23  gen.generate(numPixels, threshold, noiseRMS,
24  generatedNoise); // threshold is thePixelThreshold
25 
26  // noise for channels with signal:
27  // ----------------------------
28 
29  for (PileUpFP420::signal_map_type::const_iterator si = in.begin(); si != in.end(); si++) {
30  if (verbosi > 0) {
31  std::cout << " ***GaussNoiseFP420: before noise:" << std::endl;
32  std::cout << " for si->first= " << si->first << " _signal[si->first]= " << _signal[si->first]
33  << " si->second= " << si->second << std::endl;
34  }
35  // define Gaussian noise centered at 0. with sigma = noiseRMS:
36  float noise(CLHEP::RandGauss::shoot(0., noiseRMS));
37  // float noise = CLHEP::RandGaussQ::shoot(0.,theNoiseInElectrons) ;
38  // add noise to each channel with signal:
39  _signal[si->first] = si->second + noise;
40 
41  if (verbosi > 0) {
42  std::cout << " ***GaussNoiseFP420: after noise added = " << noise << std::endl;
43  std::cout << "after noise added the _signal[si->first]= " << _signal[si->first] << std::endl;
44  }
45  }
46 
47  // //
48  if (addNoisyPixels) { // Option to skip noise in non-hit pixels
49  // Noise on the other channels:
50  typedef std::map<int, float, std::less<int>>::iterator MI;
51  for (MI p = generatedNoise.begin(); p != generatedNoise.end(); p++) {
52  if (_signal[(*p).first] == 0) {
53  _signal[(*p).first] += (*p).second;
54  }
55  } // for(MI
56  }
57 
58  // or:
59  // //
60  /*
61  if(addNoisyPixels){ // Option to skip noise in non-hit pixels
62  // Noise on the other channels:
63  typedef std::map<int,float,std::less<int> >::iterator MI;
64  for(MI p = generatedNoise.begin(); p != generatedNoise.end(); p++){
65  int iy = ((*p).first) / numRows;
66  int ix = ((*p).first) - (iy*numRows);
67  // Keep for a while for testing.
68  if( iy < 0 || iy > (numColumns-1) )
69  LogWarning ("Pixel Geometry") << " error in iy " << iy ;
70  if( ix < 0 || ix > (numRows-1) )
71  LogWarning ("Pixel Geometry") << " error in ix " << ix ;
72  int chan = PixelDigi::pixelToChannel(ix, iy);
73  LogDebug ("Pixel Digitizer")<<" Storing noise = " << (*mapI).first << " " <<
74  (*mapI).second
75  << " " << ix << " " << iy << " " << chan ;
76  if(_signal[chan] == 0){
77  _signal[(*p).first] += (*p).second;
78  }//if
79  }//for(MI
80  }
81  */
82  // //
83  // //
84 
85  //
86  return _signal;
87  //
88 }
89 //
def gen(fragment, howMuch)
Production test section ####.
std::map< int, Amplitude, std::less< int > > signal_map_type
Definition: PileUpFP420.h:13
GaussNoiseFP420(int ns, float nrms, float th, bool aNpixel, int verbosity)
PileUpFP420::signal_map_type addNoise(const PileUpFP420::signal_map_type &) override