o mods
[u/mrichter/AliRoot.git] / TPC / Upgrade / AliToyMCEventGenerator.h
1 #ifndef AliToyMCEventGenerator_H
2 #define AliToyMCEventGenerator_H
3
4 #include <TString.h>
5
6 class TFile;
7 class TTree;
8 class TObjArray;
9
10 class AliTPCParam;
11 class AliTPCCorrection;
12 class AliTrackPointArray;
13
14 class AliToyMCTrack;
15 class AliToyMCEvent;
16
17 class AliToyMCEventGenerator : public TObject {
18  public:
19    enum EGasType {
20      kNeCO2_9010=0,
21      kNeCO2N2_90105
22    };
23
24   enum EEpsilon {
25     kEps5=0,
26     kEps10,
27     kEps20,
28     kEps25,
29     kEps30,
30     kEps35,
31     kEps40
32   };
33
34   enum ECollRate {
35     k50kHz = 0
36   };
37
38   enum ECorrection {
39     kLookup=0,
40     kSpaceChargeFile
41   };
42   
43   AliToyMCEventGenerator();
44   AliToyMCEventGenerator(const AliToyMCEventGenerator &gen);
45   virtual ~AliToyMCEventGenerator();
46
47   virtual AliToyMCEvent* Generate(Double_t time) = 0;
48
49   Bool_t DistortTrack(AliToyMCTrack &trackIn, Double_t t0=0);
50   void MakeITSClusters(AliToyMCTrack &trackIn/*, Double_t t0*/);
51   void MakeTRDClusters(AliToyMCTrack &trackIn/*, Double_t t0*/);
52   void MakeTPCClusters(AliToyMCTrack &trackIn, Double_t t0);
53   void CreateSpacePoints(AliToyMCTrack &trackIn,
54                         AliTrackPointArray &arrUdist,
55                         AliTrackPointArray &arrDist);
56   void SetPoint(Float_t xyz[3], Float_t sigmaY, Float_t sigmaZ, AliTrackPoint &point);
57   void ConvertTrackPointsToLocalClusters(AliTrackPointArray &arrPoints, AliToyMCTrack &tr, Double_t t0, Int_t type);
58   Bool_t SetupCluster(AliTPCclusterMI &tempCl, Float_t xyz[3], Int_t sec, Double_t t0);
59   
60   void SetOutputFileName(const char* file) { fOutputFileName=file; }
61   const char* GetOutputFileName()    const { return fOutputFileName.Data(); }
62
63   void SetSpaceCharge(EEpsilon epsilon, EGasType gasType=kNeCO2_9010, ECollRate collRate=k50kHz, ECorrection corrType=kLookup);
64   void SetSpaceChargeFile(const char* file) { fCorrectionFile=file; }
65   
66   Int_t GetSector(Float_t xyz[3]);
67
68   void InitSpaceCharge();
69
70   void SetStepCorrection(Bool_t step=kTRUE) { fUseStepCorrection=step;   }
71   Bool_t GetStepCorrection() const          { return fUseStepCorrection; }
72
73   void SetUseMaterialBudget(Bool_t use) { fUseMaterialBudget=use;    }
74   Bool_t GetUseMaterialBudget() const   { return fUseMaterialBudget; }
75
76   void SetIsLaser(Bool_t use) { fIsLaser=use;    }
77   Bool_t GetIsLaser() const   { return fIsLaser; }
78
79   void   SetSCListFile(const char* file) { fSCListFile=file;              }
80   const char* GetSCListFile() const      { return fSCListFile.Data();     }
81   void   SetPrereadSCList(Bool_t b)      { fPrereadSCList=b;              }
82   Bool_t GetPrereadSCList() const        { return fPrereadSCList;         }
83   Bool_t HasSCList() const               { return  !fSCListFile.IsNull(); }
84
85   static Float_t GetSCScalingFactor(AliTPCCorrection *corr, AliTPCCorrection *averageCorr, Float_t &chi2);
86   static void SetCorrectionFromFile(TString file, AliTPCCorrection* &corr);
87   
88  protected:
89   AliTPCParam *fTPCParam;                //! TPC params
90   AliToyMCEvent *fEvent;                 //! Toy event
91   
92   Bool_t ConnectOutputFile();
93   Bool_t CloseOutputFile();
94   void FillTree();
95   void IterateSC(Int_t ipos=-1);
96
97   UInt_t fCurrentTrack;                  // unique track id within the current event generation
98
99   
100  private:
101   AliToyMCEventGenerator& operator= (const AliToyMCEventGenerator& );
102    
103   AliTPCCorrection *fTPCCorrection;      //! distortion correction
104   AliTPCCorrection *fTPCCorrectionAv;    //! average distortion correction
105   
106   TObjArray   *fSCList;                  //! list with
107   TString fSCListFile;                   // file with a list of space charge files
108   TString fCorrectionFile;               // name of a sinfle SC file
109   TString fOutputFileName;               // name of the output file
110   TFile   *fOutFile;                     //! output file
111   TTree   *fOutTree;                     //! output tree
112
113   Bool_t fUseStepCorrection;             // use integralDz method?
114   Bool_t fUseMaterialBudget;             // use material budget in tracking?
115   Bool_t fIsLaser;                       // is a laser event?
116   Bool_t fPrereadSCList;                 // preread all SC files from the SC list
117
118   void InitSpaceChargeList();
119   void SetSCScalingFactor();
120   
121   ClassDef(AliToyMCEventGenerator, 1)
122   
123 };
124
125 #endif
126