]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliESDMuonTrack.h
Implementation of trigger response re-calculation with a 4/4 coincidence or after...
[u/mrichter/AliRoot.git] / STEER / AliESDMuonTrack.h
index 2e2b629980dfcf0b3b2bd00946d9fb885add0255..0dfe3b452329c05862f63491c72bb6afb96a0e20 100644 (file)
@@ -6,8 +6,8 @@
 
 /* $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
 
 
@@ -27,9 +27,17 @@ public:
   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) 
@@ -99,12 +107,32 @@ public:
   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;
@@ -139,7 +167,7 @@ public:
   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(); }
@@ -148,6 +176,45 @@ public:
   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
@@ -185,14 +252,26 @@ protected:
   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