#ifndef ALIITSUTRACKCOND_H #define ALIITSUTRACKCOND_H #include #include #include //------------------------------------------------------------------------------ // // This class defines a set of hit patterns (conditions) to consider the track reconstructable // Each condidition (few consequitive elements from fConditions array) is set of bit patterns, // with each element of condition defining a group of layers which must be present in the tracks. // For instance, if we require the track to have contributions from // {lr0 or lr1 or lr2} AND {lr2 or lr 3 or lr 4} AND {lr5 or lr6} then the condition should // be {BIT(0)|BIT(1)|BIT(2), BIT(2)|BIT(3)|BIT(4), BIT(5)|BIT(6)}. // Additionally, each condition may request min number of hits to be present // // Each AliITSUTrackCond should correspond to single track finding pass and may contain multiple // conditions. To consider the track reconstructable it is enough to satisfy 1 condition // //------------------------------------------------------------------------------ class AliITSUTrackCond : public TObject { public: enum {kCondStart,kNGroups,kMinClus,kNAuxSz}; enum {kShiftNcl=24}; // the min_Nclusters for each pattern is stored starting from this bit // AliITSUTrackCond(Int_t nLayers=0); AliITSUTrackCond(const AliITSUTrackCond& src); AliITSUTrackCond &operator=(const AliITSUTrackCond& src); ~AliITSUTrackCond() {} void SetNLayers(Int_t nl); void SetClSharing(Int_t lr, Char_t v=0) {fClSharing[lr] = v;} void SetMaxBranches(Int_t lr, Int_t mb) {fMaxBranches[lr] = mb;} void SetMaxCandidates(Int_t lr, Int_t nc) {fMaxCandidates[lr] = nc;} void SetID(Int_t id) {SetUniqueID(id);} void AddNewCondition(Int_t minClusters); void AddGroupPattern(UShort_t patt,Int_t ncl); Int_t GetID() const {return GetUniqueID();} Int_t GetMaxBranches(Int_t lr) const {return fMaxBranches[lr];} Int_t GetMaxCandidates(Int_t lr) const {return fMaxCandidates[lr];} Int_t GetNConditions() const {return fNConditions;} UShort_t GetGroup(Int_t condID,Int_t grID) const {return fConditions[fAuxData[condID*kNAuxSz+kCondStart]+grID];} Bool_t CheckPattern(UShort_t patt) const; // virtual void Print(Option_t* option = "") const; void SetMaxITSTPCMatchChi2(Float_t v) {fMaxITSTPCMatchChi2 = v;} void SetMaxITSSAChi2(Int_t ncl, Float_t v) {if (ncl>0&&ncl<=2*fNLayers) fMaxITSSAChi2[ncl-1] = v;} void SetMaxTr2ClChi2(Int_t lr, Float_t v) {fMaxTr2ClChi2[lr] = v;} void SetMaxChi2GloNrm(Int_t lr, Float_t v) {fMaxChi2GloNrm[lr] = v;} void SetMissPenalty(Int_t lr, Float_t v) {fMissPenalty[lr] = v;} void SetNSigmaRoadY(Int_t lr, Float_t v) {fNSigmaRoadY[lr] = v;} void SetNSigmaRoadZ(Int_t lr, Float_t v) {fNSigmaRoadZ[lr] = v;} void ExcludeLayer(Int_t lr) {fAllowLayers &= ~(0x1<