Add flag to switch on multiplicity calculation in ITS Vertexers (to be used in the...
[u/mrichter/AliRoot.git] / ITS / AliITSVertexer.h
1 #ifndef ALIITSVERTEXER_H
2 #define ALIITSVERTEXER_H
3
4 #include<AliVertexer.h>
5 #include "AliITSDetTypeRec.h"
6
7 ///////////////////////////////////////////////////////////////////
8 //                                                               //
9 // Base class for primary vertex reconstruction  for ITS         //
10 //                                                               //
11 ///////////////////////////////////////////////////////////////////
12
13 /* $Id$ */
14
15 class TString;
16
17 class AliITSVertexer : public AliVertexer {
18
19  public:
20     // default constructor
21     AliITSVertexer();   
22     virtual ~AliITSVertexer();
23     virtual AliESDVertex *FindVertexForCurrentEvent(TTree *itsClusterTree)=0;
24     virtual void PrintStatus() const = 0;
25
26     virtual void ResetVertex();
27     void FindMultiplicity(TTree *itsClusterTree);
28     void SetFirstEvent(Int_t ev){fFirstEvent = ev;}
29     void SetLastEvent(Int_t ev){fLastEvent = ev;}
30     static Float_t GetPipeRadius() {return fgkPipeRadius;}
31     void SetLaddersOnLayer2(Int_t ladwid=4);
32     void SetComputeMultiplicity(Bool_t opt=kTRUE){fComputeMultiplicity=opt;}
33     virtual void SetUseModule(Int_t imod, Bool_t optUse){
34       if(imod>=0 && imod<kNSPDMod) fUseModule[imod]=optUse;
35     }    
36     virtual Bool_t IsModuleUsed(Int_t imod) const {
37       if(imod>=0 && imod<kNSPDMod) return fUseModule[imod];
38       else return 0;
39     }
40
41     virtual AliESDVertex* GetAllVertices(Int_t &novertices) const {novertices = fNoVertices; return fVertArray; }
42
43     AliITSDetTypeRec *GetDetTypeRec() const {return fDetTypeRec;}
44     virtual void SetDetTypeRec(AliITSDetTypeRec *ptr){fDetTypeRec = ptr;}
45     enum{kNSPDMod=240};
46
47     // Methods containing run-loaders, should be moved to some other class
48     void Init(TString filename);
49     void WriteCurrentVertex();
50     void FindVertices();
51
52     Int_t GetMinTrackletsForPilup() const {return fMinTrackletsForPilup;}
53     void SetMinTrackletsForPilup(Int_t mint=2) {fMinTrackletsForPilup=mint;} 
54     Bool_t IsPileup() const{return fIsPileup;}
55     Float_t GetZPileupV() const {
56       if(IsPileup()) return fZpuv;
57       else return -9999999.;
58     }
59     Int_t GetNTrackletsPileupV() const {
60       if(IsPileup()) return fNTrpuv;
61       else return -2;
62     }
63  protected:
64     static const Float_t fgkPipeRadius;  // beam pipe radius (cm)
65     UShort_t *fLadders; // array with layer1-layer2 ladders correspondances  
66     Int_t fLadOnLay2;   // (2*fLadOnLay2+1)=number of layer2 ladders 
67                       // associated to a layer1 ladder
68     Bool_t  fComputeMultiplicity;      // flag to switch on/off tracklet calculation
69     Bool_t  fUseModule[kNSPDMod]; // flag for enabling/disabling SPD modules
70     AliITSDetTypeRec *fDetTypeRec;  //! pointer to DetTypeRec
71     Int_t fMinTrackletsForPilup;  // min. n. of tracklets for pilup definition
72     Bool_t fIsPileup;             // flag for pileup
73     Int_t fNTrpuv;             // tracklets in pile-up vertex
74     Float_t fZpuv;             // Z of second pile-up vertex
75     Int_t fNoVertices;         //! number of vertices found 
76     AliESDVertex* fVertArray;    //! vertices (main+pileupped)
77
78  private:
79     // copy constructor (NO copy allowed: the constructor is protected
80     // to avoid misuse)
81     AliITSVertexer(const AliITSVertexer& vtxr);
82     // assignment operator (NO assignment allowed)
83     AliITSVertexer& operator=(const AliITSVertexer& /* vtxr */);
84
85     Int_t fFirstEvent;          // First event to be processed by FindVertices
86     Int_t fLastEvent;           // Last event to be processed by FindVertices
87
88   ClassDef(AliITSVertexer,11);
89 };
90
91 #endif