FairRoot/PandaRoot
Public Member Functions | Protected Attributes | Private Member Functions | List of all members
PndDiscNoiseGeneration Class Reference

#include <PndDiscNoiseGeneration.h>

Public Member Functions

 PndDiscNoiseGeneration ()
 
 ~PndDiscNoiseGeneration ()
 
void SetNumberOfSensors (int n_detectors_, int n_readout_modules_, int n_sensors_)
 Set the number of sensors for the whole apparatus. More...
 
void SetSensorGrid (double sensor_width_, double sensor_height_, int n_pixel_x_, int n_pixel_y_)
 Set the pixel grid on the sensors. More...
 
void SetSensorTiling (int sensor_tiles_x, int sensor_tiles_y)
 Set a logical tiling (used for dead time handling) More...
 
void SetPerCellDCR (double dcr_Hz)
 
int GenerateNoise (double t_start_ns, double t_end_ns)
 Generate noise pattern in time window given by t_start, t_end. More...
 
PndDiscDigitizedHitGetNextNoiseDigit ()
 Iterate over all generated hits. More...
 
void Clear ()
 Clears the digit buffer. More...
 

Protected Attributes

TClonesArray * noise_digits
 Memory pool to store the digits. More...
 
int current_index
 current index in pool (used in iteration) More...
 
int n_detectors
 number of detectors More...
 
int n_readout_modules
 number of readout modules on a detector More...
 
int n_sensors
 number of sensors (untiled) at a readout module More...
 
int n_sensor_tiles_x
 number of sensor tiles = number of dies More...
 
int n_sensor_tiles_y
 number of sensor tiles = number of dies More...
 
double half_sensor_width
 
double half_sensor_height
 
int n_pixel_x
 
int n_pixel_y
 
int n_pixel_total
 
double pitch_x
 
double pitch_y
 
double dcr_per_pixel
 

Private Member Functions

bool GetPixelPosition (int n_pixel, double &pos_x, double &pos_y)
 

Detailed Description

Definition at line 19 of file PndDiscNoiseGeneration.h.

Constructor & Destructor Documentation

PndDiscNoiseGeneration::PndDiscNoiseGeneration ( )

Definition at line 23 of file PndDiscNoiseGeneration.cxx.

References noise_digits.

27  n_pixel_x(1), n_pixel_y(1), pitch_x(1.0), pitch_y(1.0),
28  dcr_per_pixel(0.0)
29 {
30  noise_digits = new TClonesArray("PndDiscDigitizedHit");
31 }
int n_sensor_tiles_x
number of sensor tiles = number of dies
int n_readout_modules
number of readout modules on a detector
TClonesArray * noise_digits
Memory pool to store the digits.
int n_sensor_tiles_y
number of sensor tiles = number of dies
int n_sensors
number of sensors (untiled) at a readout module
int n_detectors
number of detectors
int current_index
current index in pool (used in iteration)
PndDiscNoiseGeneration::~PndDiscNoiseGeneration ( )

Definition at line 34 of file PndDiscNoiseGeneration.cxx.

References noise_digits.

34  {
35  if(noise_digits != NULL) delete noise_digits;
36 }
TClonesArray * noise_digits
Memory pool to store the digits.

Member Function Documentation

void PndDiscNoiseGeneration::Clear ( )

Clears the digit buffer.

Definition at line 127 of file PndDiscNoiseGeneration.cxx.

References current_index, and noise_digits.

Referenced by GenerateNoise().

127  {
128  noise_digits->Clear();
129  current_index = 0;
130 }
TClonesArray * noise_digits
Memory pool to store the digits.
int current_index
current index in pool (used in iteration)
int PndDiscNoiseGeneration::GenerateNoise ( double  t_start_ns,
double  t_end_ns 
)

Generate noise pattern in time window given by t_start, t_end.

Definition at line 77 of file PndDiscNoiseGeneration.cxx.

References Clear(), dcr_per_pixel, GetPixelPosition(), half_sensor_height, half_sensor_width, hit(), n_detectors, n_pixel_x, n_readout_modules, n_sensor_tiles_x, n_sensor_tiles_y, n_sensors, and noise_digits.

