ROOT logo
#ifndef MAPS_DIGINITIALIZE_H
#define MAPS_DIGINITIALIZE_H

#include <TNamed.h>
#include <TList.h>
#include <TGraph.h>
#include "Riostream.h"
#include "vector"

// ROOT classes
#include "TString.h"
#include "TObject.h"
#include "TVector.h"
#include "TFile.h"
#include "TSystem.h"
#include "TRandom.h"
#include "TH1.h"
#include "TH2.h"
#include "TObjArray.h"
#include "TTree.h"
#include "TBranch.h"
#include "TClonesArray.h"
using namespace std;

class DIGInitialize;
class DIGPlane;
class DIGADC;
class DIGBeam;
class DIGTransport;
class DIGParticle;
class DIGAction;
class DIGEvent;
class DIGMAPS;

class DIGInitialize : public TNamed {
 public:
  DIGInitialize();
  DIGInitialize(char *name,char *title, TString aCP, TString aCFN, TString action);
  virtual ~DIGInitialize();
  void         SetConfigPath(TString aCP) ;
  void         SetConfigFileName(TString aCFN) ;
  void         SetConfigPathAndFileName() ;
  void         SetConfigPathAndFileName(TString aCP,TString aCFN) ;
  TString         GetConfigPath() ;
  TString         GetConfigFileName() ;
  TString         GetConfigPathAndFileName() ;

  void         nextItem(Char_t delimiter);
  //  void         read_r3(DR3 &arg);
  void         read_item(Int_t &arg);
  void         read_item(Float_t &arg);
  void         read_item(Double_t &arg);
  void         read_item(Bool_t &arg);


  void PrintInfo();

  struct ActionParameter_t {
    enum       {actionnum = 200};
    Char_t Doit[actionnum];
    Char_t Model[actionnum];

  } ActionParameter; 
  ActionParameter_t& GetActionPar()         {return ActionParameter;}


  struct BeamParameter_t {
    enum       {beamnum = 50};
    Int_t RunNumber; //You can set a run number to compare several configurations.
    Int_t NumberOfEvents; //number of events to run per configuration
    Float_t ParticleDensity; //number of particles per mm^2 per event
    Int_t NAngles;
    Float_t ThetaIncidentDeg[beamnum];
    Float_t PhiIncidentDeg[beamnum];
    Int_t BeamOption;

  } BeamParameter; 
  BeamParameter_t& GetBeamPar()         {return BeamParameter;}

  struct PlaneParameter_t {
    enum       {planenum = 100};
    Int_t NADC;  

    Int_t NTransport;  // <20

    //Int_t NPitch;
    Int_t NGeom;
    Float_t PitchX[planenum];
    Float_t PitchY[planenum];
    //Int_t Nepitaxial;
    Float_t EpitaxialThickness[planenum];
    //Int_t NNoise;
    Float_t NoiseElectrons[planenum];    
    Int_t NPixelsX;
    Int_t NPixelsY;  
    Int_t NTemperature;
    Float_t Temperature[planenum];
    Float_t IonizationEnergy;
    Float_t SegmentSize;
    Float_t MaximumSegmentSize;
    Float_t MaximumChargePerSegment;
    Float_t DiffusionMaximumRangeInX;
    Float_t DiffusionMaximumRangeInY;
    Float_t ReflexionCoefficient;
    Float_t BasicModel_SigmaTenMicrons;

  }PlaneParameter;
  PlaneParameter_t& GetPlanePar()         {return PlaneParameter;}

  struct TransportParameter_t {
    //enum       {transportnum = 20};
    Int_t ChargeModel;
    Float_t RangeLimit_InPitchUnit;
    Float_t Lorentz2DModel_Cp0;
    Float_t Lorentz2DModel_Cp1;
    Float_t   Gauss2DModel_sigma1_Cp0;
    Float_t   Gauss2DModel_sigma1_Cp1;
    Float_t   Gauss2DModel_sigma2_Cp0;
    Float_t   Gauss2DModel_sigma2_Cp1;
    Float_t   Gauss2DModel_weight;

