Analysis task to study the extra SPD clusters.
[u/mrichter/AliRoot.git] / PWGPP / forward / SPDClustTask / AliSPDClustTask.h
1 #ifndef ALISPDCLUSTTASK_H
2 #define ALISPDCLUSTTASK_H
3
4 ///////////////////////////////////////////////////////////////////////////
5 // Class AliSPDClustTask                                            //
6 // Analysis task to produce data and MC histos needed for tracklets      //
7 // dNdEta extraction in multiple bins in one go                          //
8 // Author:  ruben.shahoyan@cern.ch                                       //
9 ///////////////////////////////////////////////////////////////////////////
10
11 class TH1F; 
12 class TH2F;
13 class AliESDEvent;
14 class TList;
15
16 class AliMCParticle;
17 class AliITSMultReconstructor;
18 class AliESDTrackCuts;
19
20 #include "../ITS/AliITSsegmentationSPD.h"
21 #include "AliAnalysisTaskSE.h"
22 #include "AliTriggerAnalysis.h" 
23 #include <TMath.h>
24
25 class AliSPDClustTask : public AliAnalysisTaskSE {
26  public:
27   enum {kHTracklets=0, kHPt = 50, kHClusters=100, kClTypevsEta=0, kClZ=1, kClEta=2, kClZPions=3, kClEtaPions=4, kClZPionsW=5, kClEtaPionsW=6}; // to facilitated access to histos, see BookHistos
28   //
29   AliSPDClustTask(const char *name = "AliSPDClustTask");
30   virtual ~AliSPDClustTask(); 
31   
32   virtual void  UserCreateOutputObjects();
33   virtual void  UserExec(Option_t *option);
34   virtual void  Terminate(Option_t *);
35   void       SetUseMC(Bool_t mc = kFALSE)              {fUseMC = mc;}
36   TObjArray* BookHistos();
37   void       FillHistos(AliStack *stack);
38   // RS
39   void       SetNStdDev(Float_t f=1.)           {fNStdDev = f<1e-5 ? 1e-5:f;}
40   void       SetScaleDThetaBySin2T(Bool_t v=kFALSE) {fScaleDTBySin2T = v;}
41   void       SetCutOnDThetaX(Bool_t v=kFALSE)   {fCutOnDThetaX = v;}
42   void       SetPhiWindow(float w=0.08)         {fDPhiWindow   = w<1e-5 ? 1e-5:w;}
43   void       SetThetaWindow(float w=0.025)      {if (w<0) fCutOnDThetaX=kTRUE; fDThetaWindow = TMath::Abs(w)<1e-5 ? 1e-5:TMath::Abs(w);}
44   void       SetPhiShift(float w=0.0045)        {fDPhiShift = w;}
45   void       SetPhiOverlapCut(float w=0.005)    {fPhiOverlapCut = w;}
46   void       SetZetaOverlapCut(float w=0.05)    {fZetaOverlap = w;}
47   void       SetRemoveOverlaps(Bool_t w=kFALSE) {fRemoveOverlaps = w;}
48   //
49   void       SetDPhiSCut(Float_t c=0.06)        {fDPhiSCut = c;}
50   void       SetNStdCut(Float_t c=1.0)          {fNStdCut = c;}
51   //
52   void       SetEtaCut(Float_t etaCut)          {fEtaMax = TMath::Abs(etaCut); fEtaMin= -fEtaMax;}
53   void       SetEtaMin(Float_t etaMin)          {fEtaMin = etaMin;}
54   void       SetEtaMax(Float_t etaMax)          {fEtaMax = etaMax;}
55   void       SetZVertexMin(Float_t z)           {fZVertexMin = z;}
56   void       SetZVertexMax(Float_t z)           {fZVertexMax = z;}
57   //
58   void       SetInput(const char *filename);
59   Int_t      FindMotherParticle(AliStack* stack, Int_t i);
60   Double_t   PtWeight(Double_t pt);
61   //
62  protected:
63   void       InitMultReco();
64   void       FillClusterInfo();
65   //
66  protected:
67   TList*       fOutput;                   // output list send on output slot 1 
68   //
69   Bool_t       fUseMC; 
70   TObjArray*   fHistos;                   //! histos array
71   Float_t      fVtx[3];                   //! event vertex
72   //
73   // Settings for the reconstruction
74   // tracklet reco settings
75   Float_t      fEtaMin;                    // histos filled only for this eta range
76   Float_t      fEtaMax;                    // histos filled only for this eta range
77   Float_t      fZVertexMin;                // min Z vtx to process
78   Float_t      fZVertexMax;                // max Z vtx to process
79   //
80   Bool_t       fScaleDTBySin2T;            // request dTheta scaling by 1/sin^2(theta)
81   Bool_t       fCutOnDThetaX;              // if true, apart from NStdDev cut apply also the cut on dThetaX
82   Float_t      fNStdDev;                   // cut on weighted distance
83   Float_t      fDPhiWindow;                // max dPhi
84   Float_t      fDThetaWindow;              // max dTheta
85   Float_t      fDPhiShift;                 // mean bend
86   Float_t      fPhiOverlapCut;             // overlaps cut in phi
87   Float_t      fZetaOverlap;               // overlaps cut in Z
88   Bool_t       fRemoveOverlaps;            // request overlaps removal
89   //
90   Float_t      fDPhiSCut;                  // cut on signal dphiS
91   Float_t      fNStdCut;                   // cut on signal weighted distance
92   //
93   AliITSMultReconstructor *fMultReco;              //! mult.reco object
94   TTree*       fRPTree;                    //! tree of recpoints
95   AliStack*    fStack;                     //! MC stack
96   AliMCEvent*  fMCEvent;                   //! MC Event
97   Float_t      fESDVtx[3];                 //  ESD vertex
98   //
99   Bool_t fDontMerge;                       // no merging requested
100   //
101   TH1D*  fhPtIn; // Input histogram containing the pion spectra
102  private:    
103   AliSPDClustTask(const AliSPDClustTask&); // not implemented
104   AliSPDClustTask& operator=(const AliSPDClustTask&); // not implemented 
105   
106   ClassDef(AliSPDClustTask, 1);  
107 };
108
109
110 #endif