From 423b32ca190b7ad8b6f648e4dced313ffb7c3b5e Mon Sep 17 00:00:00 2001 From: hristov Date: Tue, 5 Jun 2007 12:58:08 +0000 Subject: [PATCH] Trigger info at ESD track level (Bogdan) --- MUON/AliMUONReconstructor.cxx | 6 ++--- MUON/AliMUONTrack.cxx | 28 +++++++++++++++++++--- MUON/AliMUONTrack.h | 25 +++++++++++++++----- MUON/AliMUONVTrackReconstructor.cxx | 36 +++++++++++++++++++++++------ STEER/AliESDMuonTrack.cxx | 27 +++++++++++++++++++--- STEER/AliESDMuonTrack.h | 19 ++++++++------- 6 files changed, 111 insertions(+), 30 deletions(-) diff --git a/MUON/AliMUONReconstructor.cxx b/MUON/AliMUONReconstructor.cxx index 17c245674dc..767c35f2c81 100644 --- a/MUON/AliMUONReconstructor.cxx +++ b/MUON/AliMUONReconstructor.cxx @@ -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); diff --git a/MUON/AliMUONTrack.cxx b/MUON/AliMUONTrack.cxx index 661271bcc9e..89da1fe354c 100644 --- a/MUON/AliMUONTrack.cxx +++ b/MUON/AliMUONTrack.cxx @@ -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; + +} + diff --git a/MUON/AliMUONTrack.h b/MUON/AliMUONTrack.h index cc43d7981bb..7155ebd70dd 100644 --- a/MUON/AliMUONTrack.h +++ b/MUON/AliMUONTrack.h @@ -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 }; diff --git a/MUON/AliMUONVTrackReconstructor.cxx b/MUON/AliMUONVTrackReconstructor.cxx index f615a2ca53f..26eee5b3f34 100644 --- a/MUON/AliMUONVTrackReconstructor.cxx +++ b/MUON/AliMUONVTrackReconstructor.cxx @@ -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); } diff --git a/STEER/AliESDMuonTrack.cxx b/STEER/AliESDMuonTrack.cxx index 3f804a8983c..14b1282a64f 100644 --- a/STEER/AliESDMuonTrack.cxx +++ b/STEER/AliESDMuonTrack.cxx @@ -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; + } + +} + diff --git a/STEER/AliESDMuonTrack.h b/STEER/AliESDMuonTrack.h index 10c4d1ff505..3570f505b85 100644 --- a/STEER/AliESDMuonTrack.h +++ b/STEER/AliESDMuonTrack.h @@ -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 }; -- 2.43.0