62 #include <Riostream.h> 81 fkRecoParam(recoParam),
82 fkTransformer(transformer),
83 fkDigitStore(digitStore),
84 fkTriggerUtilities(triggerUtilities),
131 while ( ( triggerTrack = static_cast<AliMUONTriggerTrack*>(itTriggerTrack() ) ) ){
147 AliDebug(1, Form(
"Hit pattern (MTR): hits 0x%x slat %2i board %3i effFlag %i",
157 while ( ( track = static_cast<AliMUONTrack*>(itTrack()) ) )
168 track->SetHitsPatternInTrigChTrk(pattern);
169 AliDebug(1, Form(
"Hit pattern (MTK): hits 0x%x slat %2i board %3i effFlag %i",
177 TArrayI& matchedDetElemId,
TObjArray& pads,
179 Bool_t isTriggerTrack)
const 184 enum {kBending, kNonBending};
186 Double_t minMatchDist[2];
187 Int_t padsInCheckArea[2];
191 Int_t inputDetElemId = matchedDetElemId[0];
193 for(Int_t cath=0; cath<2; cath++){
194 minMatchDist[cath] = 99999.;
195 padsInCheckArea[cath] = 0;
199 Int_t iSlat = inputDetElemId%100;
204 Double_t xPad = 0., yPad = 0., zPad = 0.;
205 Double_t sigmaX = 0., sigmaY = 0.;
208 Bool_t goodForEff = kTRUE;
210 while ( ( mDigit = static_cast<AliMUONVDigit*>(next()) ) )
212 Int_t currDetElemId = mDigit->DetElemId();
214 if ( currCh != iChamber )
continue;
215 Int_t currSlat = currDetElemId%100;
216 Int_t slatDiff = TMath::Abs(currSlat-iSlat);
217 if ( slatDiff>1 && slatDiff<17 )
continue;
219 Int_t cathode = mDigit->Cathode();
220 Int_t ix = mDigit->PadX();
221 Int_t iy = mDigit->PadY();
231 Double_t xWidth = 2. * dpx;
232 Double_t yWidth = 2. * dpy;
242 Double_t deltaY = TMath::Abs(yPad-trackParamAtPadZ.
GetBendingCoor()) - dpy;
246 if ( isTriggerTrack ) {
247 Double_t checkWidth = TMath::Min(xWidth, yWidth);
249 Double_t sigma = TMath::Max(checkWidth, 2.);
252 if ( deltaX <= maxCheckArea && deltaY <= maxCheckArea ) {
253 padsInCheckArea[cathode]++;
254 if ( padsInCheckArea[cathode] > 2 ) {
256 AliDebug(2, Form(
"padsInCheckArea[%i] = %i\n",cathode,padsInCheckArea[cathode]));
262 sigmaX = TMath::Sqrt(kCovParam(0,0));
263 sigmaY = TMath::Sqrt(kCovParam(2,2));
266 AliDebug(2, Form(
"\nDetElemId %i Cath %i Dim = (%.2f,%.2f) Pad (%i,%i) = (%.2f,%.2f) Track = (%.2f,%.2f) Delta (%.2f,%.2f) Sigma (%.2f,%.2f) p %g\n",
267 currDetElemId,cathode,dpx,dpy,ix,iy,xPad,yPad,trackParamAtPadZ.
GetNonBendingCoor(),trackParamAtPadZ.
GetBendingCoor(),deltaX,deltaY,sigmaX,sigmaY,trackParamAtPadZ.
P()));
269 if ( deltaX > nSigmas * sigmaX || deltaY > nSigmas * sigmaY )
continue;
270 Double_t matchDist = TMath::Max(deltaX, deltaY);
271 if ( matchDist > minMatchDist[cathode] )
continue;
272 if ( pads.At(cathode) )
delete pads.RemoveAt(cathode);
273 pads.AddAt((
AliMpPad*)pad.Clone(),cathode);
274 minMatchDist[cathode] = matchDist;
275 matchedDetElemId[cathode] = currDetElemId;
300 TArrayI digitPerTrack(2);
301 digitPerTrack.Reset();
305 TObjArray trackParamList, matchedPads(2), maskedPads(2), padsFromPos(4), validPads(2);
306 trackParamList.SetOwner(); matchedPads.SetOwner(); maskedPads.SetOwner(); padsFromPos.SetOwner();
308 Int_t firstSlat = -1, firstBoard = -1;
310 TArrayI matchedDetElemId(2), maskedDetElemId(2), detElemIdFromTrack(2), validDetElemId(2);
314 trackParamList.Delete(); matchedPads.Delete(); maskedPads.Delete(); padsFromPos.Delete(); validPads.Clear();
316 Int_t nFound =
GetTrackParamAtChamber(trackParam, 11+ich, trackParamList, detElemIdFromTrack, padsFromPos);
322 AliDebug(2,
"Warning: trigger track outside trigger chamber\n");
327 maskedDetElemId.Reset(detElemIdFromTrack[0]);
329 if ( maskedPads.GetEntries() > 0 ) {
332 for ( Int_t icath=0; icath<2; icath++ ) {
334 if ( ! currPad )
continue;
343 matchedDetElemId.Reset(detElemIdFromTrack[0]);
349 AliDebug(2, Form(
"Warning: track in %i matches many pads. Rejected!\n", matchedDetElemId[0]));
354 Int_t mostProbDEmatched = detElemIdFromTrack[0];
355 for ( Int_t icath=0; icath<2; icath++ ) {
356 if ( matchedPads.UncheckedAt(icath) ) {
360 digitPerTrack[icath]++;
361 mostProbDEmatched = matchedDetElemId[icath];
364 Int_t mostProbDEindex = 0;
365 for ( Int_t ifound=0; ifound<nFound; ifound++ ) {
366 if ( detElemIdFromTrack[ifound] == mostProbDEmatched ) {
367 mostProbDEindex = ifound;
374 for ( Int_t icath=0; icath<2; icath++ ) {
375 if ( matchedPads.UncheckedAt(icath) ) {
376 validPads.AddAt(matchedPads.UncheckedAt(icath),icath);
377 validDetElemId[icath] = matchedDetElemId[icath];
380 validPads.AddAt(padsFromPos.UncheckedAt(2*mostProbDEindex + icath),icath);
381 validDetElemId[icath] = detElemIdFromTrack[mostProbDEindex];
385 Int_t currSlat = mostProbDEmatched%100;
386 if ( firstSlat < 0 ) firstSlat = currSlat;
388 if ( currSlat != firstSlat || validDetElemId[0] != validDetElemId[1] ) {
393 if ( firstBoard < 0 ) firstBoard = ((
AliMpPad*)validPads.UncheckedAt(0))->GetLocalBoardId(0);
395 for ( Int_t icath=0; icath<2; icath++ ){
398 Bool_t atLeastOneLoc = kFALSE;
402 atLeastOneLoc = kTRUE;
414 for(Int_t cath=0; cath<2; cath++){
415 if(digitPerTrack[cath]<3) {
420 AliDebug(2, Form(
"Warning: found %i digits for trigger track cathode %i.\nRejecting event\n", digitPerTrack[cath],cath));
434 TObjArray& trackParamList, TArrayI& foundDetElemId,
444 foundDetElemId[0] = foundDetElemId[1] = 0;
453 Double_t xGlobal, yGlobal, zGlobal;
460 if ( deArea->
Contains(pointArea) ) {
464 for ( Int_t icath=0; icath<2; icath++ ) {
470 padsFromPos.AddAt(pad.Clone(), 2*nFound + icath);
474 if ( validPads < 2 )
continue;
478 trackParamList.AddAt(extrapTrackParam,nFound);
479 foundDetElemId[nFound] = detElemId;
481 if ( nFound == 2 )
break;
483 else if ( nFound > 0 )
break;
501 Int_t matchTrigger = 0;
503 TMatrixD paramDiff(3,1);
505 Double_t chi2MatchTrigger = 0., minChi2MatchTrigger = 999.;
506 Int_t doubleMatch = -1;
507 Double_t doubleChi2 = -1.;
513 TMatrixD trackCov(3,3);
517 while ( ( triggerTrack = static_cast<AliMUONTriggerTrack*>(itTriggerTrack() ) ) )
526 paramDiff(0,0) = triggerTrack->
GetX11() - xTrack;
527 paramDiff(1,0) = triggerTrack->
GetY11() - yTrack;
528 paramDiff(2,0) = triggerTrack->
GetSlopeY() - ySlopeTrack;
532 trackCov(0,0) = kParamCov(0,0);
533 trackCov(1,1) = kParamCov(2,2);
534 trackCov(2,2) = kParamCov(3,3);
535 trackCov(1,2) = kParamCov(2,3);
536 trackCov(2,1) = kParamCov(3,2);
541 TMatrixD sumCov(trackCov,TMatrixD::kPlus,trigCov);
542 if (sumCov.Determinant() != 0) {
545 TMatrixD tmp(sumCov,TMatrixD::kMult,paramDiff);
546 TMatrixD chi2M(paramDiff,TMatrixD::kTransposeMult,tmp);
550 Double_t sigma2 = 0.;
552 for (Int_t iVar = 0; iVar < 3; iVar++) {
553 sigma2 = trackCov(iVar,iVar) + trigCov(iVar,iVar);
554 chi2 += paramDiff(iVar,0) * paramDiff(iVar,0) / sigma2;
559 if (chi2 <
GetRecoParam()->GetMaxNormChi2MatchTrigger())
561 Bool_t isDoubleTrack = (TMath::Abs(chi2 - minChi2MatchTrigger)<1.);
566 doubleMatch = loTrgNum;
567 doubleChi2 = chi2MatchTrigger;
568 doubleTriggerTrack = matchedTriggerTrack;
570 minChi2MatchTrigger =
chi2;
571 chi2MatchTrigger =
chi2;
573 matchedTriggerTrack = triggerTrack;
576 if(locTrg->
LoLpt()>0) matchTrigger = 2;
577 if(locTrg->
LoHpt()>0) matchTrigger = 3;
579 else if(isDoubleTrack)
588 AliDebug(1, Form(
"Two candidates found: %i and %i",loTrgNum,doubleMatch));
590 if((locTrg1->
LoLpt()>0 && matchTrigger<2) || (locTrg1->
LoHpt() && matchTrigger<3))
592 if(locTrg1->
LoHpt()>0) matchTrigger=3;
593 else matchTrigger = 2;
594 loTrgNum = doubleMatch;
595 chi2MatchTrigger = doubleChi2;
596 matchedTriggerTrack = doubleTriggerTrack;
616 return matchedTriggerTrack;
622 const TVector3& globalPoint2, Int_t detElemId)
const 627 Double_t xloc, yloc, zloc;
629 TVector3 localPoint1(xloc, yloc, zloc);
631 TVector3 localPoint2(xloc, yloc, zloc);
632 localCoor = localPoint1 - ( localPoint1.Z() / ( localPoint2.Z() - localPoint1.Z() ) ) * ( localPoint2 - localPoint1 );
662 for(Int_t ch=0; ch<4; ++ch)
664 Int_t iChamber = kNTrackingCh+ch;
667 for(Int_t cath=0; cath<2; ++cath)
684 Bool_t isMatch[2], Int_t iChamber)
const 690 Float_t minMatchDist[2];
692 for(Int_t cath=0; cath<2; ++cath)
694 isMatch[cath]=kFALSE;
701 while ( ( mDigit = static_cast<AliMUONVDigit*>(next()) ) )
703 Int_t currDetElemId = mDigit->
DetElemId();
705 if(currCh!=iChamber)
continue;
706 Int_t cathode = mDigit->Cathode();
707 Int_t ix = mDigit->PadX();
708 Int_t iy = mDigit->PadY();
709 Float_t xpad, ypad, zpad;
721 if(matchDist>minMatchDist[cathode])
continue;
722 isMatch[cathode] = kTRUE;
723 if(isMatch[0] && isMatch[1])
break;
724 minMatchDist[cathode] = matchDist;
732 Float_t dpx, Float_t dpy,
749 Float_t sigmaX = TMath::Sqrt(kCovParam(0,0));
750 Float_t sigmaY = TMath::Sqrt(kCovParam(2,2));
752 Float_t maxDistX = kNSigma * sigmaX;
753 Float_t maxDistY = kNSigma * sigmaY;
755 Float_t deltaX = TMath::Abs(xPad-xTrackAtPad)-dpx;
756 Float_t deltaY = TMath::Abs(yPad-yTrackAtPad)-dpy;
759 if(deltaX<=maxDistX && deltaY<=maxDistY) matchDist = TMath::Max(deltaX, deltaY);
767 Int_t matchedDetElemId[2],
TObjArray& pads)
const 773 enum {kBending, kNonBending};
775 Float_t minMatchDist[2];
776 Int_t padsInCheckArea[2];
778 Int_t inputDetElemId = matchedDetElemId[0];
780 for(Int_t cath=0; cath<2; cath++){
782 padsInCheckArea[cath] = 0;
786 Int_t iSlat = inputDetElemId%100;
790 TVector3 localExtrap;
792 Int_t previousDetElemId = -1;
794 while ( ( mDigit = static_cast<AliMUONVDigit*>(next()) ) )
796 Int_t currDetElemId = mDigit->
DetElemId();
798 if ( currCh != iChamber )
continue;
799 Int_t currSlat = currDetElemId%100;
800 Int_t slatDiff = TMath::Abs(currSlat-iSlat);
801 if ( slatDiff>1 && slatDiff<17 )
continue;
802 Int_t cathode = mDigit->Cathode();
803 Int_t ix = mDigit->PadX();
804 Int_t iy = mDigit->PadY();
810 if ( currDetElemId != previousDetElemId ) {
812 previousDetElemId = currDetElemId;
815 AliDebug(11, Form(
"\nDetElemId = %i Cathode = %i Pad = (%i,%i) = (%.2f,%.2f) Dim = (%.2f,%.2f) Track = (%.2f,%.2f)\n",
818 if ( matchDist <
fkMaxDistance/2. ) padsInCheckArea[cathode]++;
819 if ( matchDist > minMatchDist[cathode] )
continue;
820 if ( pads.At(cathode) )
delete pads.RemoveAt(cathode);
821 pads.AddAt((
AliMpPad*)pad.Clone(),cathode);
822 minMatchDist[cathode] = matchDist;
823 matchedDetElemId[cathode] = currDetElemId;
828 for ( Int_t cath=0; cath<2; cath++ ){
829 if ( padsInCheckArea[cath] > 2 ) {
830 AliDebug(10, Form(
"padsInCheckArea[%i] = %i\n",cath,padsInCheckArea[cath]));
852 if ( maxDist<2. ) maxDist = 2.;
857 Float_t deltaX = TMath::Abs(xPad-trackPosAtPad.X())-dpx;
858 Float_t deltaY = TMath::Abs(yPad-trackPosAtPad.Y())-dpy;
859 Float_t maxDistX = maxDist;
860 Float_t maxDistY = maxDist;
862 if(deltaX<=maxDistX && deltaY<=maxDistY) matchDist = TMath::Max(deltaX, deltaY);
863 else if(deltaX<=maxDistCheckArea && deltaY<=maxDistCheckArea) matchDist =
fkMaxDistance/5.;
870 Int_t chamber, Int_t foundDetElemId[2])
const 880 foundDetElemId[0] = foundDetElemId[1] = 0;
887 if ( deArea->
Contains(pointArea) ) {
888 foundDetElemId[nFound++] = detElemId;
889 if ( nFound == 2 )
break;
891 else if ( nFound > 0 )
break;
912 for ( Int_t icath=0; icath<2; icath++ ) {
918 pads.AddAt(pad.Clone(), icath);
922 return pads.GetEntries();
930 Float_t dpx = ((
AliMpPad*)pads.At(1))->GetDimensionX();
931 Float_t dpy = ((
AliMpPad*)pads.At(0))->GetDimensionY();
932 Float_t resolution[2] = {
static_cast<Float_t
>(0.75*dpx), static_cast<Float_t>(0.75*dpy) };
933 Float_t sign[3] = {0., 1., -1.};
934 for ( Int_t ineighx=0; ineighx<3; ineighx++ ) {
935 for ( Int_t ineighy=0; ineighy<3; ineighy++ ) {
936 AliMpArea pointArea(coor[0]+sign[ineighx]*resolution[0],
937 coor[1]+sign[ineighy]*resolution[1],
940 if ( ! deArea->
Contains(pointArea) )
return kTRUE;
965 Float_t inpactPos[2] = {
static_cast<Float_t
>(localCoor.X()), static_cast<Float_t>(localCoor.Y())};
966 Float_t sign[2] = {-1., 1.};
967 Int_t icoor = 1-cathode;
968 Int_t addSlatSign[3] = {0,1,-1};
970 Int_t inputSlat = detElemId%100;
973 for ( Int_t ineigh=0; ineigh<2; ineigh++ ) {
974 newPos[1-icoor] = inpactPos[1-icoor];
975 newPos[icoor] = inpactPos[icoor] + 1.05 * sign[ineigh] * padDim[icoor];
976 if ( TMath::Abs(newPos[icoor] - padPos[icoor]) < padDim[icoor] )
continue;
984 TVector3 deltaVec(newPos[0]-inpactPos[0],newPos[1]-inpactPos[1],0.);
985 TVector3 transVec11 = vec11+deltaVec;
986 TVector3 transVec21 = vec21+deltaVec;
988 padsFromPos.SetOwner();
989 for ( Int_t iAddSlat=0; iAddSlat<2; iAddSlat++ ) {
990 Int_t currSlat = (inputSlat + addSlatSign[iAddSlat])%18;
991 Int_t currDetElemId = 100 * inputCh + currSlat;
992 PadsFromPos(transVec11,transVec21,currDetElemId,padsFromPos);
995 padsFromPos.Delete();
996 if ( isMasked ) ++nMasked;
1001 Double_t maskedProb = ((Double_t)nMasked)/3.;
1002 if ( gRandom->Rndm() < maskedProb )
return kTRUE;
1018 enum {kBending, kNonBending};
1021 zMeanChamber[0] = matchedTrigTrack->
GetZ11();
1023 zMeanChamber[2] = matchedTrigTrack->
GetZ21();
1026 TArrayI digitPerTrack(2);
1027 digitPerTrack.Reset();
1029 Float_t trackIntersectCh[2];
1031 Float_t slopeX = matchedTrigTrack->
GetSlopeX();
1032 Float_t slopeY = matchedTrigTrack->
GetSlopeY();
1034 Float_t z11 = matchedTrigTrack->
GetZ11();
1035 Float_t x11 = slopeX * z11;
1036 Float_t y11 = matchedTrigTrack->
GetY11();
1037 Float_t z21 = matchedTrigTrack->
GetZ21();
1038 Float_t x21 = slopeX * z21;
1039 Float_t y21 = y11 + slopeY * (z21-z11);
1040 TVector3 vec11(x11, y11, z11), vec21(x21, y21, z21);
1042 Int_t firstSlat = -1, firstBoard = -1;
1044 TObjArray matchedPads(2), padsFromPos(2), validPads(2);
1045 matchedPads.SetOwner(); padsFromPos.SetOwner();
1046 Int_t matchedDetElemId[2], detElemIdFromTrack[2];
1051 Float_t deltaZ = zMeanChamber[ich] - zMeanChamber[0];
1052 trackIntersectCh[0] = zMeanChamber[ich] * slopeX;
1053 trackIntersectCh[1] = y11 + deltaZ * slopeY;
1054 Int_t nFound =
DetElemIdFromPos(trackIntersectCh[0], trackIntersectCh[1], 11+ich, detElemIdFromTrack);
1055 if ( nFound == 0 ) {
1060 AliDebug(10,
"Warning: trigger track outside trigger chamber\n");
1064 matchedDetElemId[0] = matchedDetElemId[1] = detElemIdFromTrack[0];
1071 AliDebug(10, Form(
"Warning: track = %p (%i) matches many pads. Rejected!\n",(
void *)matchedTrigTrack, matchedDetElemId[0]));
1076 Int_t mostProbDEmatched = detElemIdFromTrack[0];
1077 for ( Int_t icath=0; icath<2; icath++ ) {
1078 if ( matchedPads.UncheckedAt(icath) ) {
1082 digitPerTrack[icath]++;
1083 mostProbDEmatched = matchedDetElemId[icath];
1086 Int_t mostProbDEfromTrack = detElemIdFromTrack[0];
1087 for ( Int_t ifound=0; ifound<nFound; ifound++ ) {
1088 if ( detElemIdFromTrack[ifound] == mostProbDEmatched ) {
1089 mostProbDEfromTrack = mostProbDEmatched;
1096 if ( nMatched < 2 )
PadsFromPos(vec11, vec21, mostProbDEfromTrack, padsFromPos);
1098 for ( Int_t cath=0; cath<2; cath++ ) {
1099 if ( matchedPads.UncheckedAt(cath) ) validPads.AddAt(matchedPads.UncheckedAt(cath),cath);
1100 else if ( padsFromPos.UncheckedAt(cath) ) {
1102 validPads.AddAt(currPad,cath);
1103 if (
IsMasked(*currPad, mostProbDEfromTrack, cath, vec11, vec21) ) {
1115 if ( nMatched == 0 &&
IsCloseToAccEdge(padsFromPos, mostProbDEfromTrack, trackIntersectCh) ) {
1121 AliDebug(10,
"Warning: trigger track at the edge of the chamber\n");
1124 Int_t currSlat = mostProbDEmatched%100;
1125 if ( firstSlat < 0 ) firstSlat = currSlat;
1126 else if ( currSlat != firstSlat ) {
1131 if ( firstBoard < 0 ) firstBoard = ((
AliMpPad*)validPads[kBending])->GetLocalBoardId(0);
1133 for ( Int_t cath=0; cath<2; cath++ ){
1136 Bool_t atLeastOneLoc = kFALSE;
1140 atLeastOneLoc = kTRUE;
1148 matchedPads.Delete();
1149 padsFromPos.Delete();
1154 for(Int_t cath=0; cath<2; cath++){
1155 if(digitPerTrack[cath]<3) {
1160 AliDebug(10, Form(
"Warning: found %i digits for trigger track cathode %i.\nRejecting event\n", digitPerTrack[cath],cath));
Int_t GetNofLocations() const
Bool_t FindMatchingPads(const AliMUONTrackParam *trackParam, TArrayI &matchedDetElemId, TObjArray &pads, const AliMUONVDigitStore &digitStore, Bool_t isTriggerTrack) const
Bool_t IsCloseToAccEdge(TObjArray &pads, Int_t detElemId, Float_t coor[2]) const
Base class of a track container.
Int_t DetElemIdFromPos(Float_t x, Float_t y, Int_t chamber, Int_t foundDetElemId[2]) const
Track crosses the same RPC in all planes.
UShort_t GetHitsPatternInTrigCh() const
Get word telling which trigger chambers where hit by track.
Track is not good for chamber efficiency evaluation.
The iterator over detection elements.
AliMUONVDigitStore * GetMaskedDigits() const
const AliMpVSegmentation * GetMpSegmentation(Int_t detElemId, AliMp::CathodType cath, Bool_t warn=true) const
Bool_t FindPadMatchingTrig(const TVector3 &vec11, const TVector3 &vec21, Int_t matchedDetElemId[2], TObjArray &matchedPads) const
Problems in pattern determination since track extrapolation is outside trigger chambers.
Interface for a digit container.
virtual TIterator * CreateIterator() const =0
Iterator to loop over tracks.
void ApplyMCSCorrections(AliMUONTrackParam &trackParam) const
static AliMpSegmentation * Instance(Bool_t warn=true)
const TMatrixD & GetCovariances() const
static Int_t NTrackingCh()
Return number of tracking chambers.
Float_t PadMatchTrack(const AliMpPad &pad, const TVector3 &trackPosAtPad) const
Double_t GetBendingCoor() const
return bending coordinate (cm)
virtual TIterator * CreateIterator() const =0
Create an iterator to loop over tracks.
Int_t GetLoTrgNum() const
Return local trigger number.
Bool_t CovariancesExist() const
return kTRUE if the covariance matrix exist, kFALSE if not
The pattern was calculated from a tracker track not matching trigger track.
Int_t GetTrackParamAtChamber(const AliMUONTrackParam &inputTrackParam, Int_t chamber, TObjArray &trackParamList, TArrayI &foundDetElemId, TObjArray &padsFromPos) const
Double_t GetZ() const
return Z coordinate (cm)
Int_t LoLpt() const
Return Low pt.
A rectangle area positioned in plane..
Track parameters in ALICE dimuon spectrometer.
Track not good for effciency calculation since it matches masked pads.
const AliMUONVDigitStore & fkDigitStore
! digitStore
Int_t CurrentDEId() const
Class with MUON reconstruction parameters.
void SetNonBendingCoor(Double_t nonBendingCoor)
set non bending coordinate (cm)
Reconstructed trigger track in ALICE dimuon spectrometer.
Bool_t PosInDetElemIdLocal(TVector3 &localCoor, const TVector3 &globalPoint1, const TVector3 &globalPoint2, Int_t detElemId) const
static void AddEffInfo(UInt_t &pattern, Int_t slatOrInfo, Int_t board=0, EAliTriggerChPatternFlag effType=kNoEff)
Add efficiency flag and crossed RPC or info on rejected track.
Utilities for trigger (check if pad is masked)
Float_t MinDistanceFromPad(Float_t xPad, Float_t yPad, Float_t zPad, Float_t dpx, Float_t dpy, const AliMUONTrackParam &trackParam) const
Double_t GetStripCutForTrigger() const
return the cut in strips to apply on trigger track during trigger chamber efficiency ...
Track crosses the same board in all planes.
virtual AliMpPad PadByIndices(Int_t ix, Int_t iy, Bool_t warning=true) const =0
Find pad by indices.
Int_t LoHpt() const
Return High p.
virtual Int_t DetElemId() const =0
The detection element this digit belongs to.
Int_t LoStripY() const
Return Y strip in MT11.
Float_t GetX11() const
Return x position of fired Y strip in MC11.
Base class of a trigger information store.
const AliMUONGeometryTransformer & fkTransformer
! geometry transformer
#define AliWarning(message)
static Double_t MuonFilterX0()
Return radiation length (in cm) of muon filter.
The RPC cannot be univoquely determined.
static Double_t LengthTolerance()
Return the length precision for tests.
static Int_t GetSlatOrInfo(UInt_t pattern)
Getting crossed slat or info.
Float_t GetSlopeY() const
Return track slope in Y.
static Int_t GetChamberId(Int_t detElemId, Bool_t warn=true)
Double_t GetBendingSlope() const
return bending slope (cm ** -1)
Int_t LoStripX() const
Return X strip in MT11.
Double_t GetMaxNormChi2MatchTrigger() const
return the maximum normalized chi2 of tracking/trigger track matching
void SetBendingSlope(Double_t bendingSlope)
set bending slope (cm ** -1)
Double_t GetMaxStripAreaForTrigger() const
return the maximum search area in strips to apply on trigger track during trigger chamber efficiency ...
static Double_t MuonFilterZEnd()
Return z-position of muon filter end.
Reconstructed Local Trigger object.
Class for the MUON track hit pattern.
virtual TIterator * CreateTriggerIterator() const =0
Create an iterator to loop over trigger digits only.
void FindPadMatchingTrack(const AliMUONTrackParam &trackParam, Bool_t isMatch[2], Int_t iChamber) const
Bool_t IsMasked(const AliMUONVDigit &digit) const
Double_t GetPositionY() const
Return the pad x position (in cm)
static Double_t MuonFilterZBeg()
Return z-position of muon filter begining.
void SetLocalTrigger(Int_t loCirc, Int_t loStripX, Int_t loStripY, Int_t loDev, Int_t loLpt, Int_t loHpt, UChar_t respWithoutChamber=0)
set local trigger information for the matched trigger track
virtual ~AliMUONTrackHitPattern()
#define AliCodeTimerAuto(message, counter)
Float_t GetY11() const
Return y position of fired X strip in MC11.
AliMp::CathodType GetCathodType(Int_t cathodNumber)
Convert integer number in enum;.
static Int_t NTriggerCh()
Return number of trigger chambers.
void SetNonBendingSlope(Double_t nonBendingSlope)
set non bending slope (cm ** -1)
Base class of a trigger track store.
AliMUONTriggerTrack * MatchTriggerTrack(AliMUONTrack *track, AliMUONTrackParam &trackParam, const AliMUONVTriggerTrackStore &triggerTrackStore, const AliMUONVTriggerStore &triggerStore) const
const AliMUONTriggerUtilities * fkTriggerUtilities
! trigger utilities for mapping
Bool_t PadsFromPos(const TVector3 &vec11, const TVector3 &vec21, Int_t detElemId, TObjArray &pads) const
void SetMatchTrigger(Int_t matchTrigger)
set the flag telling whether track matches with trigger track or not
UInt_t GetHitPattern(const AliMUONTrackParam &trackParam, Bool_t isTriggerTrack) const
Int_t GetLocalBoardId(Int_t i) const
Float_t GetZ21() const
Return z position of fired X strip in MC21.
Int_t GetDeviation() const
const Float_t fkMaxDistance
! Maximum distance for reference // obsolete
void ExecuteValidation(const AliMUONVTrackStore &trackStore, const AliMUONVTriggerTrackStore &triggerTrackStore, const AliMUONVTriggerStore &triggerStore) const
Float_t GetZ11() const
Return z position of fired X strip in MC11.
Track crosses different RPCs.
Bool_t IsValid() const
Return validity.
void SetInverseBendingMomentum(Double_t inverseBendingMomentum)
set inverse bending momentum (GeV/c ** -1) times the charge (assumed forward motion) ...
virtual AliMpPad PadByPosition(Double_t x, Double_t y, Bool_t warning=true) const =0
Find pad by position.
#define AliDebug(logLevel, message)
Double_t GetSigmaCutForTrigger() const
return the cut in sigma to apply on track during trigger hit pattern search
void SetBendingCoor(Double_t bendingCoor)
set bending coordinate (cm)
The abstract base class for the segmentation.
Double_t GetDimensionY() const
Return the y pad dimension - half length (in cm)
static Float_t * DefaultChamberZ()
Return pointer to array of positions.
Bool_t PerformTrigTrackMatch(UInt_t &pattern, const AliMUONTriggerTrack *matchedTrigTrack) const
UChar_t GetTriggerWithoutChamber() const
Triggers from the re-calculated trigger response after removing chambers one-by-one.
Double_t GetNonBendingCoor() const
return non bending coordinate (cm)
Track not good for effciency calculation since it matches pads in less than 3/4 chambers.
Class which encapsuate all information about a pad.
static void SetFiredChamber(UInt_t &pattern, Int_t cathode, Int_t chamber)
Set hits pattern.
Double_t GetPositionX() const
Return the pad x position (in cm)
Reconstructed track in ALICE dimuon spectrometer.
Track not good for effciency calculation since it matches many pads.
Bool_t Contains(const AliMpArea &area) const
const AliMUONRecoParam * GetRecoParam() const
Return reco parameters.
Bool_t IsMasked(const AliMpPad &pad, Int_t detElemId, Int_t cathode, const TVector3 &vec11, const TVector3 &vec21) const
void SetZ(Double_t z)
set Z coordinate (cm)
Int_t GetLocalBoardChannel(Int_t i) const
Double_t GetDimensionX() const
Return the x pad dimension - half length (in cm)
const TMatrixD & GetCovariances() const
virtual AliMUONLocalTrigger * FindLocal(Int_t boardNumber) const =0
Find a local trigger by the board number (not an index, it is a number really)
static Int_t GetCrossedBoard(UInt_t pattern)
Getting crossed board.
Int_t LoCircuit() const
Return Circuit number.
void SetChi2MatchTrigger(Double_t chi2MatchTrigger)
set the chi2 of trigger/track matching
static Int_t GetEffFlag(UInt_t pattern)
Get Efficiency flag.
void SetHitsPatternInTrigCh(UShort_t hitsPatternInTrigCh)
Set word telling which trigger chambers where hit by track.
Float_t GetSlopeX() const
Return track slope in X.