]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Trigger info at ESD track level (Bogdan)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Jun 2007 12:58:08 +0000 (12:58 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 5 Jun 2007 12:58:08 +0000 (12:58 +0000)
MUON/AliMUONReconstructor.cxx
MUON/AliMUONTrack.cxx
MUON/AliMUONTrack.h
MUON/AliMUONVTrackReconstructor.cxx
STEER/AliESDMuonTrack.cxx
STEER/AliESDMuonTrack.h

index 17c245674dcebd99da348da73e603fb11c84fe71..767c35f2c8168d5d08cf6fc0a88ca6d493d62013 100644 (file)
@@ -486,7 +486,7 @@ void AliMUONReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
   Double_t fitFmin, chi2MatchTrigger;
   Double_t xRec, yRec, zRec, bendingSlope, nonBendingSlope, inverseBendingMomentum;
   Double_t xVtx, yVtx, zVtx, bendingSlopeAtVtx, nonBendingSlopeAtVtx, inverseBendingMomentumAtVtx;
-  Int_t matchTrigger;
+  Int_t localTrigger;
   UShort_t hitsPatternInTrigCh;
 
   // setting pointer for tracks, triggertracks & trackparam at vertex
@@ -562,7 +562,7 @@ void AliMUONReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
     // Global info
     nTrackHits       = recTrack->GetNTrackHits();
     fitFmin          = recTrack->GetFitFMin();
-    matchTrigger     = recTrack->GetMatchTrigger();
+    localTrigger     = recTrack->GetLocalTrigger();
     chi2MatchTrigger = recTrack->GetChi2MatchTrigger();
     hitsPatternInTrigCh = recTrack->GetHitsPatternInTrigCh();
 
@@ -584,7 +584,7 @@ void AliMUONReconstructor::FillESD(AliRunLoader* runLoader, AliESD* esd) const
     // global info
     theESDTrack->SetChi2(fitFmin);
     theESDTrack->SetNHit(nTrackHits);
-    theESDTrack->SetMatchTrigger(matchTrigger);
+    theESDTrack->SetLocalTrigger(localTrigger);
     theESDTrack->SetChi2MatchTrigger(chi2MatchTrigger);
     theESDTrack->SetHitsPatternInTrigCh(hitsPatternInTrigCh);
 
index 661271bcc9e3811a7bbc2bc42fba75d88d8cde0b..89da1fe354cc616b4e1c8377f6308e76f7468b9d 100644 (file)
@@ -60,7 +60,8 @@ AliMUONTrack::AliMUONTrack()
     floTrgNum(-1),
     fChi2MatchTrigger(0.),
     fTrackID(0),
-    fHitsPatternInTrigCh(0)
+    fHitsPatternInTrigCh(0),
+    fLocalTrigger(234)
 {
   /// Default constructor
 }
@@ -80,7 +81,8 @@ AliMUONTrack::AliMUONTrack(AliMUONHitForRec* hitForRec1, AliMUONHitForRec* hitFo
     floTrgNum(-1),    
     fChi2MatchTrigger(0.),
     fTrackID(0),
-    fHitsPatternInTrigCh(0)
+    fHitsPatternInTrigCh(0),
+    fLocalTrigger(234)
 {
   /// Constructor from thw hitForRec's
 
@@ -171,7 +173,8 @@ AliMUONTrack::AliMUONTrack (const AliMUONTrack& theMUONTrack)
     floTrgNum(theMUONTrack.floTrgNum),    
     fChi2MatchTrigger(theMUONTrack.fChi2MatchTrigger),
     fTrackID(theMUONTrack.fTrackID),
-    fHitsPatternInTrigCh(theMUONTrack.fHitsPatternInTrigCh)
+    fHitsPatternInTrigCh(theMUONTrack.fHitsPatternInTrigCh),
+    fLocalTrigger(theMUONTrack.fLocalTrigger)
 {
   ///copy constructor
   Int_t maxIndex = 0;
@@ -261,6 +264,7 @@ AliMUONTrack & AliMUONTrack::operator=(const AliMUONTrack& theMUONTrack)
   fChi2MatchTrigger   =  theMUONTrack.fChi2MatchTrigger;
   fTrackID            =  theMUONTrack.fTrackID; 
   fHitsPatternInTrigCh = theMUONTrack.fHitsPatternInTrigCh;
+  fLocalTrigger        = theMUONTrack.fLocalTrigger;
 
   return *this;
 }
@@ -572,3 +576,21 @@ void AliMUONTrack::Print(Option_t* opt) const
   }
     
 }
+
+//__________________________________________________________________________
+void AliMUONTrack::SetLocalTrigger(Int_t loCirc, Int_t loStripX, Int_t loStripY, Int_t loDev, Int_t loLpt, Int_t loHpt)
+{
+  /// pack the local trigger information and store
+
+  if (loCirc < 0 || loCirc > 233) return;
+
+  fLocalTrigger = 0;
+  fLocalTrigger += loCirc;
+  fLocalTrigger += loStripX << 8;
+  fLocalTrigger += loStripY << 13;
+  fLocalTrigger += loDev    << 17;
+  fLocalTrigger += loLpt    << 22;
+  fLocalTrigger += loHpt    << 24;
+
+}
+
index cc43d7981bbdcfa03fe80c3face07e3abcb5dd8d..7155ebd70dda0266c239c3f5ced296ebee65680f 100644 (file)
@@ -69,7 +69,7 @@ class AliMUONTrack : public TObject
   Double_t                   GetFitFMin(void) const {return fFitFMin;}
        /// set the minimum value of the function minimized by the fit
   void                       SetFitFMin(Double_t chi2) { fFitFMin = chi2; }
-        /// return 0,1,2 if track matches with trigger track, -1 if not
+        /// return 1,2,3 if track matches with trigger track, 0 if not
   Int_t                     GetMatchTrigger(void) const {return fMatchTrigger;}
   /// returns the local trigger number corresponding to the trigger track 
   Int_t                      GetLoTrgNum(void) const {return floTrgNum;}
@@ -95,6 +95,18 @@ class AliMUONTrack : public TObject
         /// set word telling which trigger chambers where hit by track
   void                       SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) {fHitsPatternInTrigCh = hitsPatternInTrigCh;}
 
