]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSMultReconstructor.h
Added protection, fixed dynamic cast
[u/mrichter/AliRoot.git] / ITS / AliITSMultReconstructor.h
index b05e39885ff9191c573461cf6519eca70988a1cf..a9e643f83d28a8e012f78be657663b631e3946ac 100644 (file)
@@ -27,6 +27,7 @@ class AliITSgeom;
 class AliESDEvent;
 class AliESDtrack;
 class AliVertex;
+class AliESDVertex;
 class AliMultiplicity;
 
 class AliITSMultReconstructor : public AliTrackleter
@@ -35,7 +36,7 @@ public:
   //
   enum {kClTh,kClPh,kClZ,kClMC0,kClMC1,kClMC2,kClNPar};
   enum {kTrTheta,kTrPhi,kTrDPhi,kTrDTheta,kTrLab1,kTrLab2,kClID1,kClID2,kTrNPar};
-  enum {kSCTh,kSCPh,kSCID,kSCNPar};
+  enum {kSCTh,kSCPh,kSCLab,kSCID,kSCNPar};   
   enum {kITSTPC,kITSSAP,kITSTPCBit=BIT(kITSTPC),kITSSAPBit=BIT(kITSSAP)}; // RS
   AliITSMultReconstructor();
   virtual ~AliITSMultReconstructor();
@@ -45,9 +46,11 @@ public:
   void FindTracklets(const Float_t* vtx); 
   void LoadClusterFiredChips(TTree* tree);
   void FlagClustersInOverlapRegions(Int_t ic1,Int_t ic2);
-  void FlagTrackClusters(const AliESDtrack* track);
-  void FlagIfPrimary(AliESDtrack* track, const AliVertex* vtx);
+  void FlagTrackClusters(Int_t id);
+  void FlagIfSecondary(AliESDtrack* track, const AliVertex* vtx);
+  void FlagV0s(const AliESDVertex *vtx);
   void ProcessESDTracks();
+  Bool_t  CanBeElectron(const AliESDtrack* trc) const;
   
   void CreateMultiplicityObject();
   //
@@ -76,7 +79,49 @@ public:
 
   AliITSDetTypeRec *GetDetTypeRec() const {return fDetTypeRec;}
   void SetDetTypeRec(AliITSDetTypeRec *ptr){fDetTypeRec = ptr;}
-
+  //
+  void    SetCutPxDrSPDin(Float_t v=0.1)             { fCutPxDrSPDin = v;}
+  void    SetCutPxDrSPDout(Float_t v=0.15)           { fCutPxDrSPDout = v;}
+  void    SetCutPxDz(Float_t v=0.2)                  { fCutPxDz = v;}
+  void    SetCutDCArz(Float_t v=0.5)                 { fCutDCArz = v;}
+  void    SetCutMinElectronProbTPC(Float_t v=0.5)    { fCutMinElectronProbTPC = v;}
+  void    SetCutMinElectronProbESD(Float_t v=0.1)    { fCutMinElectronProbESD = v;}
+  void    SetCutMinP(Float_t v=0.05)                 { fCutMinP = v;}
+  void    SetCutMinRGamma(Float_t v=2.)              { fCutMinRGamma = v;}
+  void    SetCutMinRK0(Float_t v=1.)                 { fCutMinRK0 = v;}
+  void    SetCutMinPointAngle(Float_t v=0.98)        { fCutMinPointAngle = v;}
+  void    SetCutMaxDCADauther(Float_t v=0.5)         { fCutMaxDCADauther = v;}
+  void    SetCutMassGamma(Float_t v=0.03)            { fCutMassGamma = v;}
+  void    SetCutMassGammaNSigma(Float_t v=5.)        { fCutMassGammaNSigma = v;}
+  void    SetCutMassK0(Float_t v=0.03)               { fCutMassK0 = v;}
+  void    SetCutMassK0NSigma(Float_t v=5.)           { fCutMassK0NSigma = v;}
+  void    SetCutChi2cGamma(Float_t v=2.)             { fCutChi2cGamma = v;}
+  void    SetCutChi2cK0(Float_t v=2.)                { fCutChi2cK0 = v;}
+  void    SetCutGammaSFromDecay(Float_t v=-10.)      { fCutGammaSFromDecay = v;}
+  void    SetCutK0SFromDecay(Float_t v=-10.)         { fCutK0SFromDecay = v;}
+  void    SetCutMaxDCA(Float_t v=1.)                 { fCutMaxDCA = v;}
+  //
+  Float_t GetCutPxDrSPDin()                    const {return fCutPxDrSPDin;}
+  Float_t GetCutPxDrSPDout()                   const {return fCutPxDrSPDout;}
+  Float_t GetCutPxDz()                         const {return fCutPxDz;}
+  Float_t GetCutDCArz()                        const {return fCutDCArz;}
+  Float_t GetCutMinElectronProbTPC()           const {return fCutMinElectronProbTPC;}
+  Float_t GetCutMinElectronProbESD()           const {return fCutMinElectronProbESD;}
+  Float_t GetCutMinP()                         const {return fCutMinP;}
+  Float_t GetCutMinRGamma()                    const {return fCutMinRGamma;}
+  Float_t GetCutMinRK0()                       const {return fCutMinRK0;}
+  Float_t GetCutMinPointAngle()                const {return fCutMinPointAngle;}
+  Float_t GetCutMaxDCADauther()                const {return fCutMaxDCADauther;}
+  Float_t GetCutMassGamma()                    const {return fCutMassGamma;}
+  Float_t GetCutMassGammaNSigma()              const {return fCutMassGammaNSigma;}
+  Float_t GetCutMassK0()                       const {return fCutMassK0;}
+  Float_t GetCutMassK0NSigma()                 const {return fCutMassK0NSigma;}
+  Float_t GetCutChi2cGamma()                   const {return fCutChi2cGamma;}
+  Float_t GetCutChi2cK0()                      const {return fCutChi2cK0;}
+  Float_t GetCutGammaSFromDecay()              const {return fCutGammaSFromDecay;}
+  Float_t GetCutK0SFromDecay()                 const {return fCutK0SFromDecay;}
+  Float_t GetCutMaxDCA()                       const {return fCutMaxDCA;}
+  //
 protected:
   AliITSMultReconstructor(const AliITSMultReconstructor& mr);
   AliITSMultReconstructor& operator=(const AliITSMultReconstructor& mr);
