b9c7ef604caefd589e8f553684a34845ab0ef624
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALJetFinder.h
1 #ifndef ALIEMCALJETFINDER_H
2 #define ALIEMCALJETFINDER_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice     */
6
7 /* $Id$ */
8 //*-- Author:
9 //*-- Andreas Morsch (CERN)
10
11 #include <TTask.h>
12 #include "AliEMCALJet.h"
13
14 class TClonesArray;
15 class TH2F;
16 class TH1F;
17 class TCanvas;
18 class TList;
19 class AliEMCALHadronCorrection;
20
21 class AliEMCALJetFinder : public TTask {
22  public:
23     AliEMCALJetFinder();
24     AliEMCALJetFinder(const char* name, const char *title);
25     virtual ~AliEMCALJetFinder();
26     virtual void  Init();
27     virtual void  Find(Int_t ncell, Int_t ncell_tot, Float_t etc[30000], 
28                       Float_t etac[30000], Float_t phic[30000],
29                       Float_t min_move, Float_t max_move, Int_t mode,
30                       Float_t prec_bg, Int_t ierror);
31     virtual void  Find();
32     virtual void  FindChargedJet();
33     virtual void  FindTracksInJetCone();
34     virtual void  Test();
35     virtual void  BuildTrackFlagTable();
36     virtual Int_t SetTrackFlag(Float_t radius, Int_t pdgCode, Double_t charge);
37     // Geometry
38     virtual void SetCellSize(Float_t eta, Float_t phi);
39     // Parameters
40     virtual void SetDebug(Int_t flag = 0) {fDebug = flag;}
41     virtual void SetConeRadius(Float_t par);
42     virtual void SetEtSeed(Float_t par);
43     virtual void SetMinJetEt(Float_t par);
44     virtual void SetMinCellEt(Float_t par);
45     virtual void SetPtCut(Float_t par = 1.);
46     virtual void SetMomentumSmearing(Bool_t flag = kFALSE) {fSmear = flag;}
47     virtual void SetEfficiencySim(Bool_t flag = kFALSE)    {fEffic = flag;}
48     virtual void SetSamplingFraction(Float_t par) {fSamplingF = par;}
49     virtual void SetIncludeK0andN(Bool_t flag = kFALSE) {fK0N = flag;}
50     // Correction of hadronic energy
51     virtual void SetHadronCorrector(AliEMCALHadronCorrection* corr)
52         {fHadronCorrector = corr;}
53     virtual void SetHadronCorrection(Int_t flag = 1) {fHCorrection = flag;}
54     // PAI
55     void SetWriteKey(Bool_t flag = kFALSE) {fWrite = flag;}
56     void SetMode(Int_t mode = 0) {fMode = mode;}
57     void SetMinMove(Float_t minMove = 0.05) {fMinMove = minMove;}
58     void SetMaxMove(Float_t maxMove = 0.15) {fMaxMove = maxMove;}
59     void SetPrecBg (Float_t precBg = 0.035) {fPrecBg = precBg;}
60     void SetParametersForBgSubtraction
61     (Int_t mode=0, Float_t minMove=0.05, Float_t maxMove=0.15, Float_t precBg=0.035);
62     //    virtual void Print(Option_t* option="") const;    // *MENU*
63
64     Bool_t GetWriteKey() {return fWrite;}
65   //AliEMCALJet* GetJetT() {return fJetT[0];}
66     AliEMCALJet* GetJetT(Int_t n = 0) {return fJetT[n];}
67     virtual void DrawHistsForTuning(Int_t mode=0);           // *MENU*
68     virtual void PrintParameters(Int_t mode=0);              // *MENU*
69     virtual const Char_t* GetFileNameForParameters(Char_t* dir="RES/");
70
71     // Access to Results
72     virtual Int_t   Njets();
73     virtual Float_t JetEnergy(Int_t);
74     virtual Float_t JetPhiL(Int_t);
75     virtual Float_t JetPhiW(Int_t);
76     virtual Float_t JetEtaL(Int_t);  
77     virtual Float_t JetEtaW(Int_t);
78     TH2F*   GetLego()  {return fLego;}
79     TH2F*   GetLegoB() {return fLegoB;}
80     TH2F*   GetLegoEMCAL() {return fhLegoEMCAL;}
81     TH2F*   GethEff() {return fhEff;}
82     TH1F*   GetCellEt() {return fhCellEt;}
83     TH1F*   GetCellEMCALEt() {return fhCellEMCALEt;}
84     TH1F*   GetTrackPt() {return fhTrackPt;}
85     TH1F*   GetTrackPtBcut() {return fhTrackPtBcut;}
86     TList*  GetHistsList() {return fHistsList;}
87     Int_t   GetNChTpc() {return fNChTpc;}
88     void    DrawLego(Char_t *opt="lego");         // *MENU*
89     void    DrawLegoEMCAL(Char_t *opt="lego");    // *MENU*
90     void    DrawLegos();                          // *MENU*
91     Bool_t  IsThisPartonsOrDiQuark(Int_t pdg);
92     // I/O
93     virtual void SetOutputFileName(char* name) {fOutFileName = name;}
94     virtual void FillFromHits(Int_t flag = 0);
95     virtual void FillFromHitFlaggedTracks(Int_t flag = 0);
96     virtual void FillFromDigits(Int_t flag = 0);
97     virtual void FillFromTracks(Int_t flag = 0, Int_t ich = 0);
98     virtual void FillFromParticles();
99     virtual void FillFromPartons();
100
101     virtual void SaveBackgroundEvent();
102     virtual void InitFromBackground();
103     virtual void AddJet(const AliEMCALJet& jet);
104     virtual void WriteJets();
105     virtual void ResetJets();
106     virtual TClonesArray* Jets() {return fJets;}
107  private:
108     virtual void BookLego();
109     virtual void DumpLego();
110     virtual void ResetMap();
111     virtual Float_t PropagatePhi(Float_t pt, Float_t charge, Bool_t& curls);
112     virtual void RearrangeParticlesMemory(Int_t npart);
113  protected:
114     Bool_t                         fWrite;           // Key for writing
115     TClonesArray*                  fJets;            //! List of Jets
116     TH2F*                          fLego;            //! Lego Histo
117     TH2F*                          fLegoB;           //! Lego Histo Backg
118     TH2F*                          fhLegoTracks;     //! Lego for Tracks
119     TH2F*                          fhLegoEMCAL;      //! Lego for EMCAL itself
120     TH2F*                          fhLegoHadrCorr;   //! Lego for hadron correction
121     TH2F*                          fhEff;            //! Hist. for controling eff.
122     TH1F*                          fhCellEt;         //! Et distr. for cells from fLego
123     TH1F*                          fhCellEMCALEt;    //! Et distr. for cells from fLegoEMCAL
124     TH1F*                          fhTrackPt;        //! Pt distr. for charge particles
125     TH1F*                          fhTrackPtBcut;    //! Pt distr. for charge particles + cut due to magnetic field
126     TH1F*                          fhChPartMultInTpc;//! Ch. part. multiplicity in TPC acceptance
127     TCanvas*                       fC1;              //! first canvas for drawing
128     TList*                         fHistsList;       //! List of hists - 4-mar-2002
129     AliEMCALJet*                   fJetT[10];        //! Jet temporary storage
130     AliEMCALHadronCorrection*      fHadronCorrector; //! Pointer to hadronic correction
131     Int_t                          fHCorrection;     //  Hadron correction flag
132     Int_t                          fDebug;           //! Debug flag
133     Int_t                          fBackground;      //! Background flag
134     Float_t                        fConeRadius;      //  Cone radius
135     Float_t                        fPtCut;           //  Pt cut on charged tracks
136     Float_t                        fEtSeed;          //  Min. Et for seed
137     Float_t                        fMinJetEt;        //  Min Et of jet
138     Float_t                        fMinCellEt;       //  Min Et in one cell
139     Float_t                        fSamplingF;       //  Sampling Fraction
140     Bool_t                         fSmear;           //  Flag for momentum smearing
141     Bool_t                         fEffic;           //  Flag for efficiency simulation
142     Bool_t                         fK0N;             //  Flag for efficiency simulation
143     Int_t                          fNjets;           //! Number of Jetsp
144     Float_t                        fDeta;            //! eta cell size 
145     Float_t                        fDphi;            //! phi cell size
146     Int_t                          fNcell;           //! number of cells
147     Int_t                          fNtot;            //! total number of cells
148     Int_t                          fNbinEta;         //! number of cells in eta
149     Int_t                          fNbinPhi;         //! number of cells in phi
150     Float_t                        fEtaMin;          //! minimum eta  
151     Float_t                        fEtaMax;          //! maximum eta
152     Float_t                        fPhiMin;          //! minimun phi
153     Float_t                        fPhiMax;          //! maximum phi
154     Float_t                        fEtCell[30000];   //! Cell Energy
155     Float_t                        fEtaCell[30000];  //! Cell eta
156     Float_t                        fPhiCell[30000];  //! Cell phi
157     Int_t                          fNt;              //! number of tracks
158     Int_t                          fNChTpc;          //! number of ch.part in TPC
159
160     Int_t                          fNtS;             //! number of tracks selected
161     Int_t*                         fTrackList;       //! List of selected tracks
162     Float_t*                       fPtT;             //! Pt   of tracks 
163     Float_t*                       fEtaT;            //! Eta  of tracks
164     Float_t*                       fPhiT;            //! Phi  of tracks
165     Int_t*                         fPdgT;            //! PDG code of tracks
166  
167     Int_t                          fNtB;             //! number of tracks in Bg
168     Int_t*                         fTrackListB;      //! List of selected tracks in Bg
169     Float_t*                       fPtB;             //! Pt   of tracks in Bg
170     Float_t*                       fEtaB;            //! Eta  of tracks in Bg
171     Float_t*                       fPhiB;            //! Phi  of tracks in Bg
172     Int_t*                         fPdgB;            //! PDG  of tracks in Bg
173
174     // parameter for jet_finder_ua1
175     Int_t                          fMode;            // key for BG subtraction
176     Float_t                        fMinMove;         // min cone move 
177     Float_t                        fMaxMove;         // max cone move
178     Float_t                        fPrecBg;          // max value of change for BG (in %)
179     Int_t                          fError;           // error variables 
180
181     char*                          fOutFileName;     //! Output file name
182     TFile*                         fOutFile;         //! Output file
183     TFile*                         fInFile;          //! Output file
184     Int_t                          fEvent;           //! Processed event
185
186     ClassDef(AliEMCALJetFinder,2)        // JetFinder for EMCAL
187 }
188 ;
189 #endif // ALIEMCALJetFinder_H