+  /// set local trigger information for the matched trigger track
+  void SetLocalTrigger(Int_t loCirc, Int_t loStripX, Int_t loStripY, Int_t loDev, Int_t loLpt, Int_t loHpt);
+  /// return local trigger information for the matched trigger track
+  Int_t GetLocalTrigger(void) const { return fLocalTrigger;              }
+  Int_t LoCircuit(void) const 
+  { Int_t circ = fLocalTrigger & 0xFF; return (circ == 234) ? -1 : circ; }
+  Int_t LoStripX(void) const  { return fLocalTrigger >>  8 & 0x1F; }
+  Int_t LoStripY(void) const  { return fLocalTrigger >> 13 & 0x0F; }
+  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; }
+
   Double_t                   TryOneHitForRec(AliMUONHitForRec* hitForRec);
   Double_t                   TryTwoHitForRec(AliMUONHitForRec* hitForRec1, AliMUONHitForRec* hitForRec2); 
   
@@ -118,16 +130,17 @@ class AliMUONTrack : public TObject
   AliMUONHitForRec *fVertex; //!< Vertex used during the tracking procedure if required
   
   Double_t fFitFMin; ///< minimum value of the function minimized by the fit
-  Int_t fMatchTrigger;  ///< -1 track does not match trigger
-                        ///<  0 track match but does not pass pt cut
-                        ///<  1 track match Low pt cut
-                        ///<  2 track match High pt cut
+  Int_t fMatchTrigger;  ///<  0 track does not match trigger
+                        ///<  1 track match but does not pass pt cut
+                        ///<  2 track match Low pt cut
+                        ///<  3 track match High pt cut
   Int_t floTrgNum; ///< the number of the corresponding loTrg, -1 if no matching
   Double_t fChi2MatchTrigger; ///< chi2 of trigger/track matching 
   
   Int_t fTrackID; ///< track ID = track number in TrackRefs
   UShort_t fHitsPatternInTrigCh; ///< Word containing info on the hits left in trigger chambers
-  
+
+  Int_t fLocalTrigger;    ///< packed local trigger information
   
   ClassDef(AliMUONTrack, 5) // Reconstructed track in ALICE dimuon spectrometer
 };
index f615a2ca53f37f28494ddc0664c9b210dd8ada97..26eee5b3f34ce75a55e553f08607801a107d7981 100644 (file)
@@ -254,6 +254,14 @@ void AliMUONVTrackReconstructor::ValidateTracksWithTrigger(void)
   /// Try to match track from tracking system with trigger track
   static const Double_t kDistSigma[3]={1,1,0.02}; // sigma of distributions (trigger-track) X,Y,slopeY
   
