]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/UPGRADE/AliITSUTrackCond.h
Made chi2-cut, road definitions AliITSUTrackCond and layer dependent
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUTrackCond.h
1 #ifndef ALIITSUTRACKCOND_H
2 #define ALIITSUTRACKCOND_H
3
4 #include <TObject.h>
5 #include <TArrayS.h>
6
7 //------------------------------------------------------------------------------
8 //
9 // This class defines a set of hit patterns (conditions) to consider the track reconstructable
10 // Each condidition (few consequitive elements from fConditions array) is set of bit patterns, 
11 // with each element of condition defining a group of layers which must be present in the tracks.
12 // For instance, if we require the track to have contributions from
13 // {lr0 or lr1 or lr2} AND {lr2 or lr 3 or lr 4} AND {lr5 or lr6} then the condition should
14 // be {BIT(0)|BIT(1)|BIT(2), BIT(2)|BIT(3)|BIT(4), BIT(5)|BIT(6)}.
15 // Additionally, each condition may request min number of hits to be present
16 //
17 // Each AliITSUTrackCond should correspond to single track finding pass and may contain multiple
18 // conditions. To consider the track reconstructable it is enough to satisfy 1 condition
19 //
20 //------------------------------------------------------------------------------
21
22
23 class AliITSUTrackCond : public TObject
24 {
25  public:
26   enum {kCondStart,kNGroups,kMinClus,kNAuxSz};
27   enum {kMaxBranches=50,kMaxCandidates=500};     // max number of branches one can create for single seed on any layer (except branch w/o cl. attached)
28   
29
30   AliITSUTrackCond(Int_t nLayers=0);
31   AliITSUTrackCond(const AliITSUTrackCond& src);
32   AliITSUTrackCond &operator=(const AliITSUTrackCond& src);
33
34   ~AliITSUTrackCond() {}
35   
36   void        SetNLayers(Int_t nl);
37   void        SetMaxBranches(Int_t lr, Int_t mb)   {fMaxBranches[lr] = mb;}
38   void        SetMaxCandidates(Int_t lr, Int_t nc) {fMaxCandidates[lr] = nc;}
39   void        SetID(Int_t id)                      {SetUniqueID(id);}
40   void        AddNewCondition(Int_t minClusters);
41   void        AddGroupPattern(UShort_t patt);
42
43   Int_t       GetID()                                  const {return GetUniqueID();}
44   Int_t       GetMaxBranches(Int_t lr)                 const {return fMaxBranches[lr];}
45   Int_t       GetMaxCandidates(Int_t lr)               const {return fMaxCandidates[lr];}
46   Int_t       GetNConditions()                         const {return fNConditions;}
47   UShort_t    GetGroup(Int_t condID,Int_t grID)        const {return fConditions[fAuxData[condID*kNAuxSz+kCondStart]+grID];}
48   Bool_t      CheckPattern(UShort_t patt)    const;
49   //
50   virtual void  Print(Option_t* option = "")           const;
51
52   void        SetMaxTr2ClChi2(Int_t lr, Float_t v)           {fMaxTr2ClChi2[lr] = v;}
53   void        SetMissPenalty(Int_t lr,  Float_t v)           {fMissPenalty[lr] = v;}
54   void        SetNSigmaRoadY(Int_t lr,  Float_t v)           {fNSigmaRoadY[lr] = v;}
55   void        SetNSigmaRoadZ(Int_t lr,  Float_t v)           {fNSigmaRoadZ[lr] = v;}
56   //
57   Float_t     GetMissPenalty(Int_t lr)                 const {return fMissPenalty[lr];}
58   Float_t     GetMaxTr2ClChi2(Int_t lr)                const {return fMaxTr2ClChi2[lr];}
59   Float_t     GetNSigmaRoadY(Int_t lr)                 const {return fNSigmaRoadY[lr];}
60   Float_t     GetNSigmaRoadZ(Int_t lr)                 const {return fNSigmaRoadZ[lr];}
61   Bool_t      IsLayerExcluded(Int_t lr)                const {return GetMaxTr2ClChi2(lr)<=0;}
62   //
63   void        Init();
64   Bool_t      IsInitDone()                             const {return fInitDone;}
65   //
66  protected: 
67   //
68   Bool_t      fInitDone;                 // initialization flag
69   Int_t       fNLayers;                  // total number of layers
70   Short_t*    fMaxBranches;              // [fNLayers] max allowed branches per seed on each layer
71   Short_t*    fMaxCandidates;            // [fNLayers] max allowed candidates per TPC seed on each layer
72   Float_t*    fMaxTr2ClChi2;             // [fNLayers] max track-to-cluster chi2
73   Float_t*    fMissPenalty;              // [fNLayers] chi2 penalty for missing hit on the layer
74   Float_t*    fNSigmaRoadY;              // [fNLayers] number of sigmas in Y
75   Float_t*    fNSigmaRoadZ;              // [fNLayers] number of sigmas in Z
76   //
77   Short_t     fNConditions;              // number of conditions defined
78   TArrayS     fConditions;               // fNConditions  set of conditions
79   TArrayS     fAuxData;                  // condition beginning (1st group), n groups, min clus
80   //
81   static Int_t   fgkMaxBranches;          // def max number of branches per seed on current layer 
82   static Int_t   fgkMaxCandidates;        // def max number of total candidates on current layer 
83   static Float_t fgkMaxTr2ClChi2;         // def track-to-cluster chi2 cut
84   static Float_t fgkMissPenalty;          // penalty for missing cluster
85   //
86   ClassDef(AliITSUTrackCond,3)           // set of requirements on track hits pattern
87 };
88
89
90
91 #endif