]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONTrackHitPattern.cxx
Trigger related changes :
[u/mrichter/AliRoot.git] / MUON / AliMUONTrackHitPattern.cxx
index 4f0acc29675f010eb3b5b905b6ee5b70a0dd63b0..af97de09dcf977dc629c57addc9c6c9912c92148 100644 (file)
@@ -47,6 +47,7 @@
 #include "AliMUONGeometryTransformer.h"
 #include "AliMUONLocalTrigger.h"
 #include "AliMUONLocalTriggerBoard.h"
+#include "AliMUONRecoParam.h"
 #include "AliMUONTrack.h"
 #include "AliMUONTrackExtrap.h"
 #include "AliMUONTrackParam.h"
 #include "AliMpVSegmentation.h"
 #include "AliMpDEManager.h"
 #include "AliMUONReconstructor.h"
-#include "AliMUONRecoParam.h"
 #include "AliMUONTriggerTrack.h"
 #include "AliMUONVTriggerTrackStore.h"
 
 #include "AliMpConstants.h"
 
-#include "AliMagF.h"
 #include "AliLog.h"
 #include "AliTracker.h"
 
@@ -85,22 +84,20 @@ ClassImp(AliMUONTrackHitPattern) // Class implementation in ROOT context
 
 
 //______________________________________________________________________________