    Float_t   LorGaussModel_Norm1_Cp0;
    Float_t   LorGaussModel_Norm1_Cp1;
    Float_t   LorGaussModel_Norm1_Cp2;
    Float_t   LorGaussModel_sigma_Cp0;
    Float_t   LorGaussModel_sigma_Cp1;
    Float_t   LorGaussModel_C_Cp0;
    Float_t   LorGaussModel_C_Cp1;
    Float_t   LorGaussModel_Norm_Cp0;
    Float_t   LorGaussModel_Norm_Cp1;

  };

  TransportParameter_t *pTransportParameter;
  TransportParameter_t& GetTransportPar(Int_t aPN)         {return pTransportParameter[aPN];}


  struct ADCParameter_t {
    enum       {adcnum = 4096}; //12bits maximum
    Int_t Nbits; //Nbits
    Int_t NThresholds; // actually (2^Nbits)-1
    Bool_t ADC_linear; // 1 if the ADC has a linear gain, 0 otherwise.
    Float_t LSB; //if ADC is linear, threshold of the least significant bit (in Signal/Noise units)
    Float_t Electron_Conversion; // if ADC is linear, the conversion factor for 1 bit beyond the first (ADC count/(Signal/Noise))
    Float_t ADC_thresholds[adcnum]; //if ADC is NOT linear, All thresholds (in Signal/Noise units)

    //Int_t NumberOfPlanes;
    //    Int_t      FileCountOut;         // maximum number of files possible
  };

  ADCParameter_t  *pADCParameter;//! don''t put in streamer
  ADCParameter_t& GetADCPar(Int_t aPN) {return pADCParameter[aPN];} 

 
  //---to add:
  /*
    Temperature
    fluence (neq(1MeV)/cm2)
    radiation dose (krad)
    diodes number/surface
    epi resistivity
    CCE, transport, poisson law used
    delta.
    electronic Noise
    nombre de segments
    attenuation length
    reflexion coeeficient
    ionisation energiemaximum range of diffusion
    maximum length of a segment
    maximum charge of a segment
    gain
    suppression de zero
    fake rate. pixels chauds.
  */

 protected:
  
  TString      fConfigPath;                 // name of the configuration path
  TString      fConfigFileName;             // name of the configuration file
  TString      fConfigPathAndFileName;      // both path and file name appended
  ifstream     fConfigFileStream;
  
 
  ClassDef(DIGInitialize,1);
  
};
//==============================================================================
#endif
 diginitialize.h:1
 diginitialize.h:2
 diginitialize.h:3
 diginitialize.h:4
 diginitialize.h:5
 diginitialize.h:6
 diginitialize.h:7
 diginitialize.h:8
 diginitialize.h:9
 diginitialize.h:10
 diginitialize.h:11
 diginitialize.h:12
 diginitialize.h:13
 diginitialize.h:14
 diginitialize.h:15
 diginitialize.h:16
 diginitialize.h:17
 diginitialize.h:18
 diginitialize.h:19
 diginitialize.h:20
 diginitialize.h:21
 diginitialize.h:22
 diginitialize.h:23
 diginitialize.h:24
 diginitialize.h:25
 diginitialize.h:26
 diginitialize.h:27
 diginitialize.h:28
 diginitialize.h:29
 diginitialize.h:30
 diginitialize.h:31
 diginitialize.h:32
 diginitialize.h:33
 diginitialize.h:34
 diginitialize.h:35
 diginitialize.h:36
 diginitialize.h:37
 diginitialize.h:38
 diginitialize.h:39
 diginitialize.h:40
 diginitialize.h:41
 diginitialize.h:42
 diginitialize.h:43
 diginitialize.h:44
 diginitialize.h:45
 diginitialize.h:46
 diginitialize.h:47
 diginitialize.h:48
 diginitialize.h:49
 diginitialize.h:50
 diginitialize.h:51
 diginitialize.h:52
 diginitialize.h:53
 diginitialize.h:54
 diginitialize.h:55
 diginitialize.h:56
 diginitialize.h:57
 diginitialize.h:58
 diginitialize.h:59
 diginitialize.h:60
 diginitialize.h:61
 diginitialize.h:62
 diginitialize.h:63
 diginitialize.h:64
 diginitialize.h:65
 diginitialize.h:66
 diginitialize.h:67
 diginitialize.h:68
 diginitialize.h:69
 diginitialize.h:70
 diginitialize.h:71
 diginitialize.h:72
 diginitialize.h:73
 diginitialize.h:74
 diginitialize.h:75
 diginitialize.h:76
 diginitialize.h:77
 diginitialize.h:78
 diginitialize.h:79
 diginitialize.h:80
 diginitialize.h:81
 diginitialize.h:82
 diginitialize.h:83
 diginitialize.h:84
 diginitialize.h:85
 diginitialize.h:86
 diginitialize.h:87
 diginitialize.h:88
 diginitialize.h:89
 diginitialize.h:90
 diginitialize.h:91
 diginitialize.h:92
 diginitialize.h:93
 diginitialize.h:94
 diginitialize.h:95
 diginitialize.h:96
 diginitialize.h:97
 diginitialize.h:98
 diginitialize.h:99
 diginitialize.h:100
 diginitialize.h:101
 diginitialize.h:102
 diginitialize.h:103
 diginitialize.h:104
 diginitialize.h:105
 diginitialize.h:106
 diginitialize.h:107
 diginitialize.h:108
 diginitialize.h:109
 diginitialize.h:110
 diginitialize.h:111
 diginitialize.h:112
 diginitialize.h:113
 diginitialize.h:114
 diginitialize.h:115
 diginitialize.h:116
 diginitialize.h:117
 diginitialize.h:118
 diginitialize.h:119
 diginitialize.h:120
 diginitialize.h:121
 diginitialize.h:122
 diginitialize.h:123
 diginitialize.h:124
 diginitialize.h:125
 diginitialize.h:126
 diginitialize.h:127
 diginitialize.h:128
 diginitialize.h:129
 diginitialize.h:130
 diginitialize.h:131
 diginitialize.h:132
 diginitialize.h:133
 diginitialize.h:134
 diginitialize.h:135
 diginitialize.h:136
 diginitialize.h:137
 diginitialize.h:138
 diginitialize.h:139
 diginitialize.h:140
 diginitialize.h:141
 diginitialize.h:142
 diginitialize.h:143
 diginitialize.h:144
 diginitialize.h:145
 diginitialize.h:146
 diginitialize.h:147
 diginitialize.h:148
 diginitialize.h:149
 diginitialize.h:150
 diginitialize.h:151
 diginitialize.h:152
 diginitialize.h:153
 diginitialize.h:154
 diginitialize.h:155
 diginitialize.h:156
 diginitialize.h:157
 diginitialize.h:158
 diginitialize.h:159
 diginitialize.h:160
 diginitialize.h:161
 diginitialize.h:162
 diginitialize.h:163
 diginitialize.h:164
 diginitialize.h:165
 diginitialize.h:166
 diginitialize.h:167
 diginitialize.h:168
 diginitialize.h:169
 diginitialize.h:170
 diginitialize.h:171
 diginitialize.h:172
 diginitialize.h:173
 diginitialize.h:174
 diginitialize.h:175
 diginitialize.h:176
 diginitialize.h:177
 diginitialize.h:178
 diginitialize.h:179
 diginitialize.h:180
 diginitialize.h:181
 diginitialize.h:182
 diginitialize.h:183
 diginitialize.h:184
 diginitialize.h:185
 diginitialize.h:186
 diginitialize.h:187
 diginitialize.h:188