77  {
78  Clear(); // clear buffer and reset the counter
79 
80  // fill buffer with new noise digits
81  double n_hits_avg = dcr_per_pixel * (t_end_ns - t_start_ns); // average number of hits in time window
82 
83  // compute the tile pitch
84  double tile_pitch_x = half_sensor_width *2.0 / double(n_sensor_tiles_x);
85  double tile_pitch_y = half_sensor_height*2.0 / double(n_sensor_tiles_y);
86 
87  // loop over all sensors:
88  int n_pixel, n_hits, hit, n_total_hits = 0;
89  int sensor_nx, sensor_ny, detector_id, readout_id, sensor_id, sensor_vid;
90  double hit_time, pos_x, pos_y;
91 
92  for(detector_id=0; detector_id<n_detectors; detector_id++) {
93  for(readout_id=0; readout_id < n_readout_modules; readout_id++) {
94  for(sensor_vid=0; sensor_vid<n_sensors; sensor_vid++) {
95  // loop over all pixels of the sensor:
96  for(n_pixel=0; GetPixelPosition(n_pixel, pos_x, pos_y); n_pixel++) {
97  // compute the sensor identifier (tile grouping for dead time handling):
98  sensor_nx = (int)(pos_x + half_sensor_width)/tile_pitch_x;
99  sensor_ny = (int)(pos_y + half_sensor_height)/tile_pitch_y;
100  //sensor_nx = (pos_x < 0 ? 0 : 1);
101  //sensor_ny = (pos_y < 0 ? 0 : 1);
102  sensor_id = sensor_vid*(n_sensor_tiles_x*n_sensor_tiles_y) + sensor_ny*(n_sensor_tiles_x) + sensor_nx + 1;
103 
104  // compute number of hits and distribute these in the time window:
105  n_hits = gRandom->Poisson(n_hits_avg); // hits on this pixel in the given time window
106  for(hit=0; hit < n_hits; hit++) {
107  hit_time = gRandom->Uniform(t_start_ns, t_end_ns);
108  // store noise hit:
109  new ((*noise_digits)[n_total_hits++]) PndDiscDigitizedHit(FairLink(), detector_id, readout_id, sensor_id, sensor_id, n_pixel/n_pixel_x, pos_y, hit_time, hit_time, 1);
110  }
111  }
112  }
113  }
114  }
115  return noise_digits->GetEntries();
116 }
int n_sensor_tiles_x
number of sensor tiles = number of dies
int n_readout_modules
number of readout modules on a detector
TClonesArray * noise_digits
Memory pool to store the digits.
bool GetPixelPosition(int n_pixel, double &pos_x, double &pos_y)
int n_sensor_tiles_y
number of sensor tiles = number of dies
int n_sensors
number of sensors (untiled) at a readout module
int hit(Int_t nEvents=0, TString inFile="sim.root", TString parFile="par.root", TString inDigi="digi.root", TString outFile="hit.root", Int_t timeBased=0)
Definition: hit.C:1
int n_detectors
number of detectors
void Clear()
Clears the digit buffer.
PndDiscDigitizedHit * PndDiscNoiseGeneration::GetNextNoiseDigit ( )

Iterate over all generated hits.

Definition at line 119 of file PndDiscNoiseGeneration.cxx.

References current_index, and GetEntries().

119  {
120  if(current_index < noise_digits->GetEntries())
121  return (PndDiscDigitizedHit*)(*noise_digits)[current_index++];
122  else
123  return NULL;
124 }
cout<<"will loop over "<< t-> GetEntries()
Definition: root2ascii.C:17
int current_index
current index in pool (used in iteration)
bool PndDiscNoiseGeneration::GetPixelPosition ( int  n_pixel,
double &  pos_x,
double &  pos_y 
)
private

Definition at line 69 of file PndDiscNoiseGeneration.cxx.

References half_sensor_height, half_sensor_width, n_pixel_total, n_pixel_x, pitch_x, and pitch_y.

Referenced by GenerateNoise().

69  {
70  if(n_pixel >= n_pixel_total) return false;
71  pos_x = -half_sensor_width + (double(n_pixel % n_pixel_x)+0.5) * pitch_x;
72  pos_y = -half_sensor_height + (double(n_pixel / n_pixel_x)+0.5) * pitch_y;
73  return true;
74 }
void PndDiscNoiseGeneration::SetNumberOfSensors ( int  n_detectors_,
int  n_readout_modules_,
int  n_sensors_ 
)

Set the number of sensors for the whole apparatus.

Definition at line 39 of file PndDiscNoiseGeneration.cxx.

References n_detectors, n_readout_modules, and n_sensors.

39  {
40  // note: a sensor can also be tiled - this is actually the sensitive area at a focusing element.
41  n_detectors = n_detectors_;
42  n_readout_modules = n_readout_modules_;
43  n_sensors = n_sensors_;
44 }
int n_readout_modules
number of readout modules on a detector
int n_sensors
number of sensors (untiled) at a readout module
int n_detectors
number of detectors
void PndDiscNoiseGeneration::SetPerCellDCR ( double  dcr_Hz)
inline