-AliMUONTrackHitPattern::AliMUONTrackHitPattern(const AliMUONGeometryTransformer& transformer,
+AliMUONTrackHitPattern::AliMUONTrackHitPattern(const AliMUONRecoParam* recoParam,
+                                               const AliMUONGeometryTransformer& transformer,
                                                const AliMUONDigitMaker& digitMaker)
-    : TObject(),
-      fTransformer(transformer),
-      fDigitMaker(digitMaker),
-      fDeltaZ(0.0),
-      fTrigCovariance(0x0),
-      fkMaxDistance(99999.)
+: TObject(),
+fkRecoParam(recoParam),
+fkTransformer(transformer),
+fkDigitMaker(digitMaker),
+fDeltaZ(0.0),
+fTrigCovariance(0x0),
+fkMaxDistance(99999.)
 {
     /// Default constructor
     InitMembers();
-
-    // Set magnetic field
-    const AliMagF* kField = AliTracker::GetFieldMap();
-    if (!kField) AliFatal("No field available");
-    AliMUONTrackExtrap::SetField(kField);
+    AliMUONTrackExtrap::SetField();
 }
 
 
@@ -147,7 +144,7 @@ void AliMUONTrackHitPattern::CheckConstants() const
 
 
 //______________________________________________________________________________
-void AliMUONTrackHitPattern::ExecuteValidation(AliMUONVTrackStore& trackStore,
+void AliMUONTrackHitPattern::ExecuteValidation(const AliMUONVTrackStore& trackStore,
                                               const AliMUONVTriggerTrackStore& triggerTrackStore,
                                               const AliMUONVTriggerStore& triggerStore) const
 {
@@ -158,7 +155,7 @@ void AliMUONTrackHitPattern::ExecuteValidation(AliMUONVTrackStore& trackStore,
   //
 
   AliMUONDigitStoreV1 digitStore;
-  TriggerDigits(triggerStore,digitStore);
+  fkDigitMaker.TriggerToDigitsStore(triggerStore,digitStore);
 
 
   TIter itTrack(trackStore.CreateIterator());
@@ -175,7 +172,7 @@ void AliMUONTrackHitPattern::ExecuteValidation(AliMUONVTrackStore& trackStore,
 
     AliMUONTriggerTrack *matchedTriggerTrack = MatchTriggerTrack(track, trackParam, triggerTrackStore, triggerStore);
 
-    UShort_t pattern = GetHitPattern(trackParam, matchedTriggerTrack, digitStore);
+    UShort_t pattern = GetHitPattern(matchedTriggerTrack, digitStore, &trackParam);
     track->SetHitsPatternInTrigCh(pattern);
   }
 }
@@ -259,10 +256,10 @@ AliMUONTrackHitPattern::MatchTriggerTrack(AliMUONTrack* track,
     }
 
     chi2 /= 3.; // Normalized Chi2: 3 degrees of freedom (X,Y,slopeY)
-    if (chi2 < AliMUONReconstructor::GetRecoParam()->GetMaxNormChi2MatchTrigger()) 
+    if (chi2 < GetRecoParam()->GetMaxNormChi2MatchTrigger()) 
     {
       Bool_t isDoubleTrack = (TMath::Abs(chi2 - minChi2MatchTrigger)<1.);
-      if (chi2 < minChi2MatchTrigger && chi2 < AliMUONReconstructor::GetRecoParam()->GetMaxNormChi2MatchTrigger()) 
+      if (chi2 < minChi2MatchTrigger && chi2 < GetRecoParam()->GetMaxNormChi2MatchTrigger()) 
       {
        if(isDoubleTrack)
        {
@@ -308,13 +305,7 @@ AliMUONTrackHitPattern::MatchTriggerTrack(AliMUONTrack* track,
 
   if (locTrg)
   {    
-    Int_t deviation = locTrg->LoDev(); 
-    Int_t sign = 0;
-    if ( !locTrg->LoSdev() &&  deviation ) sign=-1;
-    if ( !locTrg->LoSdev() && !deviation ) sign= 0;
-    if (  locTrg->LoSdev() == 1 )          sign=+1;
-    deviation *= sign;
-    deviation += 15;
+    Int_t deviation = locTrg->GetDeviation(); 
     track->SetLocalTrigger(locTrg->LoCircuit(),
                           locTrg->LoStripX(),
                           locTrg->LoStripY(),
@@ -328,9 +319,9 @@ AliMUONTrackHitPattern::MatchTriggerTrack(AliMUONTrack* track,
 
 
 //______________________________________________________________________________
-UShort_t AliMUONTrackHitPattern::GetHitPattern(AliMUONTrackParam &trackParam,
-                                              AliMUONTriggerTrack* matchedTriggerTrack,
-                                              AliMUONVDigitStore& digitStore) const
+UShort_t AliMUONTrackHitPattern::GetHitPattern(AliMUONTriggerTrack* matchedTriggerTrack,
+                                              AliMUONVDigitStore& digitStore,
+                                              AliMUONTrackParam* trackParam) const
 {
   //
   /// Get hit pattern on trigger chambers for the current track
@@ -351,13 +342,15 @@ UShort_t AliMUONTrackHitPattern::GetHitPattern(AliMUONTrackParam &trackParam,
 
 
   // Calculate hit pattern from tracker track propagation
-  // if hit pattern from trigger track failed
+  // if hit pattern from trigger track failed and track parameters are provided
+
+  if(!trackParam) return 0;
 
   for(Int_t ch=0; ch<4; ++ch)
   {
     Int_t iChamber = kNTrackingCh+ch;
-    AliMUONTrackExtrap::ExtrapToZCov(&trackParam, AliMUONConstants::DefaultChamberZ(iChamber));
-    FindPadMatchingTrack(digitStore, trackParam, isMatch, iChamber);
+    AliMUONTrackExtrap::ExtrapToZCov(trackParam, AliMUONConstants::DefaultChamberZ(iChamber));
+    FindPadMatchingTrack(digitStore, *trackParam, isMatch, iChamber);
     for(Int_t cath=0; cath<2; ++cath)
     {
       if(isMatch[cath]) SetBit(pattern, cath, ch);
@@ -408,47 +401,9 @@ AliMUONTrackHitPattern::ApplyMCSCorrections(AliMUONTrackParam& trackParam) const
 }
 
 
-//______________________________________________________________________________
-Bool_t 
-AliMUONTrackHitPattern::TriggerDigits(const AliMUONVTriggerStore& triggerStore,
-                                      AliMUONVDigitStore& digitStore) const
-{
-  //
-  /// make (S)Digit for trigger
-  //
-  
-  digitStore.Clear();
-  
-  AliMUONLocalTrigger* locTrg;
-  TIter next(triggerStore.CreateLocalIterator());
-  
-  while ( ( locTrg = static_cast<AliMUONLocalTrigger*>(next()) ) ) 
-  {
-    if (locTrg->IsNull()) continue;
-   
-    TArrayS xyPattern[2];
-    locTrg->GetXPattern(xyPattern[0]);
-    locTrg->GetYPattern(xyPattern[1]);
-
-    // do we need this ? (Ch.F.)
-//     for(Int_t cath=0; cath<2; ++cath)
-//     {
-//       for(Int_t ch=0; ch<4; ++ch)
-//       {
-//         if(xyPattern[cath][ch]==0) continue;
-//       }
-//     }
-    
-    Int_t nBoard = locTrg->LoCircuit();
-    fDigitMaker.TriggerDigits(nBoard, xyPattern, digitStore);
-  }
-  return kTRUE;
-}
-
-
 //______________________________________________________________________________
 void 
-AliMUONTrackHitPattern::FindPadMatchingTrack(AliMUONVDigitStore& digitStore,
+AliMUONTrackHitPattern::FindPadMatchingTrack(const AliMUONVDigitStore& digitStore,
                                              const AliMUONTrackParam& trackParam,
                                              Bool_t isMatch[2], Int_t iChamber) const
 {
@@ -484,7 +439,7 @@ AliMUONTrackHitPattern::FindPadMatchingTrack(AliMUONVDigitStore& digitStore,
       Float_t ylocal1 = pad.Position().Y();
       Float_t dpx = pad.Dimensions().X();
       Float_t dpy = pad.Dimensions().Y();
-      fTransformer.Local2Global(currDetElemId, xlocal1, ylocal1, 0, xpad, ypad, zpad);
+      fkTransformer.Local2Global(currDetElemId, xlocal1, ylocal1, 0, xpad, ypad, zpad);
       Float_t matchDist = MinDistanceFromPad(xpad, ypad, zpad, dpx, dpy, trackParam);
       if(matchDist>minMatchDist[cathode])continue;
       isMatch[cathode] = kTRUE;
@@ -510,7 +465,7 @@ AliMUONTrackHitPattern::MinDistanceFromPad(Float_t xPad, Float_t yPad, Float_t z
     Float_t xTrackAtPad = trackParamAtPadZ.GetNonBendingCoor();
     Float_t yTrackAtPad = trackParamAtPadZ.GetBendingCoor();
 
-    const Float_t kNSigma = AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTrigger();
+    const Float_t kNSigma = GetRecoParam()->GetSigmaCutForTrigger();
 
     const TMatrixD& kCovParam = trackParamAtPadZ.GetCovariances();
     
@@ -531,7 +486,7 @@ AliMUONTrackHitPattern::MinDistanceFromPad(Float_t xPad, Float_t yPad, Float_t z
 
 
 //_____________________________________________________________________________
-Int_t AliMUONTrackHitPattern::FindPadMatchingTrig(AliMUONVDigitStore& digitStore, Int_t &detElemId,
+Int_t AliMUONTrackHitPattern::FindPadMatchingTrig(const AliMUONVDigitStore& digitStore, Int_t &detElemId,
                                                  Float_t coor[2], Bool_t isMatch[2],
                                                  TArrayI nboard[2], TArrayF &zRealMatch, Float_t y11) const
 {
@@ -584,8 +539,8 @@ Int_t AliMUONTrackHitPattern::FindPadMatchingTrig(AliMUONVDigitStore& digitStore
        Float_t ylocal1 = pad.Position().Y();
        Float_t dpx = pad.Dimensions().X();
        Float_t dpy = pad.Dimensions().Y();
-       fTransformer.Local2Global(currDetElemId, xlocal1, ylocal1, 0, xpad, ypad, zpad);
-       AliDebug(2, Form("DetElemId = %i\tCathode = %i\t(x,y) Pad = (%i,%i) = (%.2f,%.2f)\tDim = (%.2f,%.2f)\tTrack = (%.2f,%.2f)\n",currDetElemId,cathode,ix,iy,xpad,ypad,dpx,dpy,coor[0],coor[1]));
+       fkTransformer.Local2Global(currDetElemId, xlocal1, ylocal1, 0, xpad, ypad, zpad);
+       AliDebug(2, Form("\nDetElemId = %i  Cathode = %i  Pad = (%i,%i) = (%.2f,%.2f)  Dim = (%.2f,%.2f)  Track = (%.2f,%.2f)\n",currDetElemId,cathode,ix,iy,xpad,ypad,dpx,dpy,coor[0],coor[1]));
        // searching track intersection with chambers (second approximation)
        if(ch%2==1){
            //if(iChamber%2==1){
@@ -635,8 +590,9 @@ Float_t AliMUONTrackHitPattern::PadMatchTrack(Float_t xPad, Float_t yPad,
     /// Decides if the digit belongs to the trigger track.
     //
 
-    Float_t maxDist = 2.;//3. // cm
-    Float_t maxDistCheckArea = 6.; // cm
+  Float_t maxDist = GetRecoParam()->GetStripCutForTrigger() * 2. * TMath::Min(dpx,dpy); // cm
+  if(maxDist<2.) maxDist = 2.;
+  Float_t maxDistCheckArea = GetRecoParam()->GetMaxStripAreaForTrigger() * 2. *  TMath::Min(dpx,dpy); // cm
 
     Float_t matchDist = fkMaxDistance;
 
@@ -681,8 +637,8 @@ Int_t AliMUONTrackHitPattern::DetElemIdFromPos(Float_t x, Float_t y,
        Float_t xlocal2 =  +deltax;
        Float_t ylocal2 =  +deltay;
        Float_t xg01, yg01, zg1, xg02, yg02, zg2;
-       fTransformer.Local2Global(detElemId, xlocal1, ylocal1, 0, xg01, yg01, zg1);
-       fTransformer.Local2Global(detElemId, xlocal2, ylocal2, 0, xg02, yg02, zg2);
+       fkTransformer.Local2Global(detElemId, xlocal1, ylocal1, 0, xg01, yg01, zg1);
+       fkTransformer.Local2Global(detElemId, xlocal2, ylocal2, 0, xg02, yg02, zg2);
 
        Float_t xg1 = xg01, xg2 = xg02, yg1 = yg01, yg2 = yg02;
 
@@ -725,7 +681,7 @@ void AliMUONTrackHitPattern::LocalBoardFromPos(Float_t x, Float_t y,
        localBoard[loc]=-1;
     }
     Float_t xl, yl, zl;
-    fTransformer.Global2Local(detElemId, x, y, 0, xl, yl, zl);
+    fkTransformer.Global2Local(detElemId, x, y, 0, xl, yl, zl);
     TVector2 pos(xl,yl);
     const AliMpVSegmentation* seg = 
        AliMpSegmentation::Instance()
@@ -742,7 +698,7 @@ void AliMUONTrackHitPattern::LocalBoardFromPos(Float_t x, Float_t y,
 
 //_____________________________________________________________________________
 Bool_t AliMUONTrackHitPattern::PerformTrigTrackMatch(UShort_t &pattern,
-                                                    AliMUONTriggerTrack *matchedTrigTrack,
+                                                    const AliMUONTriggerTrack* matchedTrigTrack,
                                                     AliMUONVDigitStore& digitStore) const
 {
   //
@@ -815,7 +771,7 @@ Bool_t AliMUONTrackHitPattern::PerformTrigTrackMatch(UShort_t &pattern,
 
   for(Int_t ch=0; ch<fgkNchambers; ch++) { // chamber loop
     Int_t currCh = chOrder[ch];
-    AliDebug(2, Form("zMeanChamber[%i] = %.2f\tzRealMatch[0] = %.2f\n",currCh,zMeanChamber[currCh],zRealMatch[0]));
+    AliDebug(3, Form("zMeanChamber[%i] = %.2f\tzRealMatch[0] = %.2f\n",currCh,zMeanChamber[currCh],zRealMatch[0]));
 
     for(Int_t cath=0; cath<fgkNcathodes; cath++){
       correctFactor[cath]=1.;