]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDdigitizer.h
added new files to build system
[u/mrichter/AliRoot.git] / TRD / AliTRDdigitizer.h
index 7a61af33fe73e8623489f275ac5e5d81901fb571..c27a391aa498dc467328edf750e6e8d5c8382c56 100644 (file)
-#ifndef ALITRDDIGITIZER_h
-#define ALITRDDIGITIZER_h
+#ifndef ALITRDDIGITIZER_H
+#define ALITRDDIGITIZER_H
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
 /* $Id$ */
 
-#include <TNamed.h>
-#include <TFile.h>
-#include <TF1.h>
+////////////////////////////////////////////////////////////////////////////
+//                                                                        //
+//  Produces digits from the hits information                             //
+//                                                                        //
+////////////////////////////////////////////////////////////////////////////
 
-#include "AliHit.h" 
-#include "AliTRDdigit.h"
-#include "AliTRDconst.h"
-#include "AliTRDgeometry.h"
+#include "AliDigitizer.h"
 
-class AliTRDdigitsManager;
+class TFile;
+class TF1;
+
+class AliRunDigitizer;
+class AliRunLoader;
 
-///////////////////////////////////////////////////////
-//  Produces digits from the hits information        //
-///////////////////////////////////////////////////////
+class AliTRD;
+class AliTRDdigitsManager;
+class AliTRDgeometry;
 
-class AliTRDdigitizer : public TNamed {
+class AliTRDdigitizer : public AliDigitizer {
 
  public:
 
   AliTRDdigitizer();
-  AliTRDdigitizer(const Text_t* name, const Text_t* title);
-  AliTRDdigitizer(AliTRDdigitizer &d);
-  virtual ~AliTRDdigitizer();
-
-  virtual void         Copy(AliTRDdigitizer &d);
-  virtual void         Init();
-  virtual Bool_t       Open(const Char_t *name, Int_t nEvent = 0);
-  virtual Bool_t       MakeDigits();
-  virtual Bool_t       WriteDigits();
-
-  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         SetDiffusionT(Float_t diff)     { fDiffusionT    = diff;     };
-  virtual void         SetDiffusionL(Float_t diff)     { fDiffusionL    = diff;     };
-  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         SetLorentzAngle(Float_t angle)  { fLorentzAngle  = angle;    };
-  virtual void         SetPadResponse(TF1 *PRF)        { if (fPRF) delete fPRF;
-                                                         fPRF           = PRF;      };
-
-  AliTRDdigitsManager *Digits()                        { return fDigits;        };
-
-  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 Float_t      GetElAttachProp()               { return fElAttachProp;  };
-  virtual Float_t      GetLorentzAngle()               { return fLorentzAngle;  };
-  virtual TF1         *GetPadResponse()                { return fPRF;           };
-
-  inline  AliTRDdigitizer &operator=(AliTRDdigitizer &d);
-
+  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) const;
+  virtual Bool_t   InitDetector();
+          void     InitOutput(Int_t iEvent);
+  virtual void     Exec(Option_t *option = 0);  
+  virtual Bool_t   Open(const Char_t *file, Int_t nEvent = 0);
+  virtual Bool_t   Open(AliRunLoader *runLoader, 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;
+
+  virtual void     SetCompress(Int_t c = 1)             { fCompress        = c;   }
+  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     SetMergeSignalOnly(Bool_t m = kTRUE) { fMergeSignalOnly = m;   }
+
+          Bool_t   GetCompress() const                  { return fCompress;       }
+          Bool_t   GetSDigits() const                   { return fSDigits;        }
+          Float_t  GetSDigitsScale() const              { return fSDigitsScale;   }
+          Float_t  GetDiffusionT(Float_t vdrift);
+          Float_t  GetDiffusionL(Float_t vdrift);
+          Float_t  GetLorentzFactor(Float_t vdrift);
+
+  virtual Double_t TimeStruct(Float_t vdrift, Double_t time, Double_t z);
+  virtual Int_t    Diffusion(Float_t vdrift, Double_t absdriftlength
+                           , Double_t &lRow, Double_t &lCol, Double_t &lTime);
+  virtual Int_t    ExB(Float_t vdrift, Double_t driftlength, Double_t &lRow);
+
+  AliTRDdigitsManager *Digits() const                   { return fDigitsManager;  }
+  
  protected:
 
-  TFile               *fInputFile;       //! ALIROOT-filename
-  AliTRDdigitsManager *fDigits;          //! TRD digits manager
-  AliTRD              *fTRD;             //! TRD detector class
-  AliTRDgeometry      *fGeo;             //! TRD geometry
+          void     SampleTimeStruct(Float_t vdrift);
+          void     RecalcDiffusion(Float_t vdrift);
+
+  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
+
+          Int_t    fEvent;                  //! Event number
+          Int_t   *fMasks;                  //! Masks for the merging
+          Bool_t   fCompress;               //  Switch to keep only compressed data in memory
+          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
+  
+          Float_t  fDiffLastVdrift;         //  The structures are valid for fLastVdrift (caching)
+          Float_t  fDiffusionT;             //  Transverse drift coefficient
+          Float_t  fDiffusionL;             //  Longitudinal drift coefficient
+          Float_t  fOmegaTau;               //  Tangens of the Lorentz angle
+          Float_t  fLorentzFactor;          //  Factor due to Lorentz force
+
+          Float_t  fTimeLastVdrift;         //  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
   
-  Int_t                fEvent;           //! Event number
-
-  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
-  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              fLorentzAngle;    // Lorentz angle 
-  Float_t              fLorentzFactor;   // Factor due to Lorentz force
-  TF1                 *fPRF;             // Pad response function
-
  private:
+    
+  virtual Bool_t   Init();
 
-  virtual Int_t       Diffusion(Float_t driftlength, Float_t *xyz);
-  virtual Int_t       ExB(Float_t driftlength, Float_t *xyz);  
-  
-  ClassDef(AliTRDdigitizer,1)            // Produces TRD-Digits
+  ClassDef(AliTRDdigitizer,14)              //  Produces TRD-Digits
 
 };
 
-//_____________________________________________________________________________
-AliTRDdigitizer &AliTRDdigitizer::operator=(AliTRDdigitizer &d)
-{
-  //
-  // Assignment operator
-  //
-
-  if (this != &d) d.Copy(*this);
-  return *this;
-
-}
-
 #endif