- Clean methods related to matching and hit pattern in AODTrack.
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 15 Jan 2010 16:58:30 +0000 (16:58 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 15 Jan 2010 16:58:30 +0000 (16:58 +0000)
- Add a new method in ESD and AOD to detect tracks passing the iron wall (i.e. matched with a digit on both planes of at least 2 trigger chambers), even if they do not match a trigger.
(Philippe P., Diego)

PWG3/muon/AliAODDimuon.cxx
STEER/AliAODTrack.cxx
STEER/AliAODTrack.h
STEER/AliESDMuonTrack.cxx
STEER/AliESDMuonTrack.h

index 75afb36..5a44840 100644 (file)
@@ -444,8 +444,8 @@ Double_t AliAODDimuon::CostHe(){
 Int_t AliAODDimuon::AnyPt(){
   // Test if the two muons match two trigger tracks
   if(this->CheckPointers())return 0;
-  return (((AliAODTrack*)fMu[0].GetObject())->MatchTriggerAnyPt())&&
-         (((AliAODTrack*)fMu[0].GetObject())->MatchTriggerAnyPt());
+  return (((AliAODTrack*)fMu[0].GetObject())->MatchTrigger())&&
+         (((AliAODTrack*)fMu[0].GetObject())->MatchTrigger());
 }
 
 //______________________________________________________________________________
index 752c0ab..c440da1 100644 (file)
@@ -450,9 +450,10 @@ void AliAODTrack::Print(Option_t* /* option */) const
   printf("    charge = %d\n", Charge());
 }
 
-void AliAODTrack::SetMatchTrigger(Int_t matchTrig){
-//
-// Set the MUON trigger information
+//______________________________________________________________________________
+void AliAODTrack::SetMatchTrigger(Int_t matchTrig)
+{
+  // Set the MUON trigger information
   switch(matchTrig){
     case 0: // 0 track does not match trigger
       fITSMuonClusterMap=fITSMuonClusterMap&0x3fffffff;
@@ -472,91 +473,38 @@ void AliAODTrack::SetMatchTrigger(Int_t matchTrig){
   }
 }
 
-Int_t AliAODTrack::HitsMT(Int_t istation, Int_t iplane, Option_t *cathode){
-//
-// Retrieve hit information for MUON identified by  (station, plane, cathode)
-  if(cathode){
-    if(cathode[0]=='x'||cathode[0]=='X'){
-      if(istation==1){
-        if(iplane==1)
-         return (fITSMuonClusterMap&0x8000)?1:0;
-       else if(iplane==2)
-         return (fITSMuonClusterMap&0x4000)?1:0;
-       else
-         return 0;
-      }else if(istation==2){
-        if(iplane==1)
-         return (fITSMuonClusterMap&0x2000)?1:0;
-       else if(iplane==2)
-         return (fITSMuonClusterMap&0x1000)?1:0;
-       else
-         return 0;
-      }else{
-        return 0;
-      }
-    }else if(cathode[0]=='y'||cathode[0]=='Y'){
-      if(istation==1){
-        if(iplane==1)
-         return (fITSMuonClusterMap&0x0800)?1:0;
-       else if(iplane==2)
-         return (fITSMuonClusterMap&0x0400)?1:0;
-       else
-         return 0;
-      }else if(istation==2){
-        if(iplane==1)
-         return (fITSMuonClusterMap&0x0200)?1:0;
-       else if(iplane==2)
-         return (fITSMuonClusterMap&0x0100)?1:0;
-       else
-         return 0;
-      }else{
-        return 0;
-      }
-    }else{
-      return 0;
-    }
-  }else{
-    if(istation==1){
-      if(iplane==1)
-       return (HitsMT(1,1,"X")||HitsMT(1,1,"Y"))?1:0;
-      else if(iplane==2)
-       return (HitsMT(1,2,"X")||HitsMT(1,2,"Y"))?1:0;
-      else
-       return 0;
-    }else if(istation==2){
-      if(iplane==1)
-       return (HitsMT(2,1,"X")||HitsMT(2,1,"Y"))?1:0;
-      else if(iplane==2)
-       return (HitsMT(2,2,"X")||HitsMT(2,2,"Y"))?1:0;
-      else
-       return 0;
-    }else{
-      return 0;
-    }
+//______________________________________________________________________________
+Bool_t AliAODTrack::HitsMuonChamber(Int_t MuonChamber, Int_t cathode) const
+{
+  // return kTRUE if the track fires the given tracking or trigger chamber.
+  // If the chamber is a trigger one:
+  // - if cathode = 0 or 1, the track matches the corresponding cathode
+  // - if cathode = -1, the track matches both cathodes
+  
+  if (MuonChamber < 0) return kFALSE;
+  
+  if (MuonChamber < 10) return TESTBIT(GetMUONClusterMap(), MuonChamber);
+  
+  if (MuonChamber < 14) {
+    
+    if (cathode < 0) return TESTBIT(GetHitsPatternInTrigCh(), 13-MuonChamber) &&
+                            TESTBIT(GetHitsPatternInTrigCh(), 13-MuonChamber+4);
+    
+    if (cathode < 2) return TESTBIT(GetHitsPatternInTrigCh(), 13-MuonChamber+(1-cathode)*4);
+    
   }
+  
+  return kFALSE;
 }
 
-Int_t AliAODTrack::HitsMuonChamber(Int_t MuonChamber){
-  //
-  // Retrieve hit information for MUON Tracker/Trigger Chamber
-  // WARNING: chamber number start from 1 instead of 0
+//______________________________________________________________________________
+Bool_t AliAODTrack::MatchTriggerDigits() const
+{
+  // return kTRUE if the track matches a digit on both planes of at least 2 trigger chambers
   
-  if (MuonChamber > 0 && MuonChamber < 11) {
-    return ((GetMUONClusterMap() & BIT(MuonChamber-1)) != 0) ? 1 : 0;
-  } else {
-    switch(MuonChamber){
-      case 11:
-       return HitsMT(1,1);
-      case 12:
-       return HitsMT(1,2);
-      case 13:
-       return HitsMT(2,1);
-      case 14:
-       return HitsMT(2,2);
-      default:
-       printf("Unknown MUON chamber: %d\n",MuonChamber);
-       return 0;
-    }
-  }
+  Int_t nMatchedChambers = 0;
+  for (Int_t ich=10; ich<14; ich++) if (HitsMuonChamber(ich)) nMatchedChambers++;
+  
+  return (nMatchedChambers >= 2);
 }
 
index f9e69f4..fb8366e 100644 (file)
@@ -243,14 +243,13 @@ class AliAODTrack : public AliVTrack {
                                        //  2 Muon track match Low pt cut
                                        //  3 Muon track match High pt cut
   void     SetMatchTrigger(Int_t MatchTrigger);
-  Int_t    MatchTrigger() const { return (GetMatchTrigger()>0)?1:0; }  //  Muon track matches trigger track
-  Int_t    MatchTriggerAnyPt()   const  { return (GetMatchTrigger()>0)?1:0; }  //  Muon track matches trigger track
-  Int_t    MatchTriggerLowPt()   const  { return (GetMatchTrigger()>1)?1:0; }  //  Muon track matches trigger track and passes Low pt cut
-  Int_t    MatchTriggerHighPt()  const  { return (GetMatchTrigger()>2)?1:0; }  //  Muon track matches trigger track and passes High pt cut
+  Bool_t   MatchTrigger() const { return (GetMatchTrigger()>0); }        //  Muon track matches trigger track
+  Bool_t   MatchTriggerLowPt()   const  { return (GetMatchTrigger()>1); } //  Muon track matches trigger track and passes Low pt cut
+  Bool_t   MatchTriggerHighPt()  const  { return (GetMatchTrigger()>2); } //  Muon track matches trigger track and passes High pt cut
+  Bool_t   MatchTriggerDigits()  const;                                   //  Muon track matches trigger digits
   Double_t GetChi2MatchTrigger() const  { return fChi2MatchTrigger;}
   void     SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger; }
-  Int_t    HitsMT(Int_t istation, Int_t iplane, Option_t *cathode=0);  // Check if track hits Muon chambers
-  Int_t    HitsMuonChamber(Int_t MuonChamber);  // Check if track hits Muon chambers
+  Bool_t   HitsMuonChamber(Int_t MuonChamber, Int_t cathode = -1) const;  // Check if track hits Muon chambers
   Bool_t   IsMuonTrack() const { return (GetMUONClusterMap()>0) ? kTRUE : kFALSE; }
   
   void     Connected(Bool_t flag) {flag ? SETBIT(fITSMuonClusterMap,26) : CLRBIT(fITSMuonClusterMap,26);}
index 3d54f63..7b1250b 100644 (file)
@@ -527,6 +527,19 @@ Int_t AliESDMuonTrack::GetMatchTrigger() const
 }
 
 //_____________________________________________________________________________
+Bool_t AliESDMuonTrack::MatchTriggerDigits() const
+{
+  // return kTRUE if the track matches a digit on both planes of at least 2 trigger chambers
+  
+  Int_t nMatchedChambers = 0;
+  for (Int_t ich=0; ich<4; ich++)
+    if (IsChamberHit(fHitsPatternInTrigCh, 0, ich) &&
+       IsChamberHit(fHitsPatternInTrigCh, 1, ich)) nMatchedChambers++;
+  
+  return (nMatchedChambers >= 2);
+}
+
+//_____________________________________________________________________________
 Int_t AliESDMuonTrack::GetNClusters() const
 {
   /// return the number of clusters associated to the track
index f86a451..744a5f0 100644 (file)
@@ -96,6 +96,7 @@ public:
   
   // Get and Set methods for trigger matching
   Int_t    GetMatchTrigger() const;
+  Bool_t   MatchTriggerDigits() const;
   Double_t GetChi2MatchTrigger() const {return fChi2MatchTrigger;}
   void     SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger;}
   UShort_t GetHitsPatternInTrigCh() const {return fHitsPatternInTrigCh;}