@@ -84,8 +129,8 @@ protected:
   AliESDEvent*      fESDEvent;              //! pointer to ESD event
   TTree*            fTreeRP;                //! ITS recpoints
 
-  Char_t*       fUsedClusLay1;               // RS: flag of clusters usage in ESD tracks: 0=unused, bit0=TPC/ITS+ITSSA, bit1=ITSSA_Pure
-  Char_t*       fUsedClusLay2;               // RS: flag of clusters usage in ESD tracks: 0=unused, bit0=TPC/ITS+ITSSA, bit1=ITSSA_Pure
+  UInt_t*       fUsedClusLay1;               // RS: flag of clusters usage in ESD tracks: 0=unused, else ID+1 in word0=TPC/ITS+ITSSA, word1=ITSSA_Pure
+  UInt_t*       fUsedClusLay2;               // RS: flag of clusters usage in ESD tracks: 0=unused, else ID+1 word0=TPC/ITS+ITSSA, word1=ITSSA_Pure
 
   Float_t*      fClustersLay1;               // clusters in the 1st layer of ITS 
   Float_t*      fClustersLay2;               // clusters in the 2nd layer of ITS 
@@ -102,8 +147,9 @@ protected:
   Int_t         fNTracklets;           // Number of tracklets
   Int_t         fNSingleCluster;       // Number of unassociated clusters
   Short_t       fNFiredChips[2];       // Number of fired chips in the two SPD layers
+  //
   // Following members are set via AliITSRecoParam
+  //
   Float_t       fPhiWindow;                    // Search window in phi
   Float_t       fThetaWindow;                  // Search window in theta
   Float_t       fPhiShift;                     // Phi shift reference value (at 0.5 T) 
@@ -111,6 +157,31 @@ protected:
   Float_t       fPhiOverlapCut;                // Fiducial window in phi for overlap cut
   Float_t       fZetaOverlapCut;               // Fiducial window in eta for overlap cut
 
+  // cuts for secondaries identification
+  Float_t       fCutPxDrSPDin;                 // max P*DR for primaries involving at least 1 SPD
+  Float_t       fCutPxDrSPDout;                // max P*DR for primaries not involving any SPD
+  Float_t       fCutPxDz;                      // max P*DZ for primaries
+  Float_t       fCutDCArz;                     // max DR or DZ for primares
+  //
+  // cuts for flagging tracks in V0s
+  Float_t       fCutMinElectronProbTPC;     // min probability for e+/e- PID involving TPC
+  Float_t       fCutMinElectronProbESD;     // min probability for e+/e- PID not involving TPC
+  //
+  Float_t       fCutMinP;                   // min P of V0
+  Float_t       fCutMinRGamma;              // min transv. distance from ESDVertex to V0 for gammas
+  Float_t       fCutMinRK0;                 // min transv. distance from ESDVertex to V0 for K0s
+  Float_t       fCutMinPointAngle;          // min pointing angle cosine
+  Float_t       fCutMaxDCADauther;          // max DCA of daughters at V0
+  Float_t       fCutMassGamma;              // max gamma mass
+  Float_t       fCutMassGammaNSigma;        // max standard deviations from 0 for gamma
+  Float_t       fCutMassK0;                 // max K0 mass difference from PGD value
+  Float_t       fCutMassK0NSigma;           // max standard deviations for K0 mass from PDG value
+  Float_t       fCutChi2cGamma;             // max constrained chi2 cut for gammas
+  Float_t       fCutChi2cK0;                // max constrained chi2 cut for K0s
+  Float_t       fCutGammaSFromDecay;        // min path*P for gammas
+  Float_t       fCutK0SFromDecay;           // min path*P for K0s
+  Float_t       fCutMaxDCA;                 // max DCA for V0 at ESD vertex  
+
   Bool_t        fHistOn;               // Option to define and fill the histograms 
 
   TH1F*         fhClustersDPhiAcc;     // Phi2 - Phi1 for tracklets 
@@ -129,7 +200,7 @@ protected:
 
   void LoadClusterArrays(TTree* tree);
 
-  ClassDef(AliITSMultReconstructor,7)
+  ClassDef(AliITSMultReconstructor,8)
 };
 
 #endif