Definition at line 33 of file PndDiscNoiseGeneration.h.

References dcr_per_pixel.

33 { dcr_per_pixel = dcr_Hz*1E-9; }
void PndDiscNoiseGeneration::SetSensorGrid ( double  sensor_width_,
double  sensor_height_,
int  n_pixel_x_,
int  n_pixel_y_ 
)

Set the pixel grid on the sensors.

Definition at line 47 of file PndDiscNoiseGeneration.cxx.

References half_sensor_height, half_sensor_width, n_pixel_total, n_pixel_x, n_pixel_y, pitch_x, and pitch_y.

49 {
50  half_sensor_width = 0.5*sensor_width_;
51  half_sensor_height = 0.5*sensor_height_;
52  n_pixel_x = n_pixel_x_;
53  n_pixel_y = n_pixel_y_;
54 
55  pitch_x = sensor_width_ / double(n_pixel_x);
56  pitch_y = sensor_height_ / double(n_pixel_y);
57 
59 
60 }
void PndDiscNoiseGeneration::SetSensorTiling ( int  sensor_tiles_x,
int  sensor_tiles_y 
)

Set a logical tiling (used for dead time handling)

Definition at line 63 of file PndDiscNoiseGeneration.cxx.

References n_sensor_tiles_x, and n_sensor_tiles_y.

63  {
64  n_sensor_tiles_x = sensor_tiles_x;
65  n_sensor_tiles_y = sensor_tiles_y;
66 }
int n_sensor_tiles_x
number of sensor tiles = number of dies
int n_sensor_tiles_y
number of sensor tiles = number of dies

Member Data Documentation

int PndDiscNoiseGeneration::current_index
protected

current index in pool (used in iteration)

Definition at line 45 of file PndDiscNoiseGeneration.h.

Referenced by Clear(), and GetNextNoiseDigit().

double PndDiscNoiseGeneration::dcr_per_pixel
protected

Definition at line 62 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), and SetPerCellDCR().

double PndDiscNoiseGeneration::half_sensor_height
protected

Definition at line 54 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), GetPixelPosition(), and SetSensorGrid().

double PndDiscNoiseGeneration::half_sensor_width
protected

Definition at line 53 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), GetPixelPosition(), and SetSensorGrid().

int PndDiscNoiseGeneration::n_detectors
protected

number of detectors

Definition at line 47 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), and SetNumberOfSensors().

int PndDiscNoiseGeneration::n_pixel_total
protected

Definition at line 57 of file PndDiscNoiseGeneration.h.

Referenced by GetPixelPosition(), and SetSensorGrid().

int PndDiscNoiseGeneration::n_pixel_x
protected

Definition at line 55 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), GetPixelPosition(), and SetSensorGrid().

int PndDiscNoiseGeneration::n_pixel_y
protected

Definition at line 56 of file PndDiscNoiseGeneration.h.

Referenced by SetSensorGrid().

int PndDiscNoiseGeneration::n_readout_modules
protected

number of readout modules on a detector

Definition at line 48 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), and SetNumberOfSensors().

int PndDiscNoiseGeneration::n_sensor_tiles_x
protected

number of sensor tiles = number of dies

Definition at line 50 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), and SetSensorTiling().

int PndDiscNoiseGeneration::n_sensor_tiles_y
protected

number of sensor tiles = number of dies

Definition at line 51 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), and SetSensorTiling().

int PndDiscNoiseGeneration::n_sensors
protected

number of sensors (untiled) at a readout module

Definition at line 49 of file PndDiscNoiseGeneration.h.

Referenced by GenerateNoise(), and SetNumberOfSensors().

TClonesArray* PndDiscNoiseGeneration::noise_digits
protected

Memory pool to store the digits.

Definition at line 44 of file PndDiscNoiseGeneration.h.

Referenced by Clear(), GenerateNoise(), PndDiscNoiseGeneration(), and ~PndDiscNoiseGeneration().

double PndDiscNoiseGeneration::pitch_x
protected

Definition at line 59 of file PndDiscNoiseGeneration.h.

Referenced by GetPixelPosition(), and SetSensorGrid().

double PndDiscNoiseGeneration::pitch_y
protected

Definition at line 60 of file PndDiscNoiseGeneration.h.

Referenced by GetPixelPosition(), and SetSensorGrid().


The documentation for this class was generated from the following files: