technial fix to suppress the warning
[u/mrichter/AliRoot.git] / ITS / AliITSMeanVertexer.h
index 7c0fda2..99d35d4 100644 (file)
@@ -1,8 +1,6 @@
 #ifndef ALIITSMEANVERTEXER_H
 #define ALIITSMEANVERTEXER_H
 
-#include <TString.h>
-
 ///////////////////////////////////////////////////////////////////////
 //                                                                   //
 // Class to compute vertex position using SPD local reconstruction   //
 
 /* $Id$ */
 
-class TObject;
+#include <TObject.h>
+#include <TBits.h>
+
+class TClonesArray;
+class TH1F;
+class TH2F;
 class AliRawReader;
-class AliRunLoader;
-class AliMultiplicity;
 class AliESDVertex;
+class AliITSDetTypeRec;
+class AliITSVertexer;
 
 class AliITSMeanVertexer : public TObject {
 
  public:
-    // default constructor
-    AliITSMeanVertexer();   
-    // standard constructor. filename is the name of the file containing
-    // raw data either in ROOT or DATE format according to file extension
-    AliITSMeanVertexer(TString &filename);   
-    // constructor with explicit assignment of names for geometry and loaders
-    AliITSMeanVertexer(TString &filename, TString &loaderfilename, 
-                       TString &geometryfilename);
+  // default constructor
+    AliITSMeanVertexer(Bool_t mode = kTRUE);   
     virtual ~AliITSMeanVertexer();
-    void SetLoaderFileName(TString fn="ITSMeanVertexer.root")
-                           {fLoaderFileName = fn;}
-    void SetGeometryFileName(TString fn="geometry.root")
-                           {fGeometryFileName = fn;}
-    void SetMeanVertexFileName(TString fn) {fMVFileName = fn;}
-    void SetFilterOnContributors(Int_t nc=1){fFilterOnContributors = nc;}
-    void SetFilterOnTracklets(Int_t nc=1){fFilterOnTracklets = nc;}
-    void SetWriteVertices(Bool_t action){fWriteVertices = action;}
-    Bool_t GetWriteVertices() const {return fWriteVertices;}
-    void Reconstruct();
-    void DoVertices();
+    Bool_t Init();
+    void   SetFilterOnContributors(Int_t nc=1){fFilterOnContributors = nc;}
+    Bool_t Reconstruct(AliRawReader *rawReader);
+    void SetCutOnErrX(Double_t cut=9.5){fErrXCut = cut;}
+    void SetCutOnR(Double_t cut=0.5){fRCut = cut;}
+    void SetCutOnCls(UInt_t vmin=50, UInt_t vmax=7000){fLowSPD0=vmin; fHighSPD0=vmax;}
+    void SetZFiducialRegion(Double_t zcut=40.){fZCutDiamond=zcut;}
+    void   WriteVertices(const char *filename);
 
+    const TH2F*GetVertexXY() const { return fVertexXY; }
+    const TH1F*GetVertexZ()  const { return fVertexZ;  }
+
+    // Methods used for debug purposes
+    Int_t GetArrayEntries() const {return fVertArray.GetEntries();}
+    const AliESDVertex* GetElementAt(Int_t i) const {return (AliESDVertex*)fVertArray[i];}
+    UInt_t GetSPD0cls(Int_t i) const {return fClu0[i];}
+    Bool_t IsGoodVertex(Int_t i) const {return (fAccEvents.TestBitNumber(i)); }
  
- protected:
-    // copy constructor (NO copy allowed: the constructor is protected
-    // to avoid misuse)
+ private:
+    // copy constructor (NO copy allowed)
     AliITSMeanVertexer(const AliITSMeanVertexer& vtxr);
     // assignment operator (NO assignment allowed)
     AliITSMeanVertexer& operator=(const AliITSMeanVertexer& /* vtxr */);
-    void Init(TString &filename);  // initialization invoked by constructors
-    Bool_t Filter(AliESDVertex *vert,AliMultiplicity *mult);
-    void AddToMean(AliESDVertex *vert);
-    Bool_t ComputeMean();
 
-    static const TString fgkMVFileNameDefault;  //! default for fMVFileName
-    TString fLoaderFileName;   //! name of the local file containing loaders
-    TString fGeometryFileName; //! name of the file containing the geometry
-    TString fMVFileName;       //! name of the file containing the mean vertex
-    AliRawReader *fRawReader;  //! rawreader object
-    AliRunLoader *fRunLoader;  //! run loader
-    Double_t fWeighPos[3];     //! weighted average position
-    Double_t fWeighSig[3];     //! errors on weighted average position
-    Double_t fAverPos[3];      //! average position
-    Double_t fAverPosSq[3][3];  //! average square position for covariance
-    Int_t fNoEventsContr;      //! number of events used for mean vertex
-    Float_t fTotTracklets;       //! total number of tracklets used (integrated)
-    Float_t fAverTracklets;    //! average number of tracklets per event
-    Float_t fSigmaOnAverTracks; //! RMS of fAverTracklets
+    Bool_t Filter(AliESDVertex *vert,UInt_t mult);
+    void   AddToMean(AliESDVertex *vert);
+    Bool_t ComputeMean(Bool_t killOutliers);
+    void Reset(Bool_t redefine2D,Bool_t complete);
+    void ResetArray(){fAccEvents.ResetAllBits(kTRUE); fVertArray.Clear();
+      fIndex=0; for(Int_t i=0;i<fgkMaxNumOfEvents;i++)fClu0[i]=0; }
+
+    static const Int_t fgkMaxNumOfEvents;   // max. number of events 
+    AliITSDetTypeRec *fDetTypeRec; //! ITS reco class
+    TH2F    *fVertexXY;        //! histogram with transverse vertex distribution (vertex diamond)
+    TH1F    *fVertexZ;         //! histogram with longitudinal vertex distribution
+
+    Double_t fWeighPosSum[3];    //! weighted average position sum (transient)
+    Double_t fWeighSigSum[3];    //! weighted average position sum (transient)
+    Double_t fAverPosSum[3];     //! average position sum (transient)
+    Double_t fAverPosSqSum[3][3];//! average square position sum for covariance (transient)
+    Double_t fWeighPos[3];       //! weighted average position
+    Double_t fWeighSig[3];       //! errors on weighted average position
+    Double_t fAverPos[3];        //! average position
+    Double_t fAverPosSq[3][3];   //! average square position for covariance
+    Int_t fNoEventsContr;        //! number of events used for mean vertex
+    Double_t fTotContributors;      //! Integrated number of contributors
+    Double_t fAverContributors;  //! Average number of contributors
     Int_t fFilterOnContributors; //! Numb. of contrib must be > fFilter...
-    Int_t fFilterOnTracklets; //! Numb. of tracklets must be > fFilterOnTr...
-    Bool_t fWriteVertices; //! if kTRUE all the vertices are saved to a file
+    Bool_t fMode;                //! kTRUE for Vertexer3D; 
+                                 //! kFALSE for VertexerTapan
+    AliITSVertexer* fVertexer;   //! vertexer
+
+    TBits fAccEvents;           //! bit string: 1 for good events 0 for bad ones
+    TClonesArray fVertArray;     //! array of vertices to be averaged
+    UInt_t *fClu0;              //! number of clusters on SPD inner layer
+    Int_t fIndex;               //! current index on the arrays
+    Double_t fErrXCut;          //! cut on error on X (error*1000<fErrXCut)
+    Double_t fRCut;             //| cut on distance from first estimate (mm)
+    Double_t fZCutDiamond;      //! -/+ fZCutDiamond is the Z fiducial region
+    UInt_t fLowSPD0;            //! low SPD0 cls value to accept event
+    UInt_t fHighSPD0;           //! high SPD0 cls value to accept event
+    TH1F *fMultH;               //! debug hist: mult. on SPD0 before Filter
+    TH1F *fErrXH;               //! debug hist: error on X before Filter
+    TH1F *fMultHa;              //! debug hist: mult. on SPD0 after Filter
+    TH1F *fErrXHa;              //! debug hist: error on X after Filter
+    TH1F *fDistH;               //! debug hist: distance from peak
+    TH1F *fContrH;              //! debug hist: number of contributors
+    TH1F *fContrHa;             //! debug hist: number of contributors - after filter
 
-  ClassDef(AliITSMeanVertexer,0);
+    ClassDef(AliITSMeanVertexer,0)
 };
 
 #endif