]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDdigitizer.h
First implementation of calibration scheme by Jan Fiete
[u/mrichter/AliRoot.git] / TRD / AliTRDdigitizer.h
index 9d773b9aad98ea419d52eec6501b203354fc46d6..4706a2ed8047c815d481136ace75d2eb57f644d1 100644 (file)
 
 /* $Id$ */
 
-#include <TNamed.h>
+#include "AliDigitizer.h"
 
 class TFile;
 class TF1;
 
+class AliRunDigitizer;
+class AliRunLoader;
+
 class AliTRD;
 class AliTRDdigitsManager;
 class AliTRDgeometry;
+class AliTRDparameter;
 
 ///////////////////////////////////////////////////////
 //  Produces digits from the hits information        //
 ///////////////////////////////////////////////////////
 
-class AliTRDdigitizer : public TNamed {
+class AliTRDdigitizer : public AliDigitizer {
 
  public:
 
   AliTRDdigitizer();
   AliTRDdigitizer(const Text_t* name, const Text_t* title);
+  AliTRDdigitizer(AliRunDigitizer *manager, const Text_t* name, const Text_t* title);
+  AliTRDdigitizer(AliRunDigitizer *manager);
   AliTRDdigitizer(const AliTRDdigitizer &d);
   virtual ~AliTRDdigitizer();
   AliTRDdigitizer &operator=(const AliTRDdigitizer &d);
 
-  virtual void         Copy(TObject &d);
-  virtual void         Init();
-  virtual Bool_t       Open(const Char_t *name, Int_t nEvent = 0);
-  virtual Bool_t       MakeDigits();
-  virtual Bool_t       Merge(TTree *trees, Int_t *mask, Int_t nin, Int_t event);
-  virtual void         ReInit();
-  virtual Bool_t       SumSDigits();
-  virtual Bool_t       WriteDigits();
+  virtual void         Copy(TObject &d) const;
   virtual Bool_t       InitDetector();
-
-  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         SetDiffusion(Int_t diffOn = 1)       { fDiffusionOn    = diffOn;   };
-  virtual void         SetElAttach(Int_t elOn = 1)          { fElAttachOn     = elOn;     };
-  virtual void         SetElAttachProp(Float_t prop)        { fElAttachProp   = prop;     };
-  virtual void         SetExB(Int_t exbOn = 1)              { fExBOn          = exbOn;    };
-  virtual void         SetPadResponse(Int_t prfOn = 1)      { fPRFOn          = prfOn;    };
-  virtual void         SetTimeResponse(Int_t trfOn = 1)     { fTRFOn          = trfOn;   
-                                                              ReInit();                   };
-  virtual void         SetDriftVelocity(Float_t v)          { fDriftVelocity  = v;       
-                                                              ReInit();                   };
-  virtual void         SetPadCoupling(Float_t v)            { fPadCoupling    = v;        };
-  virtual void         SetTimeCoupling(Float_t v)           { fTimeCoupling   = v;        };
-  virtual void         SetCompress(Int_t c = 1)             { fCompress       = c;        };
-  virtual void         SetVerbose(Int_t v = 1)              { fVerbose        = v;        };
-  virtual void         SetSDigits(Int_t v = 1)              { fSDigits        = v;        };
-  virtual void         SetEvent(Int_t v = 0)                { fEvent          = v;        };
-  virtual void         SetManager(AliTRDdigitsManager *man) { fDigits         = man;      };    
-
-  AliTRDdigitsManager *Digits() const                       { return fDigits;             };
-
-          Float_t      GetGasGain() const                   { return fGasGain;            };
-          Float_t      GetNoise() const                     { return fNoise;              };
-          Float_t      GetChipGain() const                  { return fChipGain;           };
-          Float_t      GetADCoutRange() const               { return fADCoutRange;        };
-          Float_t      GetADCinRange() const                { return fADCinRange;         };
-          Int_t        GetADCthreshold() const              { return fADCthreshold;       };
-          Float_t      GetDiffusionT() const                { return fDiffusionT;         };
-          Float_t      GetDiffusionL() const                { return fDiffusionL;         };
-          Float_t      GetElAttachProp() const              { return fElAttachProp;       };
-          Int_t        GetExB() const                       { return fExBOn;              };
-          Float_t      GetOmegaTau() const                  { return fOmegaTau;           };
-          Float_t      GetDriftVelocity() const             { return fDriftVelocity;      };
-          Float_t      GetPadCoupling() const               { return fPadCoupling;        };
-          Float_t      GetTimeCoupling() const              { return fTimeCoupling;       };
-          Bool_t       GetCompress() const                  { return fCompress;           };
-          Bool_t       GetSDigits() const                   { return fSDigits;            };
-          Float_t      GetTimeBinWidth() const              { return fTimeBinWidth;       };
-  virtual Float_t      GetDiffusionL(Float_t vd, Float_t b);
-  virtual Float_t      GetDiffusionT(Float_t vd, Float_t b);
-  virtual Float_t      GetOmegaTau(Float_t vd, Float_t b);
-
- protected:
-
-  TFile               *fInputFile;       //! ALIROOT-filename
-  AliTRDdigitsManager *fDigits;          //! TRD digits manager
-  AliTRD              *fTRD;             //! TRD detector class
-  AliTRDgeometry      *fGeo;             //! TRD geometry
+  virtual void         Exec(Option_t* option = 0);  
+  virtual Bool_t       Open(const Char_t *file, Int_t nEvent = 0);
+  virtual Bool_t       MakeBranch(TTree* tree) const;
+  virtual Bool_t       MakeDigits();
+  virtual void         AddSDigitsManager(AliTRDdigitsManager *manager);
+  virtual void         DeleteSDigitsManager();
+  virtual Bool_t       ConvertSDigits();
+  virtual Bool_t       MergeSDigits();
+  virtual Bool_t       SDigits2Digits();
+  virtual Bool_t       WriteDigits() const;
+
+          void         InitOutput(Int_t iEvent);
+  virtual void         SetCompress(Int_t c = 1)             { fCompress        = c;   };
+  virtual void         SetDebug(Int_t v = 1)                { fDebug           = v;   };
+  virtual void         SetSDigits(Int_t v = 1)              { fSDigits         = v;   };
+  virtual void         SetSDigitsScale(Float_t s)           { fSDigitsScale    = s;   };
+  virtual void         SetEvent(Int_t v = 0)                { fEvent           = v;   };
+  virtual void         SetManager(AliTRDdigitsManager *man) { fDigitsManager   = man; };   
+  virtual void         SetGeometry(AliTRDgeometry *geo)     { fGeo             = geo; };
+  virtual void         SetParameter(AliTRDparameter *par)   { fPar             = par; };
+  virtual void         SetMergeSignalOnly(Bool_t m = kTRUE) { fMergeSignalOnly = m;   };
+  virtual void         SetSimple(Int_t v = 1)               { fSimpleSim       = v;
+                                                              fSimpleDet       = 12;
+                                                              fCompress        = kFALSE; };
+
+  AliTRDdigitsManager *Digits()                       const { return fDigitsManager; };
+
+  Bool_t       GetCompress()                  const { return fCompress;      };
+  Bool_t       GetSDigits()                   const { return fSDigits;       };
+  Float_t      GetSDigitsScale()              const { return fSDigitsScale;  };
+  AliTRDparameter     *GetParameter()                 const { return fPar;           };
+  Bool_t       GetSimple()                    const { return fSimpleSim;     };
+
+  virtual Double_t TimeStruct(Float_t vdrift, Double_t time, Double_t z);  
+
+  Float_t GetDiffusionT(Float_t vdrift);
+  Float_t GetDiffusionL(Float_t vdrift);
+  virtual Int_t Diffusion(Float_t vdrift, Double_t driftlength, Double_t *xyz);
+
+  Float_t GetLorentzFactor(Float_t vdrift);
+  virtual Int_t ExB(Float_t vdrift, Double_t driftlength, Double_t *xyz);  
+  
+  protected:
+
+  //TFile               *fInputFile;          //! ALIROOT-file
+  AliRunLoader        *fRunLoader;          //! Local pointer
+  AliTRDdigitsManager *fDigitsManager;      //! Manager for the output digits
+  AliTRDdigitsManager *fSDigitsManager;     //! Manager for the summed input s-digits
+  TList               *fSDigitsManagerList; //! List of managers of input s-digits
+  AliTRD              *fTRD;                //! TRD detector class
+  AliTRDgeometry      *fGeo;                //! TRD geometry
+  AliTRDparameter     *fPar;          //  TRD common parameter object
+  Int_t                fEvent;              //! Event number
+  Int_t               *fMasks;              //! Masks for the merging
+  Bool_t               fCompress;           //  Switch to keep only compressed data in memory
+  Int_t                fDebug;              //  Sets the debug level
+  Bool_t               fSDigits;            //  Switch for the summable digits
+  Float_t              fSDigitsScale;       //  Scale factor for the summable digits 
+  Bool_t               fMergeSignalOnly;    //  Merge only detectors that contain a signal
+  Bool_t               fSimpleSim;          //  Switch for the simplified simulation
+  Int_t                fSimpleDet;          //  Detecttor number used in the simplified simulation
+  void SampleTimeStruct(Float_t vdrift);
+  void RecalcDiffusion(Float_t vdrift);
+  
+  struct
+  {
+    Float_t fLastVdrift;                                      //  the structures are valid for fLastVdrift (caching)
+    Float_t fDiffusionT;
+    Float_t fDiffusionL;
+    Float_t              fOmegaTau;                           //  Tangens of the Lorentz angle
+    Float_t              fLorentzFactor;                      //  Factor due to Lorentz force
+  } fDiffusionInfo;
+    
+  struct 
+  {
+    Float_t fLastVdrift;                                      //  the structures are valid for fLastVdrift (caching)
+    Float_t             *fTimeStruct1;                        //! Time Structure of Drift Cells
+    Float_t             *fTimeStruct2;                        //! Time Structure of Drift Cells
+    Float_t              fVDlo;                               //  Lower drift velocity, for interpolation
+    Float_t              fVDhi;                               //  Higher drift velocity, for interpolation
+  } fTimeStructInfo;
   
-  Int_t                fEvent;           //! Event number
-
-  Float_t              fField;           // Magnetic field
-  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)
-  Float_t              fSinRange;        // Input range for summable digits 
-  Float_t              fSoutRange;       // Output range for summable digits 
-  Int_t                fADCthreshold;    // ADC threshold in ADC channel
-  Int_t                fDiffusionOn;     // Switch for the diffusion
-  Float_t              fDiffusionT;      // Diffusion in transverse direction
-  Float_t              fDiffusionL;      // Diffusion in longitudinal direction
-  Int_t                fElAttachOn;      // Switch for the electron attachment
-  Float_t              fElAttachProp;    // Propability for electron attachment (for 1m)
-  Int_t                fExBOn;           // Switch for the ExB effects
-  Float_t              fOmegaTau;        // Tangens of the Lorentz angle 
-  Float_t              fLorentzFactor;   // Factor due to Lorentz force
-  Int_t                fPRFOn;           // Switch for the pad response
-  Float_t             *fPRFsmp;          //!Sampled pad response
-  Int_t                fPRFbin;          // Number of bins for the PRF
-  Float_t              fPRFlo;           // Lower boundary of the PRF
-  Float_t              fPRFhi;           // Higher boundary of the PRF
-  Float_t              fPRFwid;          // Bin width of the sampled PRF
-  Int_t                fPRFpad;          // Distance to next pad in PRF
-  Int_t                fTRFOn;           // Switch for the time response
-  Float_t             *fTRFsmp;          //!Integrated time response
-  Int_t                fTRFbin;          // Number of bins for the TRF
-  Float_t              fTRFlo;           // Lower boundary of the TRF
-  Float_t              fTRFhi;           // Higher boundary of the TRF
-  Float_t              fTRFwid;          // Bin width of the integrated TRF
-  Float_t              fDriftVelocity;   // Drift velocity (cm / mus)
-  Float_t              fTimeBinWidth;    // Time bin width in ns
-  Float_t              fPadCoupling;     // Pad coupling factor
-  Float_t              fTimeCoupling;    // Time coupling factor (image charge of moving ions)
-  Bool_t               fCompress;        // Switch to keep only compressed data in memory
-  Int_t                fVerbose;         // Sets the verbose level
-  Bool_t               fSDigits;         // Switch for the summable digits
-
- private:
-
-  virtual Int_t        Diffusion(Float_t driftlength, Float_t *xyz);
-  virtual Int_t        ExB(Float_t driftlength, Float_t *xyz);  
-  virtual Int_t        PadResponse(Float_t signal, Float_t dist, Float_t *pad);
-  virtual Float_t      TimeResponse(Float_t time);  
+  private:
+    
+  virtual Bool_t Init();
+    
+  virtual void         DeConvExp(Double_t *source, Double_t *target, Int_t n, Int_t nexp);
   virtual Bool_t       CheckDetector(Int_t plane, Int_t chamber, Int_t sector);
-  virtual void         SamplePRF();
-  virtual void         SampleTRF();
 
-  ClassDef(AliTRDdigitizer,4)            // Produces TRD-Digits
+  ClassDef(AliTRDdigitizer,8)               //  Produces TRD-Digits
 
 };