SatAndLight  2.2.2-hubble
Simulation toolkit for space telescopes
Camera.h
Go to the documentation of this file.
1 #ifndef __Camera__
2 #define __Camera__
3 
10 #include "CameraConfig.h"
11 #include "Rotation.h"
12 #include <TRandom3.h>
13 #include <TF1.h>
14 #include <TH2.h>
15 #include <TTree.h>
16 #include <TFile.h>
17 #include <TMath.h>
18 
97 class Camera: public Rotation {
98 
99  public:
100 
106 
129  Camera(const int aNbits=14, const int aNy=256, const int aNz=256);
130 
132 
135  virtual ~Camera(void);
141 
147  void WriteMap(const string aOutFileName="./mymaps.root");
148 
150 
156  inline void SetSize(const double aXsize=1.0, const double aYsize=1.0, const double aZsize=1.0){
157  cam_xsize=aXsize;
158  cam_ysize=aYsize;
159  cam_zsize=aZsize;
160  };
161 
163 
166  inline double GetXsize(void){ return cam_xsize; };
167 
169 
172  inline double GetYsize(void){ return cam_ysize; };
173 
175 
178  inline double GetZsize(void){ return cam_zsize; };
179 
181 
188  inline void AddPixelAmplitudeValue(const int aPixIndexY, const int aPixIndexZ, const int aValue){
189  cam_map[pixamplitude]->SetBinContent(aPixIndexY+1,aPixIndexZ+1,TMath::Min(cam_ampmax,(int)cam_map[pixamplitude]->GetBinContent(aPixIndexY+1,aPixIndexZ+1)+aValue));
190  };
191 
193 
202  inline void SetPixelValue(const CAMERA_MAPTYPE aMapType, const int aPixIndexY, const int aPixIndexZ, const int aValue, const double aValueErr=0.0){
203  cam_map[aMapType]->SetBinError(aPixIndexY+1,aPixIndexZ+1,aValueErr);
204  cam_map[aMapType]->SetBinContent(aPixIndexY+1,aPixIndexZ+1,aValue);
205  };
206 
208 
216  inline int GetPixelValue(const CAMERA_MAPTYPE aMapType, const int aPixIndexY, const int aPixIndexZ){
217  return cam_map[aMapType]->GetBinContent(aPixIndexY+1,aPixIndexZ+1);
218  };
219 
221 
229  inline double GetPixelError(const CAMERA_MAPTYPE aMapType, const int aPixIndexY, const int aPixIndexZ){
230  return cam_map[aMapType]->GetBinError(aPixIndexY+1,aPixIndexZ+1);
231  };
232 
234 
237  inline int GetMapNy(void){
238  return cam_map[pixamplitude]->GetNbinsX();
239  };
240 
242 
245  inline int GetMapNz(void){
246  return cam_map[pixamplitude]->GetNbinsY();
247  };
248 
250 
255  inline void ResetMap(const CAMERA_MAPTYPE aMapType){
256  cam_map[aMapType]->Reset();
257  };
258 
260 
267  void GenAmplitudeNoiseMap(void);
268 
270 
275  void SetFrozenBrightY(const int aPixIndexY);
276 
278 
283  void SetFrozenBrightZ(const int aPixIndexZ);
284 
286 
290  void SetRandomPixelBright(const int aN);
291 
293 
297  void SetRandomPixelDead(const int aN);
298 
300 
305  void SetName(const string aName);
306 
308 
311  inline string GetName(void){ return cam_name; };
312 
314 
318  inline void SetTimeResolution(const UInt_t aTimeResolution=100){
319  cam_dt=aTimeResolution;
320  };
321 
323 
326  inline UInt_t GetTimeResolution(void){ return cam_dt; };
327 
329 
333  inline void SetTime(const ULong64_t aTime=0){
334  cam_time=aTime;
335  };
336 
338 
341  inline ULong64_t GetTime(void){ return cam_time; };
342 
344 
350  inline void SetPhotonResolution(const double aPixelResY=1.0, const double aPixelResZ=1.0){
351  cam_photon_gaus[0]->SetParameters(1.0/sqrt(2*TMath::Pi())/aPixelResY*(double)GetMapNy(),
352  0.0,
353  aPixelResY/(double)GetMapNy());
354  cam_photon_gaus[1]->SetParameters(1.0/sqrt(2*TMath::Pi())/aPixelResZ*(double)GetMapNz(),
355  0.0,
356  aPixelResZ/(double)GetMapNz());
357  };
358 
360 
365  inline void SetCosmicRayEnergyLoss(const double aEnergyLoss=1.0){
366  cam_cosmic_pixenergy = aEnergyLoss;
367  };
368 
370 
391  void AddPhoton(const double aEnergy, const double aY, const double aZ,
392  const int aSourceIndex=0, const int aParticleIndex=0);
393 
395 
413  void AddCosmicRay(const double aEnergy, const double aY, const double aZ,
414  const double aCosTheta, const double aSinTheta,
415  const double aCosPhi, const double aSinPhi,
416  const int aSourceIndex=0, const int aParticleIndex=0);
417 
419 
428  void SetMap(const CAMERA_MAPTYPE aMapType, TH2S *aMap);
429 
431 
448  void SetPixelDistributions(const CAMERA_MAPTYPE aMapType,
449  double aPar1=-1.0, double aPar2=-1.0,
450  double aPar3=-1.0, double aPar4=-1.0);
451 
453 
458  void SetGainUniform(const double aGain);
459 
461 
466  void SetGain(TH2F* aGainMap);
467 
469 
489  void TreeInit(void);
490 
492 
497  int TreeFill(void);
498 
500 
504  inline void TreeReset(void){
505  if(cam_tree!=NULL) return cam_tree->Reset();
506  return;
507  };
508 
510 
515  inline int TreeWrite(void){
516  if(cam_tree!=NULL) return cam_tree->Write();
517  return 0;
518  };
519 
521 
524  inline void TreeDelete(void){
525  if(cam_tree!=NULL) delete cam_tree;
526  cam_tree=NULL;
527  return;
528  };
529 
531 
536  inline TH2S* GetMap(const CAMERA_MAPTYPE aMapType){ return cam_map[aMapType]; };
537 
538  protected:
539  TTree *cam_tree;
540  TRandom3 *randgen;
541 
542  private:
543 
544  string cam_name;
545  int cam_nbits;
547  double cam_xsize;
548  double cam_ysize;
549  double cam_zsize;
550  ULong64_t cam_time;
551  UInt_t cam_dt;
552  int cam_hitn;
557 
558  TH2S *cam_map[pixntype];
559  TH2F *cam_gain;
560 
561  TF1 *cam_photon_gaus[2];
565 
566  ClassDef(Camera,0)
567 };
568 
569 #endif
570 
571 
This module is used to configure a CCD camera.
CAMERA_MAPTYPE
Enumerator to describe the different types of maps.
Definition: CameraConfig.h:25
@ pixntype
number of map types.
Definition: CameraConfig.h:29
@ pixamplitude
raw amplitude map.
Definition: CameraConfig.h:26
const int CAMERA_NHITMAX
Maximum number of hits per picture.
Definition: CameraConfig.h:19
This module is used to perform three-dimensional rotations.
CCD camera.
Definition: Camera.h:97
void SetTime(const ULong64_t aTime=0)
Sets the camera time [ms].
Definition: Camera.h:333
virtual ~Camera(void)
Camera class destructor.
Definition: Camera.cc:83
void ResetMap(const CAMERA_MAPTYPE aMapType)
Resets a given map.
Definition: Camera.h:255
TH2S * GetMap(const CAMERA_MAPTYPE aMapType)
Returns a camera map.
Definition: Camera.h:536
TH2F * cam_gain
gain map.
Definition: Camera.h:559
UInt_t cam_dt
electronic integration time [ms].
Definition: Camera.h:551
double cam_photon_resy
Gaussian width for photons (Y): only used for the TTree!!! See TreeFill().
Definition: Camera.h:562
int TreeFill(void)
Fills all the TTree branches with current parameters.
Definition: Camera.cc:155
void TreeInit(void)
Initializes a camera TTree.
Definition: Camera.cc:125
double GetYsize(void)
Returns the camera physical size in the Y direction [mm].
Definition: Camera.h:172
double GetXsize(void)
Returns the camera physical size in the X direction [mm].
Definition: Camera.h:166
void SetMap(const CAMERA_MAPTYPE aMapType, TH2S *aMap)
Sets an external camera map.
Definition: Camera.cc:398
int cam_nbits
number of bits to encode the raw amplitude.
Definition: Camera.h:545
double cam_hitz[CAMERA_NHITMAX]
hit position in the Z direction.
Definition: Camera.h:556
double GetZsize(void)
Returns the camera physical size in the Z direction [mm].
Definition: Camera.h:178
void SetGainUniform(const double aGain)
Sets a uniform gain map.
Definition: Camera.cc:449
void SetSize(const double aXsize=1.0, const double aYsize=1.0, const double aZsize=1.0)
Sets the physical size of the camera CCD.
Definition: Camera.h:156
int GetMapNz(void)
Returns the number of pixels in the Z direction.
Definition: Camera.h:245
void GenAmplitudeNoiseMap(void)
Fills the raw amplitude map with intrinsic pixel noise.
Definition: Camera.cc:324
void SetName(const string aName)
Sets the camera name.
Definition: Camera.cc:108
void SetPixelValue(const CAMERA_MAPTYPE aMapType, const int aPixIndexY, const int aPixIndexZ, const int aValue, const double aValueErr=0.0)
Assigns a value to a given pixel of a given map.
Definition: Camera.h:202
double cam_zsize
physical size in the Z direction [mm].
Definition: Camera.h:549
void SetFrozenBrightY(const int aPixIndexY)
Sets an entire line of pixels (Y) at amplitude saturation.
Definition: Camera.cc:352
void SetFrozenBrightZ(const int aPixIndexZ)
Sets an entire line of pixels (Z) at amplitude saturation.
Definition: Camera.cc:362
void SetRandomPixelBright(const int aN)
Sets a given number of pixels, randomly chosen, at amplitude saturation (dark and read noise maps).
Definition: Camera.cc:372
string cam_name
camera name.
Definition: Camera.h:544
double cam_ysize
physical size in the Y direction [mm].
Definition: Camera.h:548
TRandom3 * randgen
random generator.
Definition: Camera.h:540
double GetPixelError(const CAMERA_MAPTYPE aMapType, const int aPixIndexY, const int aPixIndexZ)
Returns the error value of a given pixel.
Definition: Camera.h:229
double cam_photon_resz
Gaussian width for photons (Z): only used for the TTree!!! See TreeFill().
Definition: Camera.h:563
UInt_t GetTimeResolution(void)
Returns the camera electronic integration time [ms].
Definition: Camera.h:326
int TreeWrite(void)
Writes the TTree to the current directory.
Definition: Camera.h:515
double cam_xsize
physical size in the X direction [mm].
Definition: Camera.h:547
void SetPhotonResolution(const double aPixelResY=1.0, const double aPixelResZ=1.0)
Sets the spatial resolution to inject photons in the camera frame.
Definition: Camera.h:350
int cam_ampmax
maximum raw amplitude.
Definition: Camera.h:546
void SetPixelDistributions(const CAMERA_MAPTYPE aMapType, double aPar1=-1.0, double aPar2=-1.0, double aPar3=-1.0, double aPar4=-1.0)
Sets a Gaussian distribution for a given pixel map.
Definition: Camera.cc:427
void SetRandomPixelDead(const int aN)
Sets a given number of pixels, randomly chosen, at 0 amplitude (dark and read noise maps).
Definition: Camera.cc:385
Camera(const int aNbits=14, const int aNy=256, const int aNz=256)
Camera class constuctor.
TF1 * cam_photon_gaus[2]
Gaussian energy distribution for photons.
Definition: Camera.h:561
int cam_hitn
number of hits.
Definition: Camera.h:552
void AddPhoton(const double aEnergy, const double aY, const double aZ, const int aSourceIndex=0, const int aParticleIndex=0)
Adds one photon to the current amplitude map.
Definition: Camera.cc:172
ULong64_t cam_time
camera time [ms]
Definition: Camera.h:550
double cam_cosmic_pixenergy
Energy loss per pixel (comic ray).
Definition: Camera.h:564
void WriteMap(const string aOutFileName="./mymaps.root")
Write the current camera maps in a ROOT file.
Definition: Camera.cc:94
TH2S * cam_map[pixntype]
pixel amplitude map, pixel intrinsic noise maps.
Definition: Camera.h:558
void TreeReset(void)
Resets baskets, buffers and entries count in all branches and leaves.
Definition: Camera.h:504
void AddCosmicRay(const double aEnergy, const double aY, const double aZ, const double aCosTheta, const double aSinTheta, const double aCosPhi, const double aSinPhi, const int aSourceIndex=0, const int aParticleIndex=0)
Adds one cosmic ray to the current amplitude map.
Definition: Camera.cc:230
void SetTimeResolution(const UInt_t aTimeResolution=100)
Sets the camera electronic integration time [ms].
Definition: Camera.h:318
int cam_hitastro[CAMERA_NHITMAX]
hit astro-particle index.
Definition: Camera.h:554
int GetMapNy(void)
Returns the number of pixels in the Y direction.
Definition: Camera.h:237
void TreeDelete(void)
Deletes the TTree.
Definition: Camera.h:524
void SetCosmicRayEnergyLoss(const double aEnergyLoss=1.0)
Sets the energy loss per pixel for cosmic rays.
Definition: Camera.h:365
int GetPixelValue(const CAMERA_MAPTYPE aMapType, const int aPixIndexY, const int aPixIndexZ)
Returns the value of a given pixel and a given map.
Definition: Camera.h:216
string GetName(void)
Returns the camera name.
Definition: Camera.h:311
ULong64_t GetTime(void)
Returns the camera time [ms].
Definition: Camera.h:341
void SetGain(TH2F *aGainMap)
Sets a gain map.
Definition: Camera.cc:461
int cam_hitsrc[CAMERA_NHITMAX]
hit source index.
Definition: Camera.h:553
TTree * cam_tree
camera tree.
Definition: Camera.h:536
void AddPixelAmplitudeValue(const int aPixIndexY, const int aPixIndexZ, const int aValue)
Increments the amplitude value of a given pixel.
Definition: Camera.h:188
double cam_hity[CAMERA_NHITMAX]
hit position in the Y direction.
Definition: Camera.h:555
Three-dimensional rotations.
Definition: Rotation.h:138