+  Int_t loTrigger =  0;
+  Int_t loCirc    = -1;
+  Int_t loStripX  = -1;
+  Int_t loStripY  = -1;
+  Int_t loDev     = -1;
+  Int_t loLpt     = -1;
+  Int_t loHpt     = -1;
+
   AliMUONTrack *track;
   AliMUONTrackParam trackParam; 
   AliMUONTriggerTrack *triggerTrack;
@@ -274,7 +282,7 @@ void AliMUONVTrackReconstructor::ValidateTracksWithTrigger(void)
   
   track = (AliMUONTrack*) fRecTracksPtr->First();
   while (track) {
-    matchTrigger = -1;
+    matchTrigger = 0;
     chi2MatchTrigger = 0.;
     loTrgNum = -1;
     Int_t doubleMatch=-1; // Check if track matches 2 trigger tracks
@@ -307,9 +315,9 @@ void AliMUONVTrackReconstructor::ValidateTracksWithTrigger(void)
              chi2MatchTrigger = chi2;
              loTrgNum=triggerTrack->GetLoTrgNum();
              locTrg = (AliMUONLocalTrigger*)localTrigger->UncheckedAt(loTrgNum);
-             matchTrigger=0;
-             if(locTrg->LoLpt()>0)matchTrigger=1;
-             if(locTrg->LoHpt()>0)matchTrigger=2;
+             matchTrigger=1;
+             if(locTrg->LoLpt()>0)matchTrigger=2;
+             if(locTrg->LoHpt()>0)matchTrigger=3;
          }
          else if(isDoubleTrack) {
              doubleMatch = triggerTrack->GetLoTrgNum();
@@ -321,9 +329,9 @@ void AliMUONVTrackReconstructor::ValidateTracksWithTrigger(void)
     if(doubleMatch>=0){ // If two trigger tracks match, select the one passing more trigger cuts
        AliDebug(1, Form("Two candidates found: %i and %i",loTrgNum,doubleMatch));
        AliMUONLocalTrigger *locTrg1 = (AliMUONLocalTrigger*)localTrigger->UncheckedAt(doubleMatch);
-       if((locTrg1->LoLpt()>0 && matchTrigger<1) || (locTrg1->LoHpt() && matchTrigger<2)){
-           if(locTrg1->LoHpt()>0)matchTrigger=2;
-           else matchTrigger=1;
+       if((locTrg1->LoLpt()>0 && matchTrigger<2) || (locTrg1->LoHpt() && matchTrigger<3)){
+           if(locTrg1->LoHpt()>0)matchTrigger=3;
+           else matchTrigger=2;
            loTrgNum = doubleMatch;
            chi2MatchTrigger=doubleChi2;
        }
@@ -332,6 +340,20 @@ void AliMUONVTrackReconstructor::ValidateTracksWithTrigger(void)
     track->SetMatchTrigger(matchTrigger);
     track->SetLoTrgNum(loTrgNum);
     track->SetChi2MatchTrigger(chi2MatchTrigger);
+
+    if (loTrgNum >= 0 && loTrgNum < 234) {
+      locTrg = (AliMUONLocalTrigger*)localTrigger->UncheckedAt(loTrgNum);
+      
+      loCirc   = locTrg->LoCircuit();
+      loStripX = locTrg->LoStripX();
+      loStripY = locTrg->LoStripY();
+      loDev    = locTrg->LoDev();
+      loLpt    = locTrg->LoLpt();
+      loHpt    = locTrg->LoHpt();
+      
+      track->SetLocalTrigger(loCirc,loStripX,loStripY,loDev,loLpt,loHpt);
+    }
+
     track = (AliMUONTrack*) fRecTracksPtr->After(track);
   }
 
index 3f804a8983c432bafbc32546c9f21bcf32a0531c..14b1282a64f8e2ec75a965a1f6bda0a08a1ca1a5 100644 (file)
@@ -49,7 +49,7 @@ AliESDMuonTrack::AliESDMuonTrack ():
   fNonBendingCoorUncorrected(0),
   fChi2(0),
   fNHit(0),
-  fMatchTrigger(-1),
+  fLocalTrigger(234),
   fChi2MatchTrigger(0),
   fHitsPatternInTrigCh(0)
 {
@@ -74,7 +74,7 @@ AliESDMuonTrack::AliESDMuonTrack (const AliESDMuonTrack& MUONTrack):
   fNonBendingCoorUncorrected(MUONTrack.fNonBendingCoorUncorrected),
   fChi2(MUONTrack.fChi2),
   fNHit(MUONTrack.fNHit),
-  fMatchTrigger(MUONTrack.fMatchTrigger),
+  fLocalTrigger(MUONTrack.fLocalTrigger),
   fChi2MatchTrigger(MUONTrack.fChi2MatchTrigger),
   fHitsPatternInTrigCh(MUONTrack.fHitsPatternInTrigCh)
 {
@@ -110,7 +110,7 @@ AliESDMuonTrack& AliESDMuonTrack::operator=(const AliESDMuonTrack& MUONTrack)
   fChi2                   = MUONTrack.fChi2;             
   fNHit                   = MUONTrack.fNHit; 
 
-  fMatchTrigger           = MUONTrack.fMatchTrigger;  
+  fLocalTrigger           = MUONTrack.fLocalTrigger;  
   fChi2MatchTrigger       = MUONTrack.fChi2MatchTrigger; 
 
   fHitsPatternInTrigCh    = MUONTrack.fHitsPatternInTrigCh;
@@ -230,3 +230,24 @@ void AliESDMuonTrack::LorentzPUncorrected(TLorentzVector& vP) const
   vP.SetPxPyPzE(pX, pY, pZ, e);
 }
 
+//_____________________________________________________________________________
+Int_t AliESDMuonTrack::GetMatchTrigger() const
+{
+  //  backward compatibility after replacing fMatchTrigger by fLocalTrigger
+  //  0 track does not match trigger
+  //  1 track match but does not pass pt cut
+  //  2 track match Low pt cut
+  //  3 track match High pt cut
+
+  if (LoCircuit() == -1) {
+    return 0;
+  } else if (LoLpt() == 0 && LoHpt() == 0) {
+    return 1;
+  } else if (LoLpt() >  0 && LoHpt() == 0) {
+    return 2;
+  } else {
+    return 3;
+  }
+
+}
+
index 10c4d1ff50556edf5e725b874ec27c56b72ba85b..3570f505b85cd7203e740d81b703e70a897c701f 100644 (file)
@@ -60,12 +60,19 @@ public:
   void     SetNHit(UInt_t NHit) {fNHit = NHit;}
 
  // Get and Set methods for trigger matching
-  Int_t    GetMatchTrigger() const {return fMatchTrigger;}
-  void     SetMatchTrigger(Int_t MatchTrigger) {fMatchTrigger = MatchTrigger;}
+  Int_t    GetMatchTrigger() const;
   Double_t GetChi2MatchTrigger() const {return fChi2MatchTrigger;}
   void     SetChi2MatchTrigger(Double_t Chi2MatchTrigger) {fChi2MatchTrigger = Chi2MatchTrigger;}
   UShort_t GetHitsPatternInTrigCh() const {return fHitsPatternInTrigCh;}
   void     SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh) {fHitsPatternInTrigCh = hitsPatternInTrigCh;}
+  void     SetLocalTrigger(Int_t locTrig) { fLocalTrigger = locTrig; }
+  Int_t    LoCircuit(void) const
+  { Int_t circ = fLocalTrigger & 0xFF; return (circ == 234) ? -1 : circ; }
+  Int_t    LoStripX(void) const  { return fLocalTrigger >>  8 & 0x1F; }
+  Int_t    LoStripY(void) const  { return fLocalTrigger >> 13 & 0x0F; }
+  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; }
   
  // Methods to compute track momentum
   Double_t Px() const;
@@ -101,16 +108,12 @@ protected:
   Double_t fChi2; // chi2 in the MUON track fit
   UInt_t   fNHit; // number of hit in the track
 
- // trigger matching
-  Int_t   fMatchTrigger; // -1 track does not match trigger
-                         //  0 track match but does not pass pt cut
-                         //  1 track match Low pt cut
-                         //  2 track match High pt cut
+  Int_t fLocalTrigger;    ///< packed local trigger information
+  
   Double_t fChi2MatchTrigger; // chi2 of trigger/track matching
   
   UShort_t fHitsPatternInTrigCh; ///< Word containing info on the hits left in trigger chambers
 
-
   ClassDef(AliESDMuonTrack,4)  //MUON ESD track class 
 };