Update TRD code from C.Blume
[u/mrichter/AliRoot.git] / TRD / AliTRDv2.h
index 26d0d82..1798d19 100644 (file)
 //  Manager and hits classes for set:TRD version 2    //
 ////////////////////////////////////////////////////////
  
+#include <TF1.h> 
 #include "AliTRD.h"
 
+// Energy spectrum of the delta-rays 
+Double_t Ermilova(Double_t *x, Double_t *par);
+
 class AliTRDv2 : public AliTRD {
 
 public:
   AliTRDv2() {}
   AliTRDv2(const char *name, const char *title);
-  virtual      ~AliTRDv2() {}
-  virtual void  CreateGeometry();
-  virtual void  CreateMaterials();
-  virtual Int_t IsVersion() const {return 2;}
-  virtual void  StepManager();
-  virtual void  Init();
-  virtual void  DrawModule();
+  virtual        ~AliTRDv2();
+  virtual void    CreateGeometry();
+  virtual void    CreateMaterials();
+  virtual Int_t   IsVersion() const {return 2;}
+  virtual void    MakeBranch(Option_t* option);
+  virtual void    StepManager();
+  virtual void    SetSensPlane(Int_t iplane = 0);
+  virtual void    SetSensChamber(Int_t ichamber = 0);
+  virtual void    SetSensSector(Int_t isector = 0);
+  virtual void    Init();
+  virtual void    Hits2Digits(); 
+
+  virtual void    SetRowPadSize(Float_t size)         { fRowPadSize   = size;     };
+  virtual void    SetColPadSize(Float_t size)         { fColPadSize   = size;     };
+  virtual void    SetTimeBinSize(Float_t size)        { fTimeBinSize  = size;     };
+
+  virtual void    SetGasGain(Float_t gasgain)         { fGasGain      = gasgain;  };
+  virtual void    SetNoise(Float_t noise)             { fNoise        = noise;    };
+  virtual void    SetChipGain(Float_t chipgain)       { fChipGain     = chipgain; };
+  virtual void    SetADCoutRange(Float_t range)       { fADCoutRange  = range;    };
+  virtual void    SetADCinRange(Float_t range)        { fADCinRange   = range;    };
+  virtual void    SetADCthreshold(Int_t thresh)       { fADCthreshold = thresh;   };
+  virtual void    SetDiffusionT(Float_t diff)         { fDiffusionT   = diff;     };
+  virtual void    SetDiffusionL(Float_t diff)         { fDiffusionL   = diff;     };
+
+  virtual Float_t GetRowPadSize()                     { return fRowPadSize;   };
+  virtual Float_t GetColPadSize()                     { return fColPadSize;   };
+  virtual Float_t GetTimeBinSize()                    { return fTimeBinSize;  };
+
+  virtual Float_t GetGasGain()                        { return fGasGain;      };
+  virtual Float_t GetNoise()                          { return fNoise;        };
+  virtual Float_t GetChipGain()                       { return fChipGain;     };
+  virtual Float_t GetADCoutRange()                    { return fADCoutRange;  };
+  virtual Float_t GetADCinRange()                     { return fADCinRange;   };
+  virtual Int_t   GetADCthreshold()                   { return fADCthreshold; };
+  virtual Float_t GetDiffusionT()                     { return fDiffusionT;   };
+  virtual Float_t GetDiffusionL()                     { return fDiffusionL;   };
+
+  virtual Int_t   GetRowMax(Int_t iplan, Int_t icham) { return fRowMax[iplan-1][icham-1]; };
+  virtual Int_t   GetColMax(Int_t iplan)              { return fColMax[iplan-1];          };
+  virtual Int_t   GetTimeMax()                        { return fTimeMax;                  };
 
 protected:
-  Int_t        fIdSenO1;    // Sensitive volume identifier for outer chambers
-  Int_t        fIdSenO2;    // Sensitive volume identifier for outer chambers
-  Int_t        fIdSenO3;    // Sensitive volume identifier for outer chambers
-  Int_t        fIdSenO4;    // Sensitive volume identifier for outer chambers
-  Int_t        fIdSenO5;    // Sensitive volume identifier for outer chambers
-  Int_t        fIdSenO6;    // Sensitive volume identifier for outer chambers
-  Int_t        fIdSenI1;    // Sensitive volume identifier for inner chambers
-  Int_t        fIdSenI2;    // Sensitive volume identifier for inner chambers
-  Int_t        fIdSenI3;    // Sensitive volume identifier for inner chambers
-  Int_t        fIdSenI4;    // Sensitive volume identifier for inner chambers
-  Int_t        fIdSenI5;    // Sensitive volume identifier for inner chambers
-  Int_t        fIdSenI6;    // Sensitive volume identifier for inner chambers
-            
+  Int_t        fIdSens;                 // Sensitive volume identifier
+
+  Int_t        fIdSpace1;               // Spaceframe volume identifier
+  Int_t        fIdSpace2;               // 
+  Int_t        fIdSpace3;               // 
+
+  Int_t        fIdChamber1;             // Driftchamber volume identifier
+  Int_t        fIdChamber2;             // 
+  Int_t        fIdChamber3;             // 
+
+  Int_t        fSensSelect;             // Switch to select only parts of the detector
+  Int_t        fSensPlane;              // Sensitive detector plane
+  Int_t        fSensChamber;            // Sensitive detector chamber
+  Int_t        fSensSector;             // Sensitive detector sector
+
+  Int_t        fRowMax[kNplan][kNcham]; // Number of pad-rows
+  Int_t        fColMax[kNplan];         // Number of pad-columns
+  Int_t        fTimeMax;                // Number of time buckets
+
+  Float_t      fRowPadSize;             // Pad size in z-direction
+  Float_t      fColPadSize;             // Pad size in rphi-direction
+  Float_t      fTimeBinSize;            // Size of the time buckets
+
+  Float_t      fGasGain;                // Gas gain
+  Float_t      fNoise;                  // Electronics noise
+  Float_t      fChipGain;               // Electronics gain
+  Float_t      fADCoutRange;            // ADC output range (number of channels)
+  Float_t      fADCinRange;             // ADC input range (input charge)
+  Int_t        fADCthreshold;           // ADC threshold in ADC channel
+  Float_t      fDiffusionT;             // Diffusion in transverse direction
+  Float_t      fDiffusionL;             // Diffusion in logitudinal direction
+
 private:
-  // Inline functions for AliTRDv2
-  
-  inline Float_t Eloss(Float_t rndm)
-    {
-      //
-      // Calculates the energy loss 
-      // 1/E^2. distribution for the fluctuations
-      //
-      // Exponent of the distribution for the energy loss 
-      // 2.0 is the apropriate value for Argon, 2.2 would be for Neon,
-      // and how about Xenon? We take the Argon value for the time being.
-      const Float_t kEexp = 2.0;
-      // First ionization potential for the gas mixture (90% Xe + 10% CO2)
-      // taken from: Ionization Measurements in High Energy Physics, Springer
-      const Float_t kPoti = 12.3E-9;
-      // Maximum energy (10 keV);
-      const Float_t kEend = 10.0E-6;
-      
-      Float_t ex   = 1. - kEexp;
-      Float_t xpot = TMath::Power(kPoti,ex);
-      Float_t xend = TMath::Power(kEend,ex);
-      Float_t elos = (1. - rndm)*xpot + rndm*xend;
-      
-      return(TMath::Power(elos,(1./ex)) - kPoti);
-      
-    }
-  
-  inline Float_t BetheBloch(Float_t xx) 
-    {
-      //
-      // Parametrization of the Bethe-Bloch-curve
-      // The parametrization is the same as for the TPC and is taken from
-      // Lehrhaus.
-      // The parameters have been adjusted to Xe-data found in:
-      // Allison & Cobb, Ann. Rev. Nucl. Sci. (1980), 30, 253
-      //
-      const Float_t kP1 = 0.76176E-1;
-      const Float_t kP2 = 10.632;
-      const Float_t kP3 = 3.17983E-6;
-      const Float_t kP4 = 1.8631;
-      const Float_t kP5 = 1.9479;
-      
-      Float_t yy = xx / TMath::Sqrt(1. + xx*xx);
-      Float_t aa = TMath::Power(yy,kP4);
-      Float_t bb = TMath::Power((1./xx),kP5);
-      bb = TMath::Log(kP3 + bb);
-      
-      return((kP2 - aa - bb)*kP1 / aa);
-      
-    }
-  
-  ClassDef(AliTRDv2,1)     // Transition Radiation Detector version 2
+  virtual Double_t BetheBloch(Double_t bg);
+  virtual void     Diffusion(Float_t driftlength, Float_t *xyz);
+  virtual Float_t  PadResponse(Float_t x);
+
+  TF1         *fDeltaE;                 // Energy distribution of the delta-electrons
+   
+  ClassDef(AliTRDv2,1)                  // Transition Radiation Detector version 2 (slow simulator)
+
 };
 
 #endif