o add options for other gases and Epsilons
[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
9 class AliTPCParam;
10 class AliTPCCorrection;
11 class AliTrackPointArray;
12
13 class AliToyMCTrack;
14 class AliToyMCEvent;
15
16 class AliToyMCEventGenerator : public TObject {
17  public:
18    enum EGasType {
19      kNeCO2_9010=0,
20      kNeCO2N2_90105
21    };
22
23   enum EEpsilon {
24     kEps5=0,
25     kEps10,
26     kEps20,
27     kEps25,
28     kEps30,
29     kEps35,
30     kEps40
31   };
32
33   enum ECollRate {
34     k50kHz = 0
35   };
36
37   enum ECorrection {
38     kLookup=0,
39     kSpaceChargeFile
40   };
41   
42   AliToyMCEventGenerator();
43   AliToyMCEventGenerator(const AliToyMCEventGenerator &gen);
44   virtual ~AliToyMCEventGenerator();
45
46   virtual AliToyMCEvent* Generate(Double_t time) = 0;
47
48   Bool_t DistortTrack(AliToyMCTrack &trackIn, Double_t t0=0);
49   void MakeITSClusters(AliToyMCTrack &trackIn/*, Double_t t0*/);
50   void MakeTRDClusters(AliToyMCTrack &trackIn/*, Double_t t0*/);
51   void MakeTPCClusters(AliToyMCTrack &trackIn, Double_t t0);
52   void CreateSpacePoints(AliToyMCTrack &trackIn,
53                         AliTrackPointArray &arrUdist,
54                         AliTrackPointArray &arrDist);
55   void SetPoint(Float_t xyz[3], Float_t sigmaY, Float_t sigmaZ, AliTrackPoint &point);
56   void ConvertTrackPointsToLocalClusters(AliTrackPointArray &arrPoints, AliToyMCTrack &tr, Double_t t0, Int_t type);
57   Bool_t SetupCluster(AliTPCclusterMI &tempCl, Float_t xyz[3], Int_t sec, Double_t t0);
58   
59   void SetOutputFileName(const char* file) { fOutputFileName=file; }
60   const char* GetOutputFileName()    const { return fOutputFileName.Data(); }
61
62   void SetSpaceCharge(EEpsilon epsilon, EGasType gasType=kNeCO2_9010, ECollRate collRate=k50kHz, ECorrection corrType=kLookup);
63   void SetSpaceChargeFile(const char* file) { fCorrectionFile=file; }
64   
65   Int_t GetSector(Float_t xyz[3]);
66
67   void InitSpaceCharge();
68
69   void SetStepCorrection(Bool_t step=kTRUE) { fUseStepCorrection=step;   }
70   Bool_t GetStepCorrection() const          { return fUseStepCorrection; }
71
72   void SetUseMaterialBudget(Bool_t use) { fUseMaterialBudget=use;    }
73   Bool_t GetUseMaterialBudget() const   { return fUseMaterialBudget; }
74
75   void SetIsLaser(Bool_t use) { fIsLaser=use;    }
76   Bool_t GetIsLaser() const   { return fIsLaser; }
77   
78  protected:
79   AliTPCParam *fTPCParam;
80   AliToyMCEvent *fEvent;
81   
82   Bool_t ConnectOutputFile();
83   Bool_t CloseOutputFile();
84   void FillTree();
85
86   UInt_t fCurrentTrack;                  // unique track id within the current event generation
87
88   
89  private:
90   AliToyMCEventGenerator& operator= (const AliToyMCEventGenerator& );
91    
92   AliTPCCorrection *fTPCCorrection;
93
94   TString fCorrectionFile;
95   TString fOutputFileName;
96   TFile   *fOutFile;
97   TTree   *fOutTree;
98
99   Bool_t fUseStepCorrection;
100   Bool_t fUseMaterialBudget;
101   Bool_t fIsLaser;
102   
103   ClassDef(AliToyMCEventGenerator, 1)
104      
105 };
106
107 #endif
108