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
// Global info
nTrackHits = recTrack->GetNTrackHits();
fitFmin = recTrack->GetFitFMin();
- matchTrigger = recTrack->GetMatchTrigger();
+ localTrigger = recTrack->GetLocalTrigger();
chi2MatchTrigger = recTrack->GetChi2MatchTrigger();
hitsPatternInTrigCh = recTrack->GetHitsPatternInTrigCh();
// global info
theESDTrack->SetChi2(fitFmin);
theESDTrack->SetNHit(nTrackHits);
- theESDTrack->SetMatchTrigger(matchTrigger);
+ theESDTrack->SetLocalTrigger(localTrigger);
theESDTrack->SetChi2MatchTrigger(chi2MatchTrigger);
theESDTrack->SetHitsPatternInTrigCh(hitsPatternInTrigCh);
floTrgNum(-1),
fChi2MatchTrigger(0.),
fTrackID(0),
- fHitsPatternInTrigCh(0)
+ fHitsPatternInTrigCh(0),
+ fLocalTrigger(234)
{
/// Default constructor
}
floTrgNum(-1),
fChi2MatchTrigger(0.),
fTrackID(0),
- fHitsPatternInTrigCh(0)
+ fHitsPatternInTrigCh(0),
+ fLocalTrigger(234)
{
/// Constructor from thw hitForRec's
floTrgNum(theMUONTrack.floTrgNum),
fChi2MatchTrigger(theMUONTrack.fChi2MatchTrigger),
fTrackID(theMUONTrack.fTrackID),
- fHitsPatternInTrigCh(theMUONTrack.fHitsPatternInTrigCh)
+ fHitsPatternInTrigCh(theMUONTrack.fHitsPatternInTrigCh),
+ fLocalTrigger(theMUONTrack.fLocalTrigger)
{
///copy constructor
Int_t maxIndex = 0;
fChi2MatchTrigger = theMUONTrack.fChi2MatchTrigger;
fTrackID = theMUONTrack.fTrackID;
fHitsPatternInTrigCh = theMUONTrack.fHitsPatternInTrigCh;
+ fLocalTrigger = theMUONTrack.fLocalTrigger;
return *this;
}
}
}
+
+//__________________________________________________________________________
+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;
+
+}
+
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;}
/// 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);
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
};
/// 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;
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
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();
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;
}
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);
}
fNonBendingCoorUncorrected(0),
fChi2(0),
fNHit(0),
- fMatchTrigger(-1),
+ fLocalTrigger(234),
fChi2MatchTrigger(0),
fHitsPatternInTrigCh(0)
{
fNonBendingCoorUncorrected(MUONTrack.fNonBendingCoorUncorrected),
fChi2(MUONTrack.fChi2),
fNHit(MUONTrack.fNHit),
- fMatchTrigger(MUONTrack.fMatchTrigger),
+ fLocalTrigger(MUONTrack.fLocalTrigger),
fChi2MatchTrigger(MUONTrack.fChi2MatchTrigger),
fHitsPatternInTrigCh(MUONTrack.fHitsPatternInTrigCh)
{
fChi2 = MUONTrack.fChi2;
fNHit = MUONTrack.fNHit;
- fMatchTrigger = MUONTrack.fMatchTrigger;
+ fLocalTrigger = MUONTrack.fLocalTrigger;
fChi2MatchTrigger = MUONTrack.fChi2MatchTrigger;
fHitsPatternInTrigCh = MUONTrack.fHitsPatternInTrigCh;
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;
+ }
+
+}
+
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;
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
};