/* $Id$ */
-// Class to describe the MUON tracks
-// in the Event Summary Data class
+/// \class AliESDMuonTrack
+/// \brief Class to describe the MUON tracks in the Event Summary Data class
// Author: G.Martinez
virtual ~AliESDMuonTrack(); // Destructor
AliESDMuonTrack(const AliESDMuonTrack& esdm);
AliESDMuonTrack& operator=(const AliESDMuonTrack& esdm);
+ virtual void Copy(TObject &obj) const;
virtual void Clear(Option_t* opt = "");
+ void Reset();
+
+ // Return kTRUE if the track contain tracker data
+ Bool_t ContainTrackerData() const {return (fMuonClusterMap>0) ? kTRUE : kFALSE;}
+ // Return kTRUE if the track contain trigger data
+ Bool_t ContainTriggerData() const {return (LoCircuit()>0) ? kTRUE : kFALSE;}
+
// Get and Set methods for data at vertex
Double_t GetInverseBendingMomentum(void) const {return fInverseBendingMomentum;}
void SetInverseBendingMomentum(Double_t InverseBendingMomentum)
Int_t LoDev(void) const { return fLocalTrigger >> 17 & 0x1F; }
Int_t LoLpt(void) const { return fLocalTrigger >> 22 & 0x03; }
Int_t LoHpt(void) const { return fLocalTrigger >> 24 & 0x03; }
-
+ Int_t GetTriggerWithoutChamber(void) const { return fLocalTrigger >> 26 & 0xF; }
+ Bool_t TriggerFiredWithoutChamber(Int_t ich) const { return GetTriggerWithoutChamber() >> (3 - ich) & 0x1; }
+
+ // Get and Set methods for the hit strips pattern in the trigger chambers
+ UShort_t GetTriggerX1Pattern() const { return fX1Pattern; }
+ UShort_t GetTriggerY1Pattern() const { return fY1Pattern; }
+ UShort_t GetTriggerX2Pattern() const { return fX2Pattern; }
+ UShort_t GetTriggerY2Pattern() const { return fY2Pattern; }
+ UShort_t GetTriggerX3Pattern() const { return fX3Pattern; }
+ UShort_t GetTriggerY3Pattern() const { return fY3Pattern; }
+ UShort_t GetTriggerX4Pattern() const { return fX4Pattern; }
+ UShort_t GetTriggerY4Pattern() const { return fY4Pattern; }
+ void SetTriggerX1Pattern(UShort_t pat) { fX1Pattern = pat; }
+ void SetTriggerY1Pattern(UShort_t pat) { fY1Pattern = pat; }
+ void SetTriggerX2Pattern(UShort_t pat) { fX2Pattern = pat; }
+ void SetTriggerY2Pattern(UShort_t pat) { fY2Pattern = pat; }
+ void SetTriggerX3Pattern(UShort_t pat) { fX3Pattern = pat; }
+ void SetTriggerY3Pattern(UShort_t pat) { fY3Pattern = pat; }
+ void SetTriggerX4Pattern(UShort_t pat) { fX4Pattern = pat; }
+ void SetTriggerY4Pattern(UShort_t pat) { fY4Pattern = pat; }
+
// Get and Set methods for muon cluster map
UInt_t GetMuonClusterMap() const {return fMuonClusterMap;}
void SetMuonClusterMap(UInt_t muonClusterMap) {fMuonClusterMap = muonClusterMap;}
- void AddInMuonClusterMap(Int_t chamber);
- Bool_t IsInMuonClusterMap(Int_t chamber) const;
+ void AddInMuonClusterMap(Int_t chamber) {fMuonClusterMap |= BIT(chamber);}
+ Bool_t IsInMuonClusterMap(Int_t chamber) const {return (Bool_t) ((fMuonClusterMap & BIT(chamber)) != 0);}
// Methods to get, fill and check the array of associated clusters
Int_t GetNClusters() const;
Bool_t XvYvZv(Double_t x[3]) const { x[0] = Xv(); x[1] = Yv(); x[2] = Zv(); return kTRUE; }
Double_t Pt() const { return TMath::Sqrt(Px()*Px() + Py()*Py()); }
Double_t OneOverPt() const { return (Pt() != 0.) ? 1./Pt() : FLT_MAX; }
- Double_t Phi() const { return TMath::ATan2(Py(), Px()); }
+ Double_t Phi() const { return TMath::Pi()+TMath::ATan2(-Py(), -Px()); }
Double_t Theta() const { return TMath::ATan2(Pt(), Pz()); }
Double_t E() const { return TMath::Sqrt(M()*M() + P()*P()); }
Double_t M() const { return TDatabasePDG::Instance()->GetParticle("mu-")->Mass(); }
Short_t Charge() const { return (Short_t)TMath::Sign(1., GetInverseBendingMomentum()); }
const Double_t *PID() const { return (Double_t*)0x0; }
+ /// Set the corresponding MC track number
+ void SetLabel(Int_t label) {fLabel = label;}
+ /// Return the corresponding MC track number
+ Int_t GetLabel() const {return fLabel;}
+
+ /// Additional methods to decode hit pattern
+ /// The hit pattern is a UShort_t with:
+ /// <pre>
+ /// 0 | 1 0 0 0 1 | 1 1 | 1 1 0 1 | 1 1 0 1
+ /// | | | |
+ /// unused | RPC (0-17) | flag | Bend plane | Non-bend plane
+ /// | or | | Match chamber | Match chamber
+ /// | further info | | 11 12 13 14 | 11 12 13 14
+ /// | (20-24) | | |
+ /// </pre>
+ enum EAliTriggerChPatternFlag {
+ kNoEff, ///< Track is not good for chamber efficiency evaluation
+ kChEff, ///< Track crosses different RPCs
+ kSlatEff, ///< Track crosses the same RPC in all planes
+ kBoardEff ///< Track crosses the same board in all planes
+ };
+ enum EAliTriggerChPatternInfo {
+ kCrossDifferentSlats = 20, ///< The RPC cannot be univoquely determined
+ kTrackMatchesManyPads = 21, ///< Track not good for effciency calculation since it matches many pads
+ kTrackMatchesFewPads = 22, ///< Track not good for effciency calculation since it matches pads in less than 3/4 chambers
+ kTrackOutsideGeometry = 23, ///< Problems in pattern determination since track extrapolation is outside trigger chambers
+ kTrackerTrackPattern = 24 ///< The pattern was calculated from a tracker track not matching trigger track
+ };
+ /// Set hits pattern
+ static void SetFiredChamber(UShort_t& pattern, Int_t cathode, Int_t chamber);
+ /// Add efficiency flag and crossed RPC or info on rejected track
+ static void AddEffInfo(UShort_t& pattern, Int_t slatOrInfo, EAliTriggerChPatternFlag effType = kNoEff);
+ /// Chamber was hit
+ static Bool_t IsChamberHit(UShort_t pattern, Int_t cathode, Int_t chamber);
+ /// Get Efficiency flag
+ static Int_t GetEffFlag(UShort_t pattern);
+ /// Getting crossed slat or info
+ static Int_t GetSlatOrInfo(UShort_t pattern);
+
protected:
// parameters at vertex
Double32_t fChi2; ///< chi2 in the MUON track fit
Double32_t fChi2MatchTrigger; ///< chi2 of trigger/track matching
Int_t fLocalTrigger; ///< packed local trigger information
+
+ // hit strips pattern in the trigger chambers
+ UShort_t fX1Pattern; ///< x-strips pattern in st6/ch1
+ UShort_t fY1Pattern; ///< y-strips pattern in st6/ch1
+ UShort_t fX2Pattern; ///< x-strips pattern in st6/ch2
+ UShort_t fY2Pattern; ///< y-strips pattern in st6/ch2
+ UShort_t fX3Pattern; ///< x-strips pattern in st7/ch1
+ UShort_t fY3Pattern; ///< y-strips pattern in st7/ch1
+ UShort_t fX4Pattern; ///< x-strips pattern in st7/ch2
+ UShort_t fY4Pattern; ///< y-strips pattern in st7/ch2
- UInt_t fMuonClusterMap; ///< Map of clusters in tracking chambers
- UShort_t fHitsPatternInTrigCh; ///< Word containing info on the hits left in trigger chambers
- UChar_t fNHit; ///< number of hit in the track
+ UInt_t fMuonClusterMap; ///< Map of clusters in tracking chambers
+ UShort_t fHitsPatternInTrigCh; ///< Word containing info on the hits left in trigger chambers
+ UChar_t fNHit; ///< number of hit in the track
mutable TClonesArray* fClusters; ///< Array of clusters attached to the track
- ClassDef(AliESDMuonTrack,9) // MUON ESD track class
+ Int_t fLabel; ///< point to the corresponding MC track
+
+ ClassDef(AliESDMuonTrack,11) // MUON ESD track class
};
#endif