]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Removal of calls to static AliMUONReconstructor::GetRecoParam(). Thanks to Laurent...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 23 Jul 2008 12:03:09 +0000 (12:03 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 23 Jul 2008 12:03:09 +0000 (12:03 +0000)
26 files changed:
MUON/AliMUONESDInterface.cxx
MUON/AliMUONESDInterface.h
MUON/AliMUONPainterDataSourceFrame.cxx
MUON/AliMUONQADataMakerRec.cxx
MUON/AliMUONQADataMakerRec.h
MUON/AliMUONRecoCheck.cxx
MUON/AliMUONRecoCheck.h
MUON/AliMUONReconstructor.cxx
MUON/AliMUONReconstructor.h
MUON/AliMUONRefitter.cxx
MUON/AliMUONRefitter.h
MUON/AliMUONTrack.cxx
MUON/AliMUONTrack.h
MUON/AliMUONTrackHitPattern.cxx
MUON/AliMUONTrackHitPattern.h
MUON/AliMUONTrackReconstructor.cxx
MUON/AliMUONTrackReconstructor.h
MUON/AliMUONTrackReconstructorK.cxx
MUON/AliMUONTrackReconstructorK.h
MUON/AliMUONTracker.cxx
MUON/AliMUONTracker.h
MUON/AliMUONTrackerCalibratedDataMaker.cxx
MUON/AliMUONTrackerCalibratedDataMaker.h
MUON/AliMUONVTrackReconstructor.cxx
MUON/AliMUONVTrackReconstructor.h
MUON/runReconstruction.C

index 34ec71c9ff517f57968e4e8ffa08dc30212773bb..3c1299552d5f699b48b9ef303e1e893615b7e90d 100644 (file)
@@ -76,13 +76,14 @@ TString AliMUONESDInterface::fgDigitStoreName = "AliMUONDigitStoreV2R";
 TString AliMUONESDInterface::fgTriggerStoreName = "AliMUONTriggerStoreV1";
 
 //_____________________________________________________________________________
-AliMUONESDInterface::AliMUONESDInterface()
+AliMUONESDInterface::AliMUONESDInterface(AliMUONRecoParam* recoParam)
 : TObject(),
-  fTracks(0x0),
-  fDigits(0x0),
-  fTriggers(0x0),
-  fClusterMap(0x0),
-  fDigitMap(0x0)
+fRecoParam(recoParam),
+fTracks(0x0),
+fDigits(0x0),
+fTriggers(0x0),
+fClusterMap(0x0),
+fDigitMap(0x0)
 {
   /// Default constructor
 }
@@ -158,7 +159,7 @@ void AliMUONESDInterface::LoadEvent(AliESDEvent& esdEvent)
     if (!esdTrack->ContainTrackerData()) continue;
     
     // add it to track store
-    AliMUONTrack* track = Add(*esdTrack, *fTracks);
+    AliMUONTrack* track = Add(GetRecoParam(),*esdTrack, *fTracks);
     
     // prepare cluster map
     AliMpExMap* cMap = new AliMpExMap;
@@ -608,7 +609,7 @@ void AliMUONESDInterface::SetParamCov(const AliMUONTrackParam& trackParam, AliES
 }
 
 //_____________________________________________________________________________
-void AliMUONESDInterface::ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONTrack& track)
+void AliMUONESDInterface::ESDToMUON(const AliMUONRecoParam* recoParam, const AliESDMuonTrack& esdTrack, AliMUONTrack& track)
 {
   /// Transfert data from ESDMuon track to MUON track
   
@@ -678,7 +679,7 @@ void AliMUONESDInterface::ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONTrac
     AliMUONTrackExtrap::ExtrapToZCov(firstTrackParam,firstTrackParam->GetClusterPtr()->GetZ());
     
     // refit the track to get better parameters and covariances at each cluster (temporary disable track improvement)
-    if (!fgTracker) fgTracker = AliMUONTracker::CreateTrackReconstructor(AliMUONReconstructor::GetRecoParam()->GetTrackingMode(),0x0);
+    if (!fgTracker) fgTracker = AliMUONTracker::CreateTrackReconstructor(recoParam,0x0);
     if (!fgTracker->RefitTrack(track, kFALSE)) track.UpdateCovTrackParamAtCluster();
     
   } else {
@@ -923,13 +924,14 @@ void AliMUONESDInterface::MUONToESD(const AliMUONVDigit& digit, AliESDMuonPad& e
 }
 
 //___________________________________________________________________________
-AliMUONTrack* AliMUONESDInterface::Add(const AliESDMuonTrack& esdTrack, AliMUONVTrackStore& trackStore)
+AliMUONTrack* 
+AliMUONESDInterface::Add(const AliMUONRecoParam* recoParam, const AliESDMuonTrack& esdTrack, AliMUONVTrackStore& trackStore)
 {
   /// Create MUON track from ESDMuon track and add it to the store
   /// return a pointer to the track into the store (0x0 if the track already exist)
   if(trackStore.FindObject(esdTrack.GetUniqueID())) return 0x0;
   AliMUONTrack* track = trackStore.Add(AliMUONTrack());
-  ESDToMUON(esdTrack, *track);
+  ESDToMUON(recoParam,esdTrack, *track);
   return track;
 }
 
index a6b141d5154b81e486438fadf096c61bb3321eaa..5541e861f01f119b7ef190ff5e14c244fcee52a5 100644 (file)
@@ -32,12 +32,13 @@ class AliESDMuonTrack;
 class AliESDMuonCluster;
 class AliESDMuonPad;
 class TIterator;
+class AliMUONRecoParam;
 
 class AliMUONESDInterface : public TObject
 {
 public: // methods to play with internal objects
   
-  AliMUONESDInterface();
+  AliMUONESDInterface(AliMUONRecoParam* recoParam);
   virtual ~AliMUONESDInterface();
   
   virtual void Clear(Option_t* = "");
@@ -78,6 +79,7 @@ public: // methods to play with internal objects
   TIterator* CreateDigitIteratorInCluster(UInt_t clusterId) const;
   TIterator* CreateLocalTriggerIterator() const;
   
+  const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
   
 public: // static methods
   
@@ -109,7 +111,7 @@ public: // static methods
   static void SetParamCov(const AliMUONTrackParam& trackParam, AliESDMuonTrack& esdTrack);
   
   // ESDMuon objects --> MUON objects conversion
-  static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONTrack& track);
+  static void ESDToMUON(const AliMUONRecoParam* recoParam, const AliESDMuonTrack& esdTrack, AliMUONTrack& track);
   static void ESDToMUON(const AliESDMuonTrack& esdTrack, AliMUONLocalTrigger& locTrg);
   static void ESDToMUON(const AliESDMuonCluster& esdCluster, AliMUONVCluster& cluster);
   static void ESDToMUON(const AliESDMuonPad& esdPad, AliMUONVDigit& digit);
@@ -123,7 +125,7 @@ public: // static methods
   
   // Add ESD object into the corresponding MUON store
   // return a pointer to the corresponding MUON object into the store
-  static AliMUONTrack*    Add(const AliESDMuonTrack& esdTrack, AliMUONVTrackStore& trackStore);
+  static AliMUONTrack*    Add(const AliMUONRecoParam* recoParam, const AliESDMuonTrack& esdTrack, AliMUONVTrackStore& trackStore);
   static void             Add(const AliESDMuonTrack& esdTrack, AliMUONVTriggerStore& triggerStore);
   static AliMUONVCluster* Add(const AliESDMuonCluster& esdCluster, AliMUONVClusterStore& clusterStore);
   static AliMUONVDigit*   Add(const AliESDMuonPad& esdPad, AliMUONVDigitStore& digitStore);
@@ -159,7 +161,8 @@ private:
   AliMpExMap* fClusterMap; ///< map of clusters
   AliMpExMap* fDigitMap;   ///< map of digits
   
-    
+  const AliMUONRecoParam* fRecoParam; ///< get reco param
+  
   ClassDef(AliMUONESDInterface,0)
 };
 
index 5d885ad903007cd5e74e97d8142798c071c886f5..87c178436f90d105efa56f0ee90959e6dbd2e997 100644 (file)
@@ -23,6 +23,7 @@
 #include "AliMUONPainterEnv.h"
 #include "AliMUONPainterHelper.h"
 #include "AliMUONPainterRegistry.h"
+#include "AliMUONRecoParam.h"
 #include "AliMUONTrackerACFDataMaker.h"
 #include "AliMUONTrackerCalibratedDataMaker.h"
 #include "AliMUONTrackerOCDBDataMaker.h"
@@ -553,7 +554,13 @@ AliMUONPainterDataSourceFrame::CreateRawDataSource(const TString& uri)
 
   if ( ocdbPath.Length() > 0 ) 
   {
-    reader = new AliMUONTrackerCalibratedDataMaker(rawReader,ocdbPath.Data(),
+    AliMUONRecoParam* recoParam = AliMUONRecoParam::GetCosmicParam();
+    
+    // FIXME: where to get the reco params from in reality ?
+    
+    reader = new AliMUONTrackerCalibratedDataMaker(recoParam,
+                                                   rawReader,
+                                                   ocdbPath.Data(),
                                                    calibMode.Data(),
                                                    histogram,
                                                    sxmin.Atof(),
index cf9181a0cb8187459fe6ce4286434e7a683ac20d..f632936a8cff581230b042925b950a29897dea27 100644 (file)
@@ -28,6 +28,7 @@
 #include "AliMUONLocalTrigger.h"
 #include "AliMUONRawStreamTracker.h"
 #include "AliMUONRawStreamTrigger.h"
+#include "AliMUONRecoParam.h"
 #include "AliMUONRegHeader.h"
 #include "AliMUONTrackerCalibratedDataMaker.h"
 #include "AliMUONTriggerDisplay.h"
@@ -80,7 +81,7 @@ ClassImp(AliMUONQADataMakerRec)
 /// \endcond
            
 //____________________________________________________________________________ 
-AliMUONQADataMakerRec::AliMUONQADataMakerRec() : 
+AliMUONQADataMakerRec::AliMUONQADataMakerRec(const AliMUONRecoParam* recoParam) : 
 AliQADataMakerRec(AliQA::GetDetName(AliQA::kMUON), "MUON Quality Assurance Data Maker"),
 fIsInitRaws(kFALSE),
 fIsInitRecPointsTracker(kFALSE),
@@ -90,7 +91,8 @@ fDigitStore(0x0),
 fTriggerStore(0x0),
 fDigitMaker(0x0),
 fClusterStore(0x0),
-fTrackerDataMaker(0x0)
+fTrackerDataMaker(0x0),
+fRecoParam(recoParam)
 {
     /// ctor
        
@@ -409,7 +411,8 @@ void AliMUONQADataMakerRec::MakeRawsTracker(AliRawReader* rawReader)
     
 //    fTrackerDataMaker = new AliMUONTrackerRawDataMaker(rawReader,histogram,fastDecoder,takeRawReaderOwnership);
 
-               fTrackerDataMaker = new AliMUONTrackerCalibratedDataMaker(AliCDBManager::Instance()->GetRun(),
+               fTrackerDataMaker = new AliMUONTrackerCalibratedDataMaker(GetRecoParam(),
+                                                              AliCDBManager::Instance()->GetRun(),
                                                               rawReader,
                                                                                                                                                                                                                                                        AliCDBManager::Instance()->GetDefaultStorage()->GetURI(),
                                                                                                                                                                                                                                                        "NOGAIN",
index d8ef37ef95171fb7172c06e7bc6e778ba6d30d34..86ddcb6df1b11a969d6b8df49cfc54adff4c6167 100644 (file)
@@ -19,11 +19,12 @@ class AliMUONVClusterStore;
 #include "AliQADataMakerRec.h"
 
 class AliMUONVTrackerDataMaker;
+class AliMUONRecoParam;
 
 class AliMUONQADataMakerRec: public AliQADataMakerRec {
 
 public:
-  AliMUONQADataMakerRec();         
+  AliMUONQADataMakerRec(const AliMUONRecoParam* recoParam);         
   AliMUONQADataMakerRec(const AliMUONQADataMakerRec& qadm);   
   AliMUONQADataMakerRec& operator=(const AliMUONQADataMakerRec& qadm);
   virtual ~AliMUONQADataMakerRec();
@@ -92,6 +93,8 @@ private:
   void MakeRecPointsTracker(TTree* treeR);
   void MakeRecPointsTrigger(TTree* treeR);
        
+  const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
+  
   Bool_t  fIsInitRaws;       //!<  info if InitRaws() went ok
   Bool_t  fIsInitRecPointsTracker;  //!<  info if InitRecPoints() went ok
   Bool_t  fIsInitRecPointsTrigger;  //!<  info if InitRecPoints() went ok
@@ -104,6 +107,8 @@ private:
        
        AliMUONVTrackerDataMaker* fTrackerDataMaker; //!< tracker data accumulation
        
+  const AliMUONRecoParam* fRecoParam; //!< pointer to reco params
+  
   ClassDef(AliMUONQADataMakerRec,3)  // MUON Quality assurance data maker
 
 };
index 64394965c0b010a234139d3a0717a1adb458a4b2..a2bc41a88aba050ecaacf4dffe116d2611f18847 100644 (file)
@@ -39,7 +39,7 @@
 #include "AliMUONVClusterStore.h"
 #include "AliMUONConstants.h"
 #include "AliMUONESDInterface.h"
-
+#include "AliMUONRecoParam.h"
 #include "AliMCEventHandler.h"
 #include "AliMCEvent.h"
 #include "AliStack.h"
@@ -59,8 +59,9 @@ ClassImp(AliMUONRecoCheck)
 /// \endcond
 
 //_____________________________________________________________________________
-AliMUONRecoCheck::AliMUONRecoCheck(Char_t *esdFileName, Char_t *pathSim)
+AliMUONRecoCheck::AliMUONRecoCheck(AliMUONRecoParam* recoParam, Char_t *esdFileName, Char_t *pathSim)
 : TObject(),
+fRecoParam(recoParam),
 fMCEventHandler(new AliMCEventHandler()),
 fESDEvent(new AliESDEvent()),
 fESDTree (0x0),
@@ -190,7 +191,7 @@ void AliMUONRecoCheck::MakeReconstructedTracks()
   Int_t nTracks = (Int_t) fESDEvent->GetNumberOfMuonTracks();
   for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
     AliESDMuonTrack* esdTrack = fESDEvent->GetMuonTrack(iTrack);
-    if (esdTrack->ContainTrackerData()) AliMUONESDInterface::Add(*esdTrack, *fRecoTrackStore);
+    if (esdTrack->ContainTrackerData()) AliMUONESDInterface::Add(GetRecoParam(),*esdTrack, *fRecoTrackStore);
   }
   
 }
index 5600a2c99e54217b969543e7528fb0510c0df576..4e937c503b51cbb4e30c825e6aea44022a0c0f69 100644 (file)
@@ -18,11 +18,12 @@ class TTree;
 class AliESDEvent;
 class AliMCEventHandler;
 class AliMUONVTrackStore;
+class AliMUONRecoParam;
 
 class AliMUONRecoCheck : public TObject 
 {
 public:
-  AliMUONRecoCheck(Char_t *chLoader, Char_t *pathSim = "./");
+  AliMUONRecoCheck(AliMUONRecoParam* recoParam, Char_t *chLoader, Char_t *pathSim = "./");
   virtual ~AliMUONRecoCheck();
 
   /// Return the list of reconstructed tracks
@@ -49,6 +50,8 @@ private:
   /// Not implemented
   AliMUONRecoCheck& operator = (const AliMUONRecoCheck& rhs);
 
+  const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
+  
   void ResetStores();
   
   void MakeReconstructedTracks();
@@ -71,6 +74,8 @@ private:
   AliMUONVTrackStore* fRecoTrackRefStore; ///< current reconstructible tracks (owner)
   AliMUONVTrackStore* fRecoTrackStore;    ///< current reconstructed tracks (owner)
   
+  const AliMUONRecoParam* fRecoParam; ///< pointer to reco param
+  
   ClassDef(AliMUONRecoCheck, 0)   //Utility class to check reconstruction
 };
 
index a26a8f89bf528cfaae85a3a08852443f85e260c7..935c2f9e6fe0051a690672c9bae3623fbea38045 100644 (file)
@@ -289,9 +289,10 @@ AliMUONReconstructor::CreateTracker() const
 
   AliMUONTracker* tracker(0x0);
   
-  if ( ! AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco() )
+  if ( ! GetRecoParam()->CombineClusterTrackReco() )
   {
-    tracker = new AliMUONTracker(0x0,
+    tracker = new AliMUONTracker(GetRecoParam(),
+                                0x0,
                                  *DigitStore(),
                                  fDigitMaker,
                                  fTransformer,
@@ -299,7 +300,8 @@ AliMUONReconstructor::CreateTracker() const
   }
   else
   {
-    tracker = new AliMUONTracker(fClusterServer,
+    tracker = new AliMUONTracker(GetRecoParam(),
+                                fClusterServer,
                                  *DigitStore(),
                                  fDigitMaker,
                                  fTransformer,
@@ -487,7 +489,7 @@ AliMUONReconstructor::FillTreeR(AliMUONVTriggerStore* triggerStore,
   Bool_t ok(kFALSE);
   Bool_t alone(kTRUE); // is trigger the only info in TreeR ?
   
-  if ( ! AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco() )
+  if ( ! GetRecoParam()->CombineClusterTrackReco() )
   {
     alone = kFALSE; // we'll get both tracker and trigger information in TreeR
   }
@@ -519,10 +521,10 @@ AliMUONReconstructor::FillTreeR(AliMUONVTriggerStore* triggerStore,
     
     for ( Int_t i = 0; i < AliMpConstants::NofTrackingChambers(); ++i ) 
     {
-      if (AliMUONReconstructor::GetRecoParam()->UseChamber(i))
+      if (GetRecoParam()->UseChamber(i))
       {
-        if ( ( i == 6 || i == 7 )  && AliMUONReconstructor::GetRecoParam()->BypassSt4() ) continue;
-        if ( ( i == 8 || i == 9 )  && AliMUONReconstructor::GetRecoParam()->BypassSt5() ) continue;
+        if ( ( i == 6 || i == 7 )  && GetRecoParam()->BypassSt4() ) continue;
+        if ( ( i == 8 || i == 9 )  && GetRecoParam()->BypassSt5() ) continue;
         
         fClusterServer->Clusterize(i,*fClusterStore,area);
       }
index 81c2f145a44f60ab2222b865f8c1b2afc59d2adf..50c75befc538d4da36402c4b0873114385a9f032 100644 (file)
@@ -20,7 +20,6 @@ class AliMUONCalibrationData;
 class AliMUONDigitCalibrator;
 class AliMUONDigitMaker;
 class AliMUONGeometryTransformer;
-class AliMUONRecoParam;
 class AliMUONTracker;
 class AliMUONTriggerCircuit;
 class AliMUONVClusterFinder;
@@ -32,7 +31,6 @@ class AliMUONVTriggerStore;
 class AliMUONVTriggerStore;
 class TClonesArray;
 
-#include "AliDetectorRecoParam.h"
 #include "AliMUONRecoParam.h"
 
 class AliMUONReconstructor : public AliReconstructor
index 76fb3d8899c471b27b9362c7105324fc08b0adcb..75ec6eff6c700915f06bd15c6578cd979f75c448 100644 (file)
@@ -59,7 +59,7 @@ ClassImp(AliMUONRefitter)
 /// \endcond
 
 //_____________________________________________________________________________
-AliMUONRefitter::AliMUONRefitter()
+AliMUONRefitter::AliMUONRefitter(const AliMUONRecoParam* recoParam)
 : TObject(),
   fGeometryTransformer(0x0),
   fClusterServer(0x0),
@@ -69,7 +69,7 @@ AliMUONRefitter::AliMUONRefitter()
   /// Default constructor
   CreateGeometryTransformer();
   CreateClusterServer(*fGeometryTransformer);
-  if (fClusterServer) fTracker = AliMUONTracker::CreateTrackReconstructor(AliMUONReconstructor::GetRecoParam()->GetTrackingMode(),fClusterServer);
+  if (fClusterServer) fTracker = AliMUONTracker::CreateTrackReconstructor(recoParam,fClusterServer);
   if (!fClusterServer || !fTracker) {
     AliFatal("refitter initialization failed");
     exit(-1);
@@ -261,7 +261,7 @@ void AliMUONRefitter::CreateGeometryTransformer()
 void AliMUONRefitter::CreateClusterServer(AliMUONGeometryTransformer& transformer)
 {
   /// Create cluster server
-  AliMUONVClusterFinder* clusterFinder = AliMUONReconstructor::CreateClusterFinder(AliMUONReconstructor::GetRecoParam()->GetClusteringMode());
+  AliMUONVClusterFinder* clusterFinder = AliMUONReconstructor::CreateClusterFinder(GetRecoParam()->GetClusteringMode());
   fClusterServer = clusterFinder ? new AliMUONSimpleClusterServer(clusterFinder,transformer) : 0x0;
 }
 
index 7b043f47300d1535dd023f84356739a8278e99b9..eca74280f5d74e2eaf002816b9478179381bd909 100644 (file)
@@ -22,12 +22,13 @@ class AliMUONESDInterface;
 class AliMUONVClusterStore;
 class AliMUONVTrackStore;
 class AliMUONTrack;
+class AliMUONRecoParam;
 
 class AliMUONRefitter : public TObject
 {
 public:
   
-  AliMUONRefitter();
+  AliMUONRefitter(const AliMUONRecoParam* recoParam);
   virtual ~AliMUONRefitter();
   
   /// connect to the ESD interface containing MUON data to refit
@@ -61,6 +62,7 @@ private:
   
   void AddClusterToTracks(const AliMUONVClusterStore &localClusterStore, AliMUONVTrackStore &trackStore);
   
+  const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
   
 private:
     
@@ -69,6 +71,7 @@ private:
   AliMUONVTrackReconstructor* fTracker;             ///< tracker (owner)
   AliMUONESDInterface*        fESDInterface;        ///< container of MUON tracks/clusters/digits (not owner)
   
+  const AliMUONRecoParam* fRecoParam; ///< pointer to reco param
   
   ClassDef(AliMUONRefitter,0)
 };
index 139e479afe2a86be4e0d70a8b4441b2b155a3e68..7a6de3b8197efd21aa7e260ede63ec61e3bad0a8 100644 (file)
@@ -67,7 +67,7 @@ AliMUONTrack::AliMUONTrack()
 }
 
   //__________________________________________________________________________
-AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment)
+AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment, Double_t bendingVertexDispersion)
   : TObject(),
     fTrackParamAtCluster(new TClonesArray("AliMUONTrackParam",10)),
     fFitWithVertex(kFALSE),
@@ -142,10 +142,9 @@ AliMUONTrack::AliMUONTrack(AliMUONObjectPair *segment)
   paramCov(3,2) = paramCov(2,3);
   paramCov(3,3) = ( firstCluster->GetErrY2() + lastCluster->GetErrY2() ) / dZ / dZ;
   // Inverse bending momentum (vertex resolution + bending slope resolution + 10% error on dipole parameters+field)
-  paramCov(4,4) = ((AliMUONReconstructor::GetRecoParam()->GetBendingVertexDispersion() *
-                   AliMUONReconstructor::GetRecoParam()->GetBendingVertexDispersion() +
+  paramCov(4,4) = ( ( bendingVertexDispersion*bendingVertexDispersion +
                    (z1 * z1 * lastCluster->GetErrY2() + z2 * z2 * firstCluster->GetErrY2()) / dZ / dZ) /
-                  bendingImpact / bendingImpact + 0.1 * 0.1) * inverseBendingMomentum * inverseBendingMomentum;
+                  bendingImpact / bendingImpact + 0.1 * 0.1) * inverseBendingMomentum * inverseBendingMomentum ;
   paramCov(2,4) = - z2 * firstCluster->GetErrY2() * inverseBendingMomentum / bendingImpact / dZ;
   paramCov(4,2) = paramCov(2,4);
   paramCov(3,4) = - (z1 * lastCluster->GetErrY2() + z2 * firstCluster->GetErrY2()) * inverseBendingMomentum / bendingImpact / dZ / dZ;
@@ -451,37 +450,36 @@ void AliMUONTrack::UpdateCovTrackParamAtCluster()
 }
 
   //__________________________________________________________________________
-Bool_t AliMUONTrack::IsValid()
+Bool_t AliMUONTrack::IsValid(UInt_t requestedStationMask)
 {
   /// check the validity of the current track (at least one cluster per requested station)
   
   Int_t nClusters = GetNClusters();
   AliMUONTrackParam *trackParam;
-  Int_t currentStation = 0, expectedStation = 0;
+  Int_t currentStation(0);
   
-  for (Int_t i = 0; i < nClusters; i++) {
+  UInt_t m(0);
+  
+  for (Int_t i = 0; i < nClusters; i++) 
+  {
     trackParam = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(i);
     
     // skip unrequested stations
-    while (expectedStation < AliMUONConstants::NTrackingSt() &&
-          !AliMUONReconstructor::GetRecoParam()->RequestStation(expectedStation)) expectedStation++;
-    
+//    while (expectedStation < AliMUONConstants::NTrackingSt() &&
+//        !AliMUONReconstructor::GetRecoParam()->RequestStation(expectedStation)) expectedStation++;
+//    
+
     currentStation = trackParam->GetClusterPtr()->GetChamberId()/2;
     
-    // missing station
-    if (currentStation > expectedStation) return kFALSE;
-    
-    // found station --> look for next one
-    if (currentStation == expectedStation) expectedStation++;
+    m |= ( 1 << currentStation );
     
   }
   
-  return expectedStation == AliMUONConstants::NTrackingSt();
-  
+  return ( (requestedStationMask & m) == requestedStationMask ) ;
 }
 
   //__________________________________________________________________________
-void AliMUONTrack::TagRemovableClusters() {
+void AliMUONTrack::TagRemovableClusters(UInt_t requestedStationMask) {
   /// Identify clusters that can be removed from the track,
   /// with the only requirement to have at least 1 cluster per requested station
   
@@ -492,7 +490,9 @@ void AliMUONTrack::TagRemovableClusters() {
   // reset flags to kFALSE for all clusters in required station
   for (Int_t i = 0; i < nClusters; i++) {
     trackParam = (AliMUONTrackParam*) fTrackParamAtCluster->UncheckedAt(i);
-    if (AliMUONReconstructor::GetRecoParam()->RequestStation(trackParam->GetClusterPtr()->GetChamberId()/2))
+    Int_t stationId = ( 1 << (trackParam->GetClusterPtr()->GetChamberId()/2) );
+    UInt_t m = ( 1 << stationId );
+    if ( m & requestedStationMask )
       trackParam->SetRemovable(kFALSE);
     else trackParam->SetRemovable(kTRUE);
   }
index 87e8db3eeb9f1126b792cc2984f7c2e88eab6d18..fd759894f19ec51abb3ad6dcfe341f45099cb28d 100644 (file)
@@ -24,7 +24,7 @@ class AliMUONTrack : public TObject
 {
  public:
   AliMUONTrack(); // Default constructor
-  AliMUONTrack(AliMUONObjectPair *segment); // Constructor from a segment
+  AliMUONTrack(AliMUONObjectPair *segment, Double_t bendingVertexDispersion); // Constructor from a segment
   virtual ~AliMUONTrack(); // Destructor
   AliMUONTrack (const AliMUONTrack& track); // copy constructor
   AliMUONTrack& operator=(const AliMUONTrack& track); // assignment operator
@@ -37,9 +37,9 @@ class AliMUONTrack : public TObject
   void          UpdateTrackParamAtCluster();
   void          UpdateCovTrackParamAtCluster();
   
-  Bool_t IsValid();
+  Bool_t IsValid(UInt_t requestedStationMask);
   
-  void TagRemovableClusters();
+  void TagRemovableClusters(UInt_t requestedStationMask);
   
   /// return the number of clusters attached to the track
   Int_t GetNClusters() const {return fTrackParamAtCluster ? fTrackParamAtCluster->GetEntriesFast() : 0;}
index 142629df7575f3fa714a244a6189b964ff9aaba2..6a2277007605ab82dc1b7ef3dca77018790670fb 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"
@@ -85,14 +86,16 @@ 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(),
+fRecoParam(recoParam),
+fTransformer(transformer),
+fDigitMaker(digitMaker),
+fDeltaZ(0.0),
+fTrigCovariance(0x0),
+fkMaxDistance(99999.)
 {
     /// Default constructor
     InitMembers();
@@ -259,10 +262,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)
        {
@@ -504,7 +507,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();
     
@@ -629,9 +632,9 @@ Float_t AliMUONTrackHitPattern::PadMatchTrack(Float_t xPad, Float_t yPad,
     /// Decides if the digit belongs to the trigger track.
     //
 
-  Float_t maxDist = AliMUONReconstructor::GetRecoParam()->GetStripCutForTrigger() * 2. * TMath::Min(dpx,dpy); // cm
+  Float_t maxDist = GetRecoParam()->GetStripCutForTrigger() * 2. * TMath::Min(dpx,dpy); // cm
   if(maxDist<2.) maxDist = 2.;
-  Float_t maxDistCheckArea = AliMUONReconstructor::GetRecoParam()->GetMaxStripAreaForTrigger() * 2. *  TMath::Min(dpx,dpy); // cm
+  Float_t maxDistCheckArea = GetRecoParam()->GetMaxStripAreaForTrigger() * 2. *  TMath::Min(dpx,dpy); // cm
 
     Float_t matchDist = fkMaxDistance;
 
index d20120400805397e2f7fb3cd8351ffb39f2b0cb2..febe7982d8673aa9ae5d7271e49375bdd2da91dc 100644 (file)
@@ -25,12 +25,14 @@ class AliMUONGeometryTransformer;
 class AliMUONVDigitStore;
 class AliMUONTriggerTrack;
 class AliMUONTrack;
+class AliMUONRecoParam;
 
 class AliMUONTrackHitPattern : public TObject 
 {
 public:
 
-  AliMUONTrackHitPattern(const AliMUONGeometryTransformer& transformer,
+  AliMUONTrackHitPattern(const AliMUONRecoParam* recoParam,
+                         const AliMUONGeometryTransformer& transformer,
                          const AliMUONDigitMaker& digitMaker);
   virtual ~AliMUONTrackHitPattern(); // Destructor
 
@@ -86,6 +88,8 @@ protected:
   void LocalBoardFromPos(Float_t x, Float_t y, Int_t detElemId,
                         Int_t cathode, Int_t localBoard[4]) const;
 
+  const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
+  
 private:
   /// Not implemented
   AliMUONTrackHitPattern(const AliMUONTrackHitPattern& rhs);
@@ -114,6 +118,8 @@ private:
     kBoardEff
   };
 
+  const AliMUONRecoParam* fRecoParam; //!< pointer to reco parameters
+  
   ClassDef(AliMUONTrackHitPattern, 0) // MUON track hit pattern
 };
 
index 5b340b2d1b706b808798eb58d8acf84b5ff1d25b..3e9ba9ba690e4a2fe30c5fbf251e825e89465247 100644 (file)
@@ -53,8 +53,8 @@ ClassImp(AliMUONTrackReconstructor) // Class implementation in ROOT context
 /// \endcond
 
   //__________________________________________________________________________
-AliMUONTrackReconstructor::AliMUONTrackReconstructor(AliMUONVClusterServer* clusterServer)
-  : AliMUONVTrackReconstructor(clusterServer)
+AliMUONTrackReconstructor::AliMUONTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer)
+  : AliMUONVTrackReconstructor(recoParam,clusterServer)
 {
   /// Constructor
 }
@@ -84,7 +84,7 @@ void AliMUONTrackReconstructor::MakeTrackCandidates(AliMUONVClusterStore& cluste
   Int_t firstChamber(0);
   Int_t lastChamber(9);
   
-  if (AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco()) {
+  if (GetRecoParam()->CombineClusterTrackReco()) {
     // ... Here's the exception : ask the clustering to reconstruct
     // clusters *only* in station 4 and 5 for combined tracking
     firstChamber = 6;
@@ -92,7 +92,7 @@ void AliMUONTrackReconstructor::MakeTrackCandidates(AliMUONVClusterStore& cluste
 
   for (Int_t i = firstChamber; i <= lastChamber; ++i ) 
   {
-    if (fClusterServer && AliMUONReconstructor::GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea());
+    if (fClusterServer && GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea());
   }
   
   // Loop over stations(1..) 5 and 4 and make track candidates
@@ -107,16 +107,16 @@ void AliMUONTrackReconstructor::MakeTrackCandidates(AliMUONVClusterStore& cluste
       AliDebug(1,Form("Making primary candidate(1..) %d",++iCandidate));
       
       // Transform segments to tracks and put them at the end of fRecTracksPtr
-      track = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]));
+      track = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]),GetRecoParam()->GetBendingVertexDispersion());
       fNRecTracks++;
       
       // Look for compatible cluster(s) in the other station
-      if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast())
+      if (GetRecoParam()->MakeTrackCandidatesFast())
        clusterFound = FollowLinearTrackInStation(*track, clusterStore, 7-istat);
       else clusterFound = FollowTrackInStation(*track, clusterStore, 7-istat);
       
       // Remove track if no cluster found
-      if (!clusterFound && AliMUONReconstructor::GetRecoParam()->RequestStation(7-istat)) {
+      if (!clusterFound && GetRecoParam()->RequestStation(7-istat)) {
         fRecTracksPtr->Remove(track);
        fNRecTracks--;
       }
@@ -130,7 +130,7 @@ void AliMUONTrackReconstructor::MakeTrackCandidates(AliMUONVClusterStore& cluste
   fRecTracksPtr->Compress(); // this is essential before checking tracks
   
   // Keep all different tracks or only the best ones as required
-  if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
+  if (GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
   else RemoveDoubleTracks();
   
   AliDebug(1,Form("Number of good candidates = %d",fNRecTracks));
@@ -167,16 +167,16 @@ void AliMUONTrackReconstructor::MakeMoreTrackCandidates(AliMUONVClusterStore& cl
        
        // Transform segments to tracks and put them at the end of fRecTracksPtr
        iCurrentTrack = fRecTracksPtr->GetLast()+1;
-       track = new ((*fRecTracksPtr)[iCurrentTrack]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]));
+       track = new ((*fRecTracksPtr)[iCurrentTrack]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]),GetRecoParam()->GetBendingVertexDispersion());
        fNRecTracks++;
        
        // Look for compatible cluster(s) in the second chamber of station 5
-       if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast())
+       if (GetRecoParam()->MakeTrackCandidatesFast())
          clusterFound = FollowLinearTrackInChamber(*track, clusterStore, 17-ich2);
        else clusterFound = FollowTrackInChamber(*track, clusterStore, 17-ich2);
        
        // skip the original track in case it has been removed
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks() && clusterFound) iCurrentTrack++;
+       if (GetRecoParam()->TrackAllTracks() && clusterFound) iCurrentTrack++;
        
        // loop over every new tracks
        nCurrentTracks = fRecTracksPtr->GetLast()+1;
@@ -184,7 +184,7 @@ void AliMUONTrackReconstructor::MakeMoreTrackCandidates(AliMUONVClusterStore& cl
          track = (AliMUONTrack*) fRecTracksPtr->UncheckedAt(iCurrentTrack);
          
          // Look for compatible cluster(s) in the second chamber of station 4
-         if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast())
+         if (GetRecoParam()->MakeTrackCandidatesFast())
            FollowLinearTrackInChamber(*track, clusterStore, 13-ich1);
          else FollowTrackInChamber(*track, clusterStore, 13-ich1);
          
@@ -201,7 +201,7 @@ void AliMUONTrackReconstructor::MakeMoreTrackCandidates(AliMUONVClusterStore& cl
   fRecTracksPtr->Compress(); // this is essential before checking tracks
   
   // Keep all different tracks or only the best ones as required
-  if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
+  if (GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
   else RemoveDoubleTracks();
   
   AliDebug(1,Form("Number of good candidates = %d",fNRecTracks));
@@ -218,8 +218,8 @@ void AliMUONTrackReconstructor::FollowTracks(AliMUONVClusterStore& clusterStore)
   AliMUONTrackParam *trackParam, *nextTrackParam;
   Int_t currentNRecTracks;
   
-  Double_t sigmaCut2 = AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                       AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking();
+  Double_t sigmaCut2 = GetRecoParam()->GetSigmaCutForTracking() *
+                       GetRecoParam()->GetSigmaCutForTracking();
   
   for (Int_t station = 2; station >= 0; station--) {
     
@@ -244,8 +244,8 @@ void AliMUONTrackReconstructor::FollowTracks(AliMUONVClusterStore& clusterStore)
       // remove track with absolute bending momentum out of limits
       // or if the normalized chi2 is too high
       Double_t bendingMomentum = TMath::Abs(1. / ((AliMUONTrackParam*)track->GetTrackParamAtCluster()->First())->GetInverseBendingMomentum());
-      if (bendingMomentum < AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum() ||
-         bendingMomentum > AliMUONReconstructor::GetRecoParam()->GetMaxBendingMomentum() ||
+      if (bendingMomentum < GetRecoParam()->GetMinBendingMomentum() ||
+         bendingMomentum > GetRecoParam()->GetMaxBendingMomentum() ||
          track->GetNormalizedChi2() > sigmaCut2) {
        fRecTracksPtr->Remove(track);
        fNRecTracks--;
@@ -253,7 +253,7 @@ void AliMUONTrackReconstructor::FollowTracks(AliMUONVClusterStore& clusterStore)
       }
       
       // save parameters from fit into smoothed parameters to complete track afterward
-      if (AliMUONReconstructor::GetRecoParam()->ComplementTracks()) {
+      if (GetRecoParam()->ComplementTracks()) {
        
        if (station==2) { // save track parameters on stations 4 and 5
          
@@ -305,11 +305,11 @@ void AliMUONTrackReconstructor::FollowTracks(AliMUONVClusterStore& clusterStore)
       if (!FollowTrackInStation(*track, clusterStore, station)) {
        
        // Try to recover track if required
-       if (AliMUONReconstructor::GetRecoParam()->RecoverTracks()) {
+       if (GetRecoParam()->RecoverTracks()) {
          
          // work on a copy of the track if this station is not required
          // to keep the case where no cluster is reconstructed as a possible candidate
-         if (!AliMUONReconstructor::GetRecoParam()->RequestStation(station)) {
+         if (!GetRecoParam()->RequestStation(station)) {
            track = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(*track);
            fNRecTracks++;
          }
@@ -321,7 +321,7 @@ void AliMUONTrackReconstructor::FollowTracks(AliMUONVClusterStore& clusterStore)
            fNRecTracks--;
          }
          
-       } else if (AliMUONReconstructor::GetRecoParam()->RequestStation(station)) {
+       } else if (GetRecoParam()->RequestStation(station)) {
          // remove track if no cluster found
          fRecTracksPtr->Remove(track);
          fNRecTracks--;
@@ -335,7 +335,7 @@ void AliMUONTrackReconstructor::FollowTracks(AliMUONVClusterStore& clusterStore)
     fRecTracksPtr->Compress();
     
     // Keep only the best tracks if required
-    if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) RemoveDoubleTracks();
+    if (!GetRecoParam()->TrackAllTracks()) RemoveDoubleTracks();
     
   }
   
@@ -365,7 +365,7 @@ void AliMUONTrackReconstructor::FollowTracks(AliMUONVClusterStore& clusterStore)
     }
     
     // save parameters from fit into smoothed parameters to complete track afterward
-    if (AliMUONReconstructor::GetRecoParam()->ComplementTracks()) {
+    if (GetRecoParam()->ComplementTracks()) {
       
       trackParam = (AliMUONTrackParam*) track->GetTrackParamAtCluster()->First();
       if (trackParam->GetClusterPtr()->GetChamberId() < 2) {
@@ -416,8 +416,8 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInChamber(AliMUONTrack &trackCandid
   AliDebug(1,Form("Enter FollowTrackInChamber(1..) %d", nextChamber+1));
   
   Double_t chi2WithOneCluster = 1.e10;
-  Double_t maxChi2WithOneCluster = 2. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                       AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
+  Double_t maxChi2WithOneCluster = 2. * GetRecoParam()->GetSigmaCutForTracking() *
+                                       GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
   Double_t bestChi2WithOneCluster = maxChi2WithOneCluster;
   Bool_t foundOneCluster = kFALSE;
   AliMUONTrack *newTrack = 0x0;
@@ -468,7 +468,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInChamber(AliMUONTrack &trackCandid
   
   // Ask the clustering to reconstruct new clusters around the track position in the current chamber
   // except for station 4 and 5 that are already entirely clusterized
-  if (AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco()) {
+  if (GetRecoParam()->CombineClusterTrackReco()) {
     if (nextChamber < 6) AskForNewClustersInChamber(extrapTrackParamAtCh, clusterStore, nextChamber);
   }
   
@@ -495,7 +495,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInChamber(AliMUONTrack &trackCandid
        cluster->Print();
       }
       
-      if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+      if (GetRecoParam()->TrackAllTracks()) {
        // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
        newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
        UpdateTrack(*newTrack,extrapTrackParamAtCluster);
@@ -518,7 +518,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInChamber(AliMUONTrack &trackCandid
   }
   
   // fill out the best track if required else clean up the fRecTracksPtr array
-  if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+  if (!GetRecoParam()->TrackAllTracks()) {
     if (foundOneCluster) {
       UpdateTrack(trackCandidate,bestTrackParamAtCluster);
       
@@ -567,10 +567,10 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
   
   Double_t chi2WithOneCluster = 1.e10;
   Double_t chi2WithTwoClusters = 1.e10;
-  Double_t maxChi2WithOneCluster = 2. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                       AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
-  Double_t maxChi2WithTwoClusters = 4. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                        AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 4 because 4 quantities in chi2
+  Double_t maxChi2WithOneCluster = 2. * GetRecoParam()->GetSigmaCutForTracking() *
+                                       GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
+  Double_t maxChi2WithTwoClusters = 4. * GetRecoParam()->GetSigmaCutForTracking() *
+                                        GetRecoParam()->GetSigmaCutForTracking(); // 4 because 4 quantities in chi2
   Double_t bestChi2WithOneCluster = maxChi2WithOneCluster;
   Double_t bestChi2WithTwoClusters = maxChi2WithTwoClusters;
   Bool_t foundOneCluster = kFALSE;
@@ -630,7 +630,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
   
   // Ask the clustering to reconstruct new clusters around the track position in the current station
   // except for station 4 and 5 that are already entirely clusterized
-  if (AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco()) {
+  if (GetRecoParam()->CombineClusterTrackReco()) {
     if (nextStation < 3) AskForNewClustersInStation(extrapTrackParamAtCh, clusterStore, nextStation);
   }
   
@@ -694,7 +694,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
            clusterCh1->Print();
          }
          
-         if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+         if (GetRecoParam()->TrackAllTracks()) {
            // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new clusters
             newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
            UpdateTrack(*newTrack,extrapTrackParamAtCluster1,extrapTrackParamAtCluster2);
@@ -724,7 +724,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
       if (!foundSecondCluster) {
         foundOneCluster = kTRUE;
         
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+       if (GetRecoParam()->TrackAllTracks()) {
          // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
           newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
          UpdateTrack(*newTrack,extrapTrackParamAtCluster2);
@@ -750,7 +750,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
   
   // look for candidates in chamber 1 not already attached to a track
   // if we want to keep all possible tracks or if no good couple of clusters has been found
-  if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
+  if (GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
     
     // add MCS effect for next step
     AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),1.);
@@ -798,7 +798,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
          clusterCh1->Print();
        }
        
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+       if (GetRecoParam()->TrackAllTracks()) {
          // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
          newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
          UpdateTrack(*newTrack,extrapTrackParamAtCluster1);
@@ -823,7 +823,7 @@ Bool_t AliMUONTrackReconstructor::FollowTrackInStation(AliMUONTrack &trackCandid
   }
   
   // fill out the best track if required else clean up the fRecTracksPtr array
-  if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+  if (!GetRecoParam()->TrackAllTracks()) {
     if (foundTwoClusters) {
       UpdateTrack(trackCandidate,bestTrackParamAtCluster1,bestTrackParamAtCluster2);
       
@@ -981,7 +981,7 @@ void AliMUONTrackReconstructor::UpdateTrack(AliMUONTrack &track, AliMUONTrackPar
                       deltaY*deltaY / cluster->GetErrY2();
   
   // Flag cluster as being not removable
-  if (AliMUONReconstructor::GetRecoParam()->RequestStation(cluster->GetChamberId()/2))
+  if (GetRecoParam()->RequestStation(cluster->GetChamberId()/2))
     trackParamAtCluster.SetRemovable(kFALSE);
   else trackParamAtCluster.SetRemovable(kTRUE);
   trackParamAtCluster.SetLocalChi2(0.); // --> Local chi2 not used
@@ -1056,7 +1056,7 @@ Bool_t AliMUONTrackReconstructor::RecoverTrack(AliMUONTrack &trackCandidate, Ali
     if (!trackParamAtCluster->IsRemovable()) return kFALSE;
     
     // reset the current cluster as beig not removable if it is on a required station
-    if (AliMUONReconstructor::GetRecoParam()->RequestStation(nextStation+1)) trackParamAtCluster->SetRemovable(kFALSE);
+    if (GetRecoParam()->RequestStation(nextStation+1)) trackParamAtCluster->SetRemovable(kFALSE);
     
     // Pick up cluster with the worst chi2
     localChi2 = trackParamAtCluster->GetLocalChi2();
@@ -1092,10 +1092,10 @@ void AliMUONTrackReconstructor::SetVertexErrXY2ForFit(AliMUONTrack &trackCandida
   /// the "trackCandidate" to do not influence the result by changing track resolution at vertex
   AliDebug(1,"Enter SetVertexForFit");
   
-  Double_t nonBendingReso2 = AliMUONReconstructor::GetRecoParam()->GetNonBendingVertexDispersion() *
-                             AliMUONReconstructor::GetRecoParam()->GetNonBendingVertexDispersion();
-  Double_t bendingReso2 = AliMUONReconstructor::GetRecoParam()->GetBendingVertexDispersion() *
-                         AliMUONReconstructor::GetRecoParam()->GetBendingVertexDispersion();
+  Double_t nonBendingReso2 = GetRecoParam()->GetNonBendingVertexDispersion() *
+                             GetRecoParam()->GetNonBendingVertexDispersion();
+  Double_t bendingReso2 = GetRecoParam()->GetBendingVertexDispersion() *
+                         GetRecoParam()->GetBendingVertexDispersion();
   
   // add multiple scattering effets
   AliMUONTrackParam paramAtVertex(*((AliMUONTrackParam*)(trackCandidate.GetTrackParamAtCluster()->First())));
@@ -1165,7 +1165,7 @@ void AliMUONTrackReconstructor::Fit(AliMUONTrack &track, Bool_t includeMCS, Bool
   // Set fitted parameters (!! The order is very important for the covariance matrix !!)
   // Mandatory limits to avoid NaN values of parameters
   trackParam = (AliMUONTrackParam*) (track.GetTrackParamAtCluster()->First());
-  Double_t maxIBM = 1. / AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum();
+  Double_t maxIBM = 1. / GetRecoParam()->GetMinBendingMomentum();
   gMinuit->mnparm(0, "X", trackParam->GetNonBendingCoor(), 0.03, -500.0, 500.0, status);
   gMinuit->mnparm(1, "NonBenS", trackParam->GetNonBendingSlope(), 0.001, -1., 1., status);
   gMinuit->mnparm(2, "Y", trackParam->GetBendingCoor(), 0.10, -500.0, 500.0, status);
@@ -1257,8 +1257,8 @@ void AliMUONTrackReconstructor::ComplementTracks(const AliMUONVClusterStore& clu
   
   Int_t chamberId, detElemId;
   Double_t chi2OfCluster, bestChi2OfCluster;
-  Double_t sigmaCut2 = AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                       AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking();
+  Double_t sigmaCut2 = GetRecoParam()->GetSigmaCutForTracking() *
+                       GetRecoParam()->GetSigmaCutForTracking();
   Bool_t foundOneCluster, trackModified;
   AliMUONVCluster* cluster;
   AliMUONTrackParam *trackParam, *nextTrackParam, copyOfTrackParam, trackParamAtCluster, bestTrackParamAtCluster;
@@ -1344,13 +1344,13 @@ void AliMUONTrackReconstructor::ImproveTrack(AliMUONTrack &track)
   
   Double_t localChi2, worstLocalChi2;
   AliMUONTrackParam *trackParamAtCluster, *worstTrackParamAtCluster;
-  Double_t sigmaCut2 = AliMUONReconstructor::GetRecoParam()->GetSigmaCutForImprovement() *
-                      AliMUONReconstructor::GetRecoParam()->GetSigmaCutForImprovement();
+  Double_t sigmaCut2 = GetRecoParam()->GetSigmaCutForImprovement() *
+                      GetRecoParam()->GetSigmaCutForImprovement();
   
   while (!track.IsImproved()) {
     
     // identify removable clusters
-    track.TagRemovableClusters();
+    track.TagRemovableClusters(GetRecoParam()->RequestedStationMask());
     
     // Update track parameters and covariances
     track.UpdateCovTrackParamAtCluster();
@@ -1421,7 +1421,7 @@ Bool_t AliMUONTrackReconstructor::RefitTrack(AliMUONTrack &track, Bool_t enableI
   /// re-fit the given track
   
   // check validity of the track
-  if (!track.IsValid()) {
+  if (!track.IsValid(GetRecoParam()->RequestedStationMask())) {
     AliWarning("the track does not contain enough clusters --> unable to refit");
     return kFALSE;
   }
@@ -1444,7 +1444,7 @@ Bool_t AliMUONTrackReconstructor::RefitTrack(AliMUONTrack &track, Bool_t enableI
   
   // Improve the reconstructed tracks if required
   track.SetImproved(kFALSE);
-  if (enableImprovement && AliMUONReconstructor::GetRecoParam()->ImproveTracks()) ImproveTrack(track);
+  if (enableImprovement && GetRecoParam()->ImproveTracks()) ImproveTrack(track);
   
   // Fill AliMUONTrack data members
   FinalizeTrack(track);
index 35a7d9a15e2b3fec88ce463d9892d5679e6ebe6e..5563fa5769829803d545c910c2be420ba3fcb1e8 100644 (file)
@@ -21,7 +21,7 @@ class AliMUONTrackReconstructor : public AliMUONVTrackReconstructor
  
  public:
   
-  AliMUONTrackReconstructor(AliMUONVClusterServer* clusterServer); // default Constructor
+  AliMUONTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer); // default Constructor
   virtual ~AliMUONTrackReconstructor(); // Destructor
 
   virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement = kTRUE);
index a23a346318954a904651486dd25a321c659c84c1..1e83ef4571e2d53006c0ed8ba172dee2df3e6e2f 100644 (file)
@@ -51,8 +51,8 @@ ClassImp(AliMUONTrackReconstructorK) // Class implementation in ROOT context
 /// \endcond
 
   //__________________________________________________________________________
-AliMUONTrackReconstructorK::AliMUONTrackReconstructorK(AliMUONVClusterServer* clusterServer)
-  : AliMUONVTrackReconstructor(clusterServer)
+AliMUONTrackReconstructorK::AliMUONTrackReconstructorK(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer)
+  : AliMUONVTrackReconstructor(recoParam, clusterServer)
 {
   /// Constructor
 }
@@ -82,7 +82,7 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust
   Int_t firstChamber(0);
   Int_t lastChamber(9);
   
-  if (AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco()) {
+  if (GetRecoParam()->CombineClusterTrackReco()) {
     // ... Here's the exception : ask the clustering to reconstruct
     // clusters *only* in station 4 and 5 for combined tracking
     firstChamber = 6;
@@ -90,7 +90,7 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust
   
   for (Int_t i = firstChamber; i <= lastChamber; ++i ) 
   {
-    if (fClusterServer && AliMUONReconstructor::GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea());
+    if (fClusterServer && GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea());
   }
   
   // Loop over stations(1..) 5 and 4 and make track candidates
@@ -104,11 +104,11 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust
       AliDebug(1,Form("Making primary candidate(1..) %d",++iCandidate));
       
       // Transform segments to tracks and put them at the end of fRecTracksPtr
-      track = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]));
+      track = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]),GetRecoParam()->GetBendingVertexDispersion());
       fNRecTracks++;
       
       // Look for compatible cluster(s) in the other station
-      if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast())
+      if (GetRecoParam()->MakeTrackCandidatesFast())
        clusterFound = FollowLinearTrackInStation(*track, clusterStore, 7-istat);
       else {
         // First recompute track parameters and covariances on station(1..) 5 using Kalman filter
@@ -119,10 +119,10 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust
       
       // Remove track if no cluster found on a requested station
       if (!clusterFound) {
-       if (AliMUONReconstructor::GetRecoParam()->RequestStation(7-istat)) {
+       if (GetRecoParam()->RequestStation(7-istat)) {
           fRecTracksPtr->Remove(track);
          fNRecTracks--;
-       } else if (istat == 3 && !AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast()) {
+       } else if (istat == 3 && !GetRecoParam()->MakeTrackCandidatesFast()) {
          // update track parameters and covariances using Kalman filter
          RetraceTrack(*track, kTRUE);
        }
@@ -135,7 +135,7 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust
   
   
   // Retrace tracks using Kalman filter and remove bad ones
-  if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast()) {
+  if (GetRecoParam()->MakeTrackCandidatesFast()) {
     fRecTracksPtr->Compress(); // this is essential before checking tracks
     
     Int_t currentNRecTracks = fNRecTracks;
@@ -146,8 +146,8 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust
       RetraceTrack(*track,kTRUE);
       
       // Remove the track if the normalized chi2 is too high
-      if (track->GetNormalizedChi2() > AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                      AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking()) {
+      if (track->GetNormalizedChi2() > GetRecoParam()->GetSigmaCutForTracking() *
+                                      GetRecoParam()->GetSigmaCutForTracking()) {
         fRecTracksPtr->Remove(track);
         fNRecTracks--;
       }
@@ -159,7 +159,7 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust
   fRecTracksPtr->Compress(); // this is essential before checking tracks
   
   // Keep all different tracks or only the best ones as required
-  if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
+  if (GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
   else RemoveDoubleTracks();
   
   AliDebug(1,Form("Number of good candidates = %d",fNRecTracks));
@@ -196,16 +196,16 @@ void AliMUONTrackReconstructorK::MakeMoreTrackCandidates(AliMUONVClusterStore& c
        
        // Transform segments to tracks and put them at the end of fRecTracksPtr
        iCurrentTrack = fRecTracksPtr->GetLast()+1;
-       track = new ((*fRecTracksPtr)[iCurrentTrack]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]));
+       track = new ((*fRecTracksPtr)[iCurrentTrack]) AliMUONTrack((AliMUONObjectPair*)((*segments)[iseg]),GetRecoParam()->GetBendingVertexDispersion());
        fNRecTracks++;
        
        // Look for compatible cluster(s) in the second chamber of station 5
-       if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast())
+       if (GetRecoParam()->MakeTrackCandidatesFast())
          clusterFound = FollowLinearTrackInChamber(*track, clusterStore, 17-ich2);
        else clusterFound = FollowTrackInChamber(*track, clusterStore, 17-ich2);
        
        // skip the original track in case it has been removed
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks() && clusterFound) iCurrentTrack++;
+       if (GetRecoParam()->TrackAllTracks() && clusterFound) iCurrentTrack++;
        
        // loop over every new tracks
        nCurrentTracks = fRecTracksPtr->GetLast()+1;
@@ -213,7 +213,7 @@ void AliMUONTrackReconstructorK::MakeMoreTrackCandidates(AliMUONVClusterStore& c
          track = (AliMUONTrack*) fRecTracksPtr->UncheckedAt(iCurrentTrack);
          
          // Look for compatible cluster(s) in the second chamber of station 4
-         if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast())
+         if (GetRecoParam()->MakeTrackCandidatesFast())
            FollowLinearTrackInChamber(*track, clusterStore, 13-ich1);
          else FollowTrackInChamber(*track, clusterStore, 13-ich1);
          
@@ -238,9 +238,9 @@ void AliMUONTrackReconstructorK::MakeMoreTrackCandidates(AliMUONVClusterStore& c
     
     // Remove the track if the normalized chi2 is too high
     // (only if the tracking has been done without magnetic field)
-    if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast() &&
-       track->GetNormalizedChi2() > AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                    AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking()) {
+    if (GetRecoParam()->MakeTrackCandidatesFast() &&
+       track->GetNormalizedChi2() > GetRecoParam()->GetSigmaCutForTracking() *
+                                    GetRecoParam()->GetSigmaCutForTracking()) {
       fRecTracksPtr->Remove(track);
       fNRecTracks--;
     }
@@ -248,10 +248,10 @@ void AliMUONTrackReconstructorK::MakeMoreTrackCandidates(AliMUONVClusterStore& c
   }
   
   // this is essential before checking tracks
-  if (AliMUONReconstructor::GetRecoParam()->MakeTrackCandidatesFast()) fRecTracksPtr->Compress();
+  if (GetRecoParam()->MakeTrackCandidatesFast()) fRecTracksPtr->Compress();
   
   // Keep all different tracks or only the best ones as required
-  if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
+  if (GetRecoParam()->TrackAllTracks()) RemoveIdenticalTracks();
   else RemoveDoubleTracks();
   
   AliDebug(1,Form("Number of good candidates = %d",fNRecTracks));
@@ -308,8 +308,8 @@ void AliMUONTrackReconstructorK::RetraceTrack(AliMUONTrack &trackCandidate, Bool
     lastParamCov(2,2) = cluster2->GetErrY2();
     lastParamCov(3,3) = 100. * ( cluster1->GetErrY2() + cluster2->GetErrY2() ) / dZ / dZ;
     // Inverse bending momentum (vertex resolution + bending slope resolution + 10% error on dipole parameters+field)
-    lastParamCov(4,4) = ((AliMUONReconstructor::GetRecoParam()->GetBendingVertexDispersion() *
-                         AliMUONReconstructor::GetRecoParam()->GetBendingVertexDispersion() +
+    lastParamCov(4,4) = ((GetRecoParam()->GetBendingVertexDispersion() *
+                         GetRecoParam()->GetBendingVertexDispersion() +
                          (z1 * z1 * cluster2->GetErrY2() + z2 * z2 * cluster1->GetErrY2()) / dZ / dZ) /
                         bendingImpact / bendingImpact + 0.1 * 0.1) * inverseBendingMomentum * inverseBendingMomentum;
     lastTrackParam->SetCovariances(lastParamCov);
@@ -354,14 +354,14 @@ void AliMUONTrackReconstructorK::RetracePartialTrack(AliMUONTrack &trackCandidat
     AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(),1.);
     
     // reset propagator for smoother
-    if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) trackParamAtCluster->ResetPropagator();
+    if (GetRecoParam()->UseSmoother()) trackParamAtCluster->ResetPropagator();
     
     // add MCS in missing chambers if any
     currentChamber = trackParamAtCluster->GetClusterPtr()->GetChamberId();
     while (currentChamber < expectedChamber) {
       // extrapolation to the missing chamber (update the propagator)
       AliMUONTrackExtrap::ExtrapToZCov(trackParamAtCluster, AliMUONConstants::DefaultChamberZ(expectedChamber),
-                                      AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                      GetRecoParam()->UseSmoother());
       // add MCS effect
       AliMUONTrackExtrap::AddMCSEffect(trackParamAtCluster,AliMUONConstants::ChamberThicknessInX0(),1.);
       expectedChamber--;
@@ -369,9 +369,9 @@ void AliMUONTrackReconstructorK::RetracePartialTrack(AliMUONTrack &trackCandidat
     
     // extrapolation to the plane of the cluster attached to the current trackParamAtCluster (update the propagator)
     AliMUONTrackExtrap::ExtrapToZCov(trackParamAtCluster, trackParamAtCluster->GetClusterPtr()->GetZ(),
-                                    AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                    GetRecoParam()->UseSmoother());
     
-    if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) {
+    if (GetRecoParam()->UseSmoother()) {
       // save extrapolated parameters for smoother
       trackParamAtCluster->SetExtrapParameters(trackParamAtCluster->GetParameters());
       
@@ -424,11 +424,11 @@ void AliMUONTrackReconstructorK::FollowTracks(AliMUONVClusterStore& clusterStore
       if (!FollowTrackInStation(*track, clusterStore, station)) {
        
        // Try to recover track if required
-       if (AliMUONReconstructor::GetRecoParam()->RecoverTracks()) {
+       if (GetRecoParam()->RecoverTracks()) {
          
          // work on a copy of the track if this station is not required
          // to keep the case where no cluster is reconstructed as a possible candidate
-         if (!AliMUONReconstructor::GetRecoParam()->RequestStation(station)) {
+         if (!GetRecoParam()->RequestStation(station)) {
            track = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(*track);
            fNRecTracks++;
          }
@@ -440,7 +440,7 @@ void AliMUONTrackReconstructorK::FollowTracks(AliMUONVClusterStore& clusterStore
            fNRecTracks--;
          }
          
-       } else if (AliMUONReconstructor::GetRecoParam()->RequestStation(station)) {
+       } else if (GetRecoParam()->RequestStation(station)) {
          // remove track if no cluster found
          fRecTracksPtr->Remove(track);
          fNRecTracks--;
@@ -453,7 +453,7 @@ void AliMUONTrackReconstructorK::FollowTracks(AliMUONVClusterStore& clusterStore
     fRecTracksPtr->Compress(); // this is essential before checking tracks
     
     // Keep only the best tracks if required
-    if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) RemoveDoubleTracks();
+    if (!GetRecoParam()->TrackAllTracks()) RemoveDoubleTracks();
     
   }
   
@@ -473,8 +473,8 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
   
   Double_t bendingMomentum;
   Double_t chi2OfCluster;
-  Double_t maxChi2OfCluster = 2. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                  AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
+  Double_t maxChi2OfCluster = 2. * GetRecoParam()->GetSigmaCutForTracking() *
+                                  GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
   Double_t addChi2TrackAtCluster;
   Double_t bestAddChi2TrackAtCluster = 1.e10;
   Bool_t foundOneCluster = kFALSE;
@@ -499,7 +499,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
   AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),1.);
   
   // reset propagator for smoother
-  if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) extrapTrackParamAtCh.ResetPropagator();
+  if (GetRecoParam()->UseSmoother()) extrapTrackParamAtCh.ResetPropagator();
   
   // Add MCS in the missing chamber(s) if any
   Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
@@ -507,14 +507,14 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
     // extrapolation to the missing chamber
     currentChamber--;
     AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(currentChamber),
-                                    AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                    GetRecoParam()->UseSmoother());
     // add MCS effect
     AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),1.);
   }
   
   //Extrapolate trackCandidate to chamber
   AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(nextChamber),
-                                  AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                  GetRecoParam()->UseSmoother());
   
   // Printout for debuging
   if ((AliLog::GetDebugLevel("MUON","AliMUONTrackReconstructorK") >= 2) || (AliLog::GetGlobalDebugLevel() >= 2)) {
@@ -530,7 +530,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
   
   // Ask the clustering to reconstruct new clusters around the track position in the current chamber
   // except for station 4 and 5 that are already entirely clusterized
-  if (AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco()) {
+  if (GetRecoParam()->CombineClusterTrackReco()) {
     if (nextChamber < 6) AskForNewClustersInChamber(extrapTrackParamAtCh, clusterStore, nextChamber);
   }
   
@@ -545,7 +545,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
     
     // try to add the current cluster accuratly
     chi2OfCluster = TryOneCluster(extrapTrackParamAtCh, cluster, extrapTrackParamAtCluster,
-                                 AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                 GetRecoParam()->UseSmoother());
     
     // if good chi2 then consider to add cluster
     if (chi2OfCluster < maxChi2OfCluster) {
@@ -558,7 +558,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
        cluster->Print();
       }
       
-      if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) {
+      if (GetRecoParam()->UseSmoother()) {
        // save extrapolated parameters for smoother
        extrapTrackParamAtCluster.SetExtrapParameters(extrapTrackParamAtCluster.GetParameters());
        
@@ -571,10 +571,10 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
       
       // skip track with absolute bending momentum out of limits
       bendingMomentum = TMath::Abs(1. / extrapTrackParamAtCluster.GetInverseBendingMomentum());
-      if (bendingMomentum < AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum() ||
-         bendingMomentum > AliMUONReconstructor::GetRecoParam()->GetMaxBendingMomentum()) continue;
+      if (bendingMomentum < GetRecoParam()->GetMinBendingMomentum() ||
+         bendingMomentum > GetRecoParam()->GetMaxBendingMomentum()) continue;
       
-      if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+      if (GetRecoParam()->TrackAllTracks()) {
        // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
        newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
        UpdateTrack(*newTrack,extrapTrackParamAtCluster,addChi2TrackAtCluster);
@@ -597,7 +597,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInChamber(AliMUONTrack &trackCandi
   }
   
   // fill out the best track if required else clean up the fRecTracksPtr array
-  if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+  if (!GetRecoParam()->TrackAllTracks()) {
     if (foundOneCluster) {
       UpdateTrack(trackCandidate,bestTrackParamAtCluster,bestAddChi2TrackAtCluster);
       
@@ -647,8 +647,8 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
   
   Double_t bendingMomentum;
   Double_t chi2OfCluster;
-  Double_t maxChi2OfCluster = 2. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                  AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
+  Double_t maxChi2OfCluster = 2. * GetRecoParam()->GetSigmaCutForTracking() *
+                                  GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
   Double_t addChi2TrackAtCluster1;
   Double_t addChi2TrackAtCluster2;
   Double_t bestAddChi2TrackAtCluster1 = 1.e10;
@@ -685,7 +685,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
   AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),1.);
   
   // reset propagator for smoother
-  if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) extrapTrackParamAtCh.ResetPropagator();
+  if (GetRecoParam()->UseSmoother()) extrapTrackParamAtCh.ResetPropagator();
   
   // Add MCS in the missing chamber(s) if any
   Int_t currentChamber = extrapTrackParamAtCh.GetClusterPtr()->GetChamberId();
@@ -693,14 +693,14 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
     // extrapolation to the missing chamber
     currentChamber--;
     AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(currentChamber),
-                                    AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                    GetRecoParam()->UseSmoother());
     // add MCS effect
     AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),1.);
   }
   
   //Extrapolate trackCandidate to chamber "ch2"
   AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(ch2),
-                                  AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                  GetRecoParam()->UseSmoother());
   
   // Printout for debuging
   if ((AliLog::GetDebugLevel("MUON","AliMUONTrackReconstructorK") >= 2) || (AliLog::GetGlobalDebugLevel() >= 2)) {
@@ -716,7 +716,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
   
   // Ask the clustering to reconstruct new clusters around the track position in the current station
   // except for station 4 and 5 that are already entirely clusterized
-  if (AliMUONReconstructor::GetRecoParam()->CombineClusterTrackReco()) {
+  if (GetRecoParam()->CombineClusterTrackReco()) {
     if (nextStation < 3) AskForNewClustersInStation(extrapTrackParamAtCh, clusterStore, nextStation);
   }
   
@@ -732,7 +732,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
     
     // try to add the current cluster accuratly
     chi2OfCluster = TryOneCluster(extrapTrackParamAtCh, clusterCh2, extrapTrackParamAtCluster2,
-                                 AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                 GetRecoParam()->UseSmoother());
     
     // if good chi2 then try to attach a cluster in the other chamber too
     if (chi2OfCluster < maxChi2OfCluster) {
@@ -746,7 +746,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
         cout << "                      look for second clusters in chamber(1..): " << ch1+1 << " ..." << endl;
       }
       
-      if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) {
+      if (GetRecoParam()->UseSmoother()) {
         // save extrapolated parameters for smoother
         extrapTrackParamAtCluster2.SetExtrapParameters(extrapTrackParamAtCluster2.GetParameters());
         
@@ -759,8 +759,8 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
       
       // skip track with absolute bending momentum out of limits
       bendingMomentum = TMath::Abs(1. / extrapTrackParamAtCluster2.GetInverseBendingMomentum());
-      if (bendingMomentum < AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum() ||
-         bendingMomentum > AliMUONReconstructor::GetRecoParam()->GetMaxBendingMomentum()) continue;
+      if (bendingMomentum < GetRecoParam()->GetMinBendingMomentum() ||
+         bendingMomentum > GetRecoParam()->GetMaxBendingMomentum()) continue;
        
       // copy new track parameters for next step
       extrapTrackParam = extrapTrackParamAtCluster2;
@@ -769,11 +769,11 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
       AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParam,AliMUONConstants::ChamberThicknessInX0(),1.);
       
       // reset propagator for smoother
-      if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) extrapTrackParam.ResetPropagator();
+      if (GetRecoParam()->UseSmoother()) extrapTrackParam.ResetPropagator();
       
       //Extrapolate track parameters to chamber "ch1"
       AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParam, AliMUONConstants::DefaultChamberZ(ch1),
-                                      AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                      GetRecoParam()->UseSmoother());
       
       // reset cluster iterator of chamber 1
       nextInCh1.Reset();
@@ -788,7 +788,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
        
        // try to add the current cluster accuratly
        chi2OfCluster = TryOneCluster(extrapTrackParam, clusterCh1, extrapTrackParamAtCluster1,
-                                     AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                     GetRecoParam()->UseSmoother());
        
        // if good chi2 then consider to add the 2 clusters to the "trackCandidate"
        if (chi2OfCluster < maxChi2OfCluster) {
@@ -802,7 +802,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
            clusterCh1->Print();
          }
           
-          if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) {
+          if (GetRecoParam()->UseSmoother()) {
             // save extrapolated parameters for smoother
             extrapTrackParamAtCluster1.SetExtrapParameters(extrapTrackParamAtCluster1.GetParameters());
             
@@ -815,10 +815,10 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
           
          // skip track with absolute bending momentum out of limits
          bendingMomentum = TMath::Abs(1. / extrapTrackParamAtCluster1.GetInverseBendingMomentum());
-         if (bendingMomentum < AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum() ||
-             bendingMomentum > AliMUONReconstructor::GetRecoParam()->GetMaxBendingMomentum()) continue;
+         if (bendingMomentum < GetRecoParam()->GetMinBendingMomentum() ||
+             bendingMomentum > GetRecoParam()->GetMaxBendingMomentum()) continue;
          
-         if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+         if (GetRecoParam()->TrackAllTracks()) {
            // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new clusters
             newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
            UpdateTrack(*newTrack,extrapTrackParamAtCluster1,extrapTrackParamAtCluster2,addChi2TrackAtCluster1,addChi2TrackAtCluster2);
@@ -853,7 +853,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
       if (!foundSecondCluster) {
        foundOneCluster = kTRUE;
         
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+       if (GetRecoParam()->TrackAllTracks()) {
          // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
           newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
          UpdateTrack(*newTrack,extrapTrackParamAtCluster2,addChi2TrackAtCluster2);
@@ -883,14 +883,14 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
   
   // look for candidates in chamber 1 not already attached to a track
   // if we want to keep all possible tracks or if no good couple of clusters has been found
-  if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
+  if (GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
     
     // add MCS effect for next step
     AliMUONTrackExtrap::AddMCSEffect(&extrapTrackParamAtCh,AliMUONConstants::ChamberThicknessInX0(),1.);
     
     //Extrapolate trackCandidate to chamber "ch1"
     AliMUONTrackExtrap::ExtrapToZCov(&extrapTrackParamAtCh, AliMUONConstants::DefaultChamberZ(ch1),
-                                    AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                    GetRecoParam()->UseSmoother());
     
     // Printout for debuging
     if ((AliLog::GetDebugLevel("MUON","AliMUONTrackReconstructorK") >= 2) || (AliLog::GetGlobalDebugLevel() >= 2)) {
@@ -919,7 +919,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
       
       // try to add the current cluster accuratly
       chi2OfCluster = TryOneCluster(extrapTrackParamAtCh, clusterCh1, extrapTrackParamAtCluster1,
-                                   AliMUONReconstructor::GetRecoParam()->UseSmoother());
+                                   GetRecoParam()->UseSmoother());
       
       // if good chi2 then consider to add clusterCh1
       // We do not try to attach a cluster in the other chamber too since it has already been done above
@@ -933,7 +933,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
          clusterCh1->Print();
        }
         
-       if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) {
+       if (GetRecoParam()->UseSmoother()) {
           // save extrapolated parameters for smoother
           extrapTrackParamAtCluster1.SetExtrapParameters(extrapTrackParamAtCluster1.GetParameters());
           
@@ -946,10 +946,10 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
         
        // skip track with absolute bending momentum out of limits
        bendingMomentum = TMath::Abs(1. / extrapTrackParamAtCluster1.GetInverseBendingMomentum());
-       if (bendingMomentum < AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum() ||
-           bendingMomentum > AliMUONReconstructor::GetRecoParam()->GetMaxBendingMomentum()) continue;
+       if (bendingMomentum < GetRecoParam()->GetMinBendingMomentum() ||
+           bendingMomentum > GetRecoParam()->GetMaxBendingMomentum()) continue;
        
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+       if (GetRecoParam()->TrackAllTracks()) {
          // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
          newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
          UpdateTrack(*newTrack,extrapTrackParamAtCluster1,addChi2TrackAtCluster1);
@@ -978,7 +978,7 @@ Bool_t AliMUONTrackReconstructorK::FollowTrackInStation(AliMUONTrack &trackCandi
   }
   
   // fill out the best track if required else clean up the fRecTracksPtr array
-  if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+  if (!GetRecoParam()->TrackAllTracks()) {
     if (foundTwoClusters) {
       UpdateTrack(trackCandidate,bestTrackParamAtCluster1,bestTrackParamAtCluster2,bestAddChi2TrackAtCluster1,bestAddChi2TrackAtCluster2);
       
@@ -1100,7 +1100,7 @@ void AliMUONTrackReconstructorK::UpdateTrack(AliMUONTrack &track, AliMUONTrackPa
   /// Update chi2 of the track 
   
   // Flag cluster as being (not) removable
-  if (AliMUONReconstructor::GetRecoParam()->RequestStation(trackParamAtCluster.GetClusterPtr()->GetChamberId()/2))
+  if (GetRecoParam()->RequestStation(trackParamAtCluster.GetClusterPtr()->GetChamberId()/2))
     trackParamAtCluster.SetRemovable(kFALSE);
   else trackParamAtCluster.SetRemovable(kTRUE);
   trackParamAtCluster.SetLocalChi2(0.); // --> Local chi2 not used
@@ -1187,7 +1187,7 @@ Bool_t AliMUONTrackReconstructorK::RecoverTrack(AliMUONTrack &trackCandidate, Al
     if (!trackParamAtCluster->IsRemovable()) return kFALSE;
     
     // reset the current cluster as being not removable if it is on a required station
-    if (AliMUONReconstructor::GetRecoParam()->RequestStation(nextStation+1)) trackParamAtCluster->SetRemovable(kFALSE);
+    if (GetRecoParam()->RequestStation(nextStation+1)) trackParamAtCluster->SetRemovable(kFALSE);
     
     // Pick up cluster with the worst chi2
     localChi2 = trackParamAtCluster->GetLocalChi2();
@@ -1208,8 +1208,8 @@ Bool_t AliMUONTrackReconstructorK::RecoverTrack(AliMUONTrack &trackCandidate, Al
   
   // skip track with absolute bending momentum out of limits
   Double_t bendingMomentum = TMath::Abs(1. / ((AliMUONTrackParam*)trackCandidate.GetTrackParamAtCluster()->First())->GetInverseBendingMomentum());
-  if (bendingMomentum < AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum() ||
-      bendingMomentum > AliMUONReconstructor::GetRecoParam()->GetMaxBendingMomentum()) return kFALSE;
+  if (bendingMomentum < GetRecoParam()->GetMinBendingMomentum() ||
+      bendingMomentum > GetRecoParam()->GetMaxBendingMomentum()) return kFALSE;
   
   // Look for new cluster(s) in next station
   return FollowTrackInStation(trackCandidate, clusterStore, nextStation);
@@ -1322,8 +1322,8 @@ void AliMUONTrackReconstructorK::ComplementTracks(const AliMUONVClusterStore& cl
   
   Int_t chamberId, detElemId;
   Double_t chi2OfCluster, addChi2TrackAtCluster, bestAddChi2TrackAtCluster;
-  Double_t maxChi2OfCluster = 2. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                  AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
+  Double_t maxChi2OfCluster = 2. * GetRecoParam()->GetSigmaCutForTracking() *
+                                  GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
   Bool_t foundOneCluster, trackModified;
   AliMUONVCluster *cluster;
   AliMUONTrackParam *trackParam, *previousTrackParam, *nextTrackParam, trackParamAtCluster, bestTrackParamAtCluster;
@@ -1418,17 +1418,17 @@ void AliMUONTrackReconstructorK::ImproveTrack(AliMUONTrack &track)
   Double_t localChi2, worstLocalChi2;
   AliMUONTrackParam *trackParamAtCluster, *worstTrackParamAtCluster, *nextTrackParam;
   Bool_t smoothed;
-  Double_t sigmaCut2 = AliMUONReconstructor::GetRecoParam()->GetSigmaCutForImprovement() *
-                       AliMUONReconstructor::GetRecoParam()->GetSigmaCutForImprovement();
+  Double_t sigmaCut2 = GetRecoParam()->GetSigmaCutForImprovement() *
+                       GetRecoParam()->GetSigmaCutForImprovement();
   
   while (!track.IsImproved()) {
     
     // identify removable clusters
-    track.TagRemovableClusters();
+    track.TagRemovableClusters(GetRecoParam()->RequestedStationMask());
     
     // Run smoother if required
     smoothed = kFALSE;
-    if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) smoothed = RunSmoother(track);
+    if (GetRecoParam()->UseSmoother()) smoothed = RunSmoother(track);
     
     // Use standard procedure to compute local chi2 if smoother not required or not working
     if (!smoothed) {
@@ -1447,7 +1447,7 @@ void AliMUONTrackReconstructorK::ImproveTrack(AliMUONTrack &track)
     while (trackParamAtCluster) {
       
       // save parameters into smooth parameters in case of smoother did not work properly
-      if (AliMUONReconstructor::GetRecoParam()->UseSmoother() && !smoothed) {
+      if (GetRecoParam()->UseSmoother() && !smoothed) {
        trackParamAtCluster->SetSmoothParameters(trackParamAtCluster->GetParameters());
        trackParamAtCluster->SetSmoothCovariances(trackParamAtCluster->GetCovariances());
       }
@@ -1511,9 +1511,9 @@ void AliMUONTrackReconstructorK::FinalizeTrack(AliMUONTrack &track)
   // update track parameters (using smoother if required) if not already done
   if (!track.IsImproved()) {
     smoothed = kFALSE;
-    if (AliMUONReconstructor::GetRecoParam()->UseSmoother()) smoothed = RunSmoother(track);
+    if (GetRecoParam()->UseSmoother()) smoothed = RunSmoother(track);
     if (!smoothed) track.UpdateCovTrackParamAtCluster();
-  } else smoothed = AliMUONReconstructor::GetRecoParam()->UseSmoother();
+  } else smoothed = GetRecoParam()->UseSmoother();
   
   // copy smoothed parameters and covariances if any
   if (smoothed) {
@@ -1537,7 +1537,7 @@ Bool_t AliMUONTrackReconstructorK::RefitTrack(AliMUONTrack &track, Bool_t enable
   /// re-fit the given track
   
   // check validity of the track
-  if (!track.IsValid()) {
+  if (!track.IsValid(GetRecoParam()->RequestedStationMask())) {
     AliWarning("the track does not contain enough clusters --> unable to refit");
     return kFALSE;
   }
@@ -1547,7 +1547,7 @@ Bool_t AliMUONTrackReconstructorK::RefitTrack(AliMUONTrack &track, Bool_t enable
   
   // Improve the reconstructed tracks if required
   track.SetImproved(kFALSE);
-  if (enableImprovement && AliMUONReconstructor::GetRecoParam()->ImproveTracks()) ImproveTrack(track);
+  if (enableImprovement && GetRecoParam()->ImproveTracks()) ImproveTrack(track);
   
   // Fill AliMUONTrack data members
   FinalizeTrack(track);
index 011e9ff20b5a5bdd75acc154f69ff44ae5b20b48..3891cb98536b37695ed202deadea43d7b8526687 100644 (file)
@@ -20,7 +20,7 @@ class AliMUONTrackReconstructorK : public AliMUONVTrackReconstructor
 
  public:
   
-  AliMUONTrackReconstructorK(AliMUONVClusterServer* clusterServer); // default Constructor
+  AliMUONTrackReconstructorK(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer); // default Constructor
   virtual ~AliMUONTrackReconstructorK(); // Destructor
   
   virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement = kTRUE);
index 13b92ca8436821234da6729db243ec6b3ea93055..0ec3dc39017c698599006ab7572e29b65e57fbe1 100644 (file)
@@ -67,28 +67,30 @@ ClassImp(AliMUONTracker)
 
 
 //_____________________________________________________________________________
-AliMUONTracker::AliMUONTracker(AliMUONVClusterServer* clusterServer,
+AliMUONTracker::AliMUONTracker(const AliMUONRecoParam* recoParam,
+                               AliMUONVClusterServer* clusterServer,
                                const AliMUONVDigitStore& digitStore,
                                const AliMUONDigitMaker* digitMaker,
                                const AliMUONGeometryTransformer* transformer,
                                const AliMUONTriggerCircuit* triggerCircuit)
 : AliTracker(),
-  fDigitMaker(digitMaker), // not owner
-  fTransformer(transformer), // not owner
-  fTriggerCircuit(triggerCircuit), // not owner
-  fTrackHitPatternMaker(0x0),
-  fTrackReco(0x0),
-  fClusterStore(0x0),
-  fTriggerStore(0x0),
-  fClusterServer(clusterServer), 
-  fIsOwnerOfClusterServer(kFALSE),
-  fDigitStore(digitStore), // not owner
-  fInputClusterStore(0x0),
-  fTriggerTrackStore(0x0)
+fDigitMaker(digitMaker), // not owner
+fTransformer(transformer), // not owner
+fTriggerCircuit(triggerCircuit), // not owner
+fTrackHitPatternMaker(0x0),
+fTrackReco(0x0),
+fClusterStore(0x0),
+fTriggerStore(0x0),
+fClusterServer(clusterServer), 
+fIsOwnerOfClusterServer(kFALSE),
+fDigitStore(digitStore), // not owner
+fInputClusterStore(0x0),
+fTriggerTrackStore(0x0),
+fRecoParam(recoParam)
 {
   /// constructor
   if (fTransformer && fDigitMaker)
-    fTrackHitPatternMaker = new AliMUONTrackHitPattern(*fTransformer,*fDigitMaker);
+    fTrackHitPatternMaker = new AliMUONTrackHitPattern(recoParam,*fTransformer,*fDigitMaker);
   
   if (!fClusterServer)
   {
@@ -174,8 +176,8 @@ Int_t AliMUONTracker::LoadClusters(TTree* clustersTree)
     }
     delete fClusterServer;
     fClusterServer = new AliMUONLegacyClusterServer(*fTransformer,fInputClusterStore,
-                                                                                                                                                                                                               AliMUONReconstructor::GetRecoParam()->BypassSt4(),
-                                                                                                                                                                                                               AliMUONReconstructor::GetRecoParam()->BypassSt5());
+                                                                                                                                                                                                               GetRecoParam()->BypassSt4(),
+                                                                                                                                                                                                               GetRecoParam()->BypassSt5());
     SetupClusterServer(*fClusterServer);
   }
   
@@ -195,7 +197,7 @@ Int_t AliMUONTracker::Clusters2Tracks(AliESDEvent* esd)
   
   if (!fTrackReco) 
   {
-    fTrackReco = CreateTrackReconstructor(AliMUONReconstructor::GetRecoParam()->GetTrackingMode(),fClusterServer);
+    fTrackReco = CreateTrackReconstructor(GetRecoParam(),fClusterServer);
   }
   
   // if the required tracking mode does not exist
@@ -219,8 +221,8 @@ Int_t AliMUONTracker::Clusters2Tracks(AliESDEvent* esd)
     fTrackReco->EventReconstructTrigger(*fTriggerCircuit,*fTriggerStore,*(TriggerTrackStore()));
   }
   
-  if ( ( AliMUONReconstructor::GetRecoParam()->BypassSt4() || 
-                                AliMUONReconstructor::GetRecoParam()->BypassSt5() ) && 
+  if ( ( GetRecoParam()->BypassSt4() || 
+                                GetRecoParam()->BypassSt5() ) && 
                        TriggerTrackStore()->GetSize() > 5 ) 
   {
     // Hard cut to reject shower events
@@ -272,8 +274,8 @@ void AliMUONTracker::FillESD(AliMUONVTrackStore& trackStore, AliESDEvent* esd) c
   AliMUONLocalTrigger* locTrg;
   AliESDMuonTrack esdTrack;
   TIter next(trackStore.CreateIterator());
-  if (AliMUONReconstructor::GetRecoParam()->SaveFullClusterInESD() && 
-      gRandom->Uniform(100.) <= AliMUONReconstructor::GetRecoParam()->GetPercentOfFullClusterInESD()) {
+  if (GetRecoParam()->SaveFullClusterInESD() && 
+      gRandom->Uniform(100.) <= GetRecoParam()->GetPercentOfFullClusterInESD()) {
     
     while ( ( track = static_cast<AliMUONTrack*>(next()) ) ) {
       
@@ -325,22 +327,22 @@ void AliMUONTracker::FillESD(AliMUONVTrackStore& trackStore, AliESDEvent* esd) c
 }
 
 //_____________________________________________________________________________
-AliMUONVTrackReconstructor* AliMUONTracker::CreateTrackReconstructor(const char* trackingMode, AliMUONVClusterServer* clusterServer)
+AliMUONVTrackReconstructor* AliMUONTracker::CreateTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer)
 {
   /// Create track reconstructor, depending on tracking mode set in RecoParam
   
   AliMUONVTrackReconstructor* trackReco(0x0);
   
-  TString opt(trackingMode);
+  TString opt(recoParam->GetTrackingMode());
   opt.ToUpper();
   
   if (strstr(opt,"ORIGINAL"))
   {
-    trackReco = new AliMUONTrackReconstructor(clusterServer);
+    trackReco = new AliMUONTrackReconstructor(recoParam,clusterServer);
   }
   else if (strstr(opt,"KALMAN"))
   {
-    trackReco = new AliMUONTrackReconstructorK(clusterServer);
+    trackReco = new AliMUONTrackReconstructorK(recoParam,clusterServer);
   }
   else
   {
@@ -369,25 +371,25 @@ AliMUONTracker::SetupClusterServer(AliMUONVClusterServer& clusterServer)
 {
   /// Setup the cluster server
   
-  if ( AliMUONReconstructor::GetRecoParam()->BypassSt4() ||
-                        AliMUONReconstructor::GetRecoParam()->BypassSt5() )
+  if ( GetRecoParam()->BypassSt4() ||
+                        GetRecoParam()->BypassSt5() )
   {
     Bool_t ok = clusterServer.UseTriggerTrackStore(TriggerTrackStore());
   
                TString msg1;
                TString msg2;
                
-               if ( AliMUONReconstructor::GetRecoParam()->BypassSt45() )
+               if ( GetRecoParam()->BypassSt45() )
                {
                        msg1 = "STATIONS 4 AND 5";
                        msg2 = "THOSE TWO STATIONS";
                }
-               else if ( AliMUONReconstructor::GetRecoParam()->BypassSt4() )
+               else if ( GetRecoParam()->BypassSt4() )
                {
                        msg1 = "STATION 4";
                        msg2 = "THAT STATION";
                }
-               else if ( AliMUONReconstructor::GetRecoParam()->BypassSt5() )
+               else if ( GetRecoParam()->BypassSt5() )
                {
                        msg1 = "STATION 5";
                        msg2 = "THAT STATION";
index 788cb9e4b18b276bb1bd8333e14b6d145f90281d..1d242508c7d53e9a0372ab4acf9f7b5e79043916 100644 (file)
@@ -17,6 +17,7 @@ class AliCluster;
 class AliESDEvent;
 class AliMUONDigitMaker;
 class AliMUONGeometryTransformer;
+class AliMUONRecoParam;
 class AliMUONTrackHitPattern;
 class AliMUONTriggerCircuit;
 class AliMUONVClusterServer;
@@ -31,7 +32,8 @@ class AliMUONTracker : public AliTracker
 {
  public:
 
-  AliMUONTracker(AliMUONVClusterServer* clusterServer,
+  AliMUONTracker(const AliMUONRecoParam* recoParam,
+                 AliMUONVClusterServer* clusterServer,
                  const AliMUONVDigitStore& digitStore,
                  const AliMUONDigitMaker* digitMaker=0,
                  const AliMUONGeometryTransformer* transformer=0,
@@ -44,6 +46,8 @@ class AliMUONTracker : public AliTracker
 
   virtual void  UnloadClusters();
 
+  const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
+  
   /// Dummy implementation
   virtual Int_t PropagateBack(AliESDEvent* /*event*/) {return 0;}
   /// Dummy implementation
@@ -51,7 +55,7 @@ class AliMUONTracker : public AliTracker
   /// Dummy implementation
   virtual AliCluster *GetCluster(Int_t /*index*/) const {return 0;}
 
-  static AliMUONVTrackReconstructor* CreateTrackReconstructor(const char* trackingMode, AliMUONVClusterServer* clusterServer);
+  static AliMUONVTrackReconstructor* CreateTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer);
   
 private:
   /// Not implemented
@@ -80,6 +84,7 @@ private:
   const AliMUONVDigitStore& fDigitStore; //!< digit info to fill in ESD
   mutable AliMUONVClusterStore* fInputClusterStore; //!< cluster container
   mutable AliMUONVTriggerTrackStore* fTriggerTrackStore; //!< trigger track store
+  const AliMUONRecoParam* fRecoParam; //!< pointer to reco param
   
   ClassDef(AliMUONTracker,0)  //tracker base class for MUON
 };
index 7d21cfb962aea3c83a431a332e7d15c64a8ce538..9c1b81104f460a1ad18d4efd26a0ba9c13f9768c 100644 (file)
@@ -66,7 +66,8 @@ fUseHPDecoder(kTRUE)
 }
 
 //_____________________________________________________________________________
-AliMUONTrackerCalibratedDataMaker::AliMUONTrackerCalibratedDataMaker(Int_t runNumber,
+AliMUONTrackerCalibratedDataMaker::AliMUONTrackerCalibratedDataMaker(const AliMUONRecoParam* recoParam,
+                                                                     Int_t runNumber,
                                                                      AliRawReader* reader, 
                                                                      const char* cdbpath,
                                                                      const char* calibMode,
@@ -90,11 +91,12 @@ fUseHPDecoder(useHPdecoder)
   /// Ctor in which this object will NOT be owner of the reader,
   /// and can NOT apply rewind to it, nor use Next on it
   
-  Ctor(runNumber,calibMode,histogram,xmin,xmax);
+  Ctor(recoParam,runNumber,calibMode,histogram,xmin,xmax);
 }
 
 //_____________________________________________________________________________
-AliMUONTrackerCalibratedDataMaker::AliMUONTrackerCalibratedDataMaker(AliRawReader* reader,
+AliMUONTrackerCalibratedDataMaker::AliMUONTrackerCalibratedDataMaker(const AliMUONRecoParam* recoParam,
+                                                                     AliRawReader* reader,
                                                                      const char* cdbpath,
                                                                      const char* calibMode,
                                                                      Bool_t histogram,
@@ -126,12 +128,13 @@ fUseHPDecoder(useHPDecoder)
     fRawReader->RewindEvents();
   }
   
-  Ctor(runNumber,calibMode,histogram,xmin,xmax);
+  Ctor(recoParam,runNumber,calibMode,histogram,xmin,xmax);
 }
 
 //_____________________________________________________________________________
 void
-AliMUONTrackerCalibratedDataMaker::Ctor(Int_t runNumber, const char* calibMode,
+AliMUONTrackerCalibratedDataMaker::Ctor(const AliMUONRecoParam* recoParam, 
+                                        Int_t runNumber, const char* calibMode,
                                         Bool_t histogram, Double_t xmin, Double_t xmax)
 {
   /// "designated" constructor.
@@ -203,8 +206,7 @@ AliMUONTrackerCalibratedDataMaker::Ctor(Int_t runNumber, const char* calibMode,
       AliCDBManager::Instance()->SetDefaultStorage(storage);
     }
     
-               const AliMUONRecoParam* recoParams = AliMUONReconstructor::GetRecoParam();
-    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParams,calibMode);
+    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParam,calibMode);
                //FIXME: get the reco param from GUI and/or from OCDB if not used from the QA code ?
   }
 }
index 8b8b64999dee48a94224936eb21ccc14ed2c7fc5..50244982293031028ad933f55a90fe5b97db31ab 100644 (file)
@@ -26,6 +26,7 @@ class AliMUONDigitMaker;
 class AliMUONVTrackerData;
 class AliMUONVStore;
 class AliMUONVDigitStore;
+class AliMUONRecoParam;
 
 class AliMUONTrackerCalibratedDataMaker : public AliMUONVTrackerDataMaker
 {
@@ -33,7 +34,8 @@ public:
 
   AliMUONTrackerCalibratedDataMaker(TRootIOCtor* ioCtor);
   
-  AliMUONTrackerCalibratedDataMaker(Int_t runNumber,
+  AliMUONTrackerCalibratedDataMaker(const AliMUONRecoParam* recoParam,
+                                    Int_t runNumber,
                                     AliRawReader* reader, 
                                     const char* cdbpath=0x0,
                                     const char* calibMode=0x0,
@@ -42,7 +44,8 @@ public:
                                     Double_t xmax=4096.0,
                                     Bool_t useHPdecoder=kTRUE);
   
-  AliMUONTrackerCalibratedDataMaker(AliRawReader* reader = 0x0, 
+  AliMUONTrackerCalibratedDataMaker(const AliMUONRecoParam* recoParam,
+                                    AliRawReader* reader = 0x0, 
                                     const char* cdbpath=0x0,
                                     const char* calibMode=0x0,
                                     Bool_t histogram=kFALSE,
@@ -94,7 +97,8 @@ private:
   /// Not implemented
   AliMUONTrackerCalibratedDataMaker& operator=(const AliMUONTrackerCalibratedDataMaker& rhs);
   
-  void Ctor(Int_t runNumber, const char* calibMode,
+  void Ctor(const AliMUONRecoParam* recoParam,
+            Int_t runNumber, const char* calibMode,
             Bool_t histogram, Double_t xmin, Double_t xmax);
   
 private:
index d2314bae0d0f1c49180d8bf79373a26652348815..79f491d44dd99ea200d52ff330e9c0cbd1cb2506 100644 (file)
@@ -93,11 +93,13 @@ ClassImp(AliMUONVTrackReconstructor) // Class implementation in ROOT context
 /// \endcond
 
   //__________________________________________________________________________
-AliMUONVTrackReconstructor::AliMUONVTrackReconstructor(AliMUONVClusterServer* clusterServer)
-  : TObject(),
-    fRecTracksPtr(0x0),
-    fNRecTracks(0),
-    fClusterServer(clusterServer)
+AliMUONVTrackReconstructor::AliMUONVTrackReconstructor(const AliMUONRecoParam* recoParam,
+                                                       AliMUONVClusterServer* clusterServer)
+: TObject(),
+fRecTracksPtr(0x0),
+fNRecTracks(0),
+fClusterServer(clusterServer),
+fRecoParam(recoParam)
 {
   /// Constructor for class AliMUONVTrackReconstructor
   /// WARNING: if clusterServer=0x0, no clusterization will be possible at this level
@@ -141,7 +143,7 @@ void AliMUONVTrackReconstructor::EventReconstruct(AliMUONVClusterStore& clusterS
   MakeTrackCandidates(clusterStore);
   
   // Look for extra candidates from clusters in stations(1..) 4 and 5
-  if (AliMUONReconstructor::GetRecoParam()->MakeMoreTrackCandidates()) MakeMoreTrackCandidates(clusterStore);
+  if (GetRecoParam()->MakeMoreTrackCandidates()) MakeMoreTrackCandidates(clusterStore);
   
   // Stop tracking if no candidate found
   if (fRecTracksPtr->GetEntriesFast() == 0) return;
@@ -150,10 +152,10 @@ void AliMUONVTrackReconstructor::EventReconstruct(AliMUONVClusterStore& clusterS
   FollowTracks(clusterStore);
   
   // Complement the reconstructed tracks
-  if (AliMUONReconstructor::GetRecoParam()->ComplementTracks()) ComplementTracks(clusterStore);
+  if (GetRecoParam()->ComplementTracks()) ComplementTracks(clusterStore);
   
   // Improve the reconstructed tracks
-  if (AliMUONReconstructor::GetRecoParam()->ImproveTracks()) ImproveTracks();
+  if (GetRecoParam()->ImproveTracks()) ImproveTracks();
   
   // Remove double tracks
   RemoveDoubleTracks();
@@ -202,7 +204,7 @@ TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliM
       nonBendingSlope = (cluster1->GetX() - cluster2->GetX()) / (cluster1->GetZ() - cluster2->GetZ());
       
       // check if non bending slope is within tolerances
-      if (TMath::Abs(nonBendingSlope) > AliMUONReconstructor::GetRecoParam()->GetMaxNonBendingSlope()) continue;
+      if (TMath::Abs(nonBendingSlope) > GetRecoParam()->GetMaxNonBendingSlope()) continue;
       
       // bending slope
       bendingSlope = (cluster1->GetY() - cluster2->GetY()) / (cluster1->GetZ() - cluster2->GetZ());
@@ -217,13 +219,13 @@ TClonesArray* AliMUONVTrackReconstructor::MakeSegmentsBetweenChambers(const AliM
        bendingMomentum = TMath::Abs(AliMUONTrackExtrap::GetBendingMomentumFromImpactParam(impactParam));
        
        // check if bending momentum is within tolerances
-       if (bendingMomentum < AliMUONReconstructor::GetRecoParam()->GetMinBendingMomentum() ||
-           bendingMomentum > AliMUONReconstructor::GetRecoParam()->GetMaxBendingMomentum()) continue;
+       if (bendingMomentum < GetRecoParam()->GetMinBendingMomentum() ||
+           bendingMomentum > GetRecoParam()->GetMaxBendingMomentum()) continue;
        
       } else {
        
        // check if non bending slope is within tolerances
-       if (TMath::Abs(bendingSlope) > AliMUONReconstructor::GetRecoParam()->GetMaxBendingSlope()) continue;
+       if (TMath::Abs(bendingSlope) > GetRecoParam()->GetMaxBendingSlope()) continue;
       
       }
       // make new segment
@@ -354,7 +356,7 @@ void AliMUONVTrackReconstructor::AskForNewClustersInChamber(const AliMUONTrackPa
   /// Ask the clustering to reconstruct new clusters around the track candidate position
   
   // check if the current chamber is useable
-  if (!fClusterServer || !AliMUONReconstructor::GetRecoParam()->UseChamber(chamber)) return;
+  if (!fClusterServer || !GetRecoParam()->UseChamber(chamber)) return;
   
   // maximum distance between the center of the chamber and a detection element
   // (accounting for the inclination of the chamber)
@@ -369,11 +371,11 @@ void AliMUONVTrackReconstructor::AskForNewClustersInChamber(const AliMUONTrackPa
   Double_t errX2 = kParamCov(0,0) + kMaxDZ * kMaxDZ * kParamCov(1,1) + 2. * kMaxDZ * TMath::Abs(kParamCov(0,1));
   Double_t errY2 = kParamCov(2,2) + kMaxDZ * kMaxDZ * kParamCov(3,3) + 2. * kMaxDZ * TMath::Abs(kParamCov(2,3));
   Double_t dX = TMath::Abs(trackParam.GetNonBendingSlope()) * kMaxDZ +
-               AliMUONReconstructor::GetRecoParam()->GetMaxNonBendingDistanceToTrack() +
-               AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errX2);
+               GetRecoParam()->GetMaxNonBendingDistanceToTrack() +
+               GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errX2);
   Double_t dY = TMath::Abs(trackParam.GetBendingSlope()) * kMaxDZ +
-               AliMUONReconstructor::GetRecoParam()->GetMaxBendingDistanceToTrack() +
-               AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errY2);
+               GetRecoParam()->GetMaxBendingDistanceToTrack() +
+               GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errY2);
   TVector2 dimensions(dX, dY);
   TVector2 position(extrapTrackParam.GetNonBendingCoor(), extrapTrackParam.GetBendingCoor());
   AliMpArea area(position, dimensions);
@@ -437,10 +439,10 @@ Bool_t AliMUONVTrackReconstructor::TryOneClusterFast(const AliMUONTrackParam &tr
   Double_t errX2 = kParamCov(0,0) + dZ * dZ * kParamCov(1,1) + 2. * dZ * kParamCov(0,1);
   Double_t errY2 = kParamCov(2,2) + dZ * dZ * kParamCov(3,3) + 2. * dZ * kParamCov(2,3);
 
-  Double_t dXmax = AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errX2) +
-                   AliMUONReconstructor::GetRecoParam()->GetMaxNonBendingDistanceToTrack();
-  Double_t dYmax = AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errY2) +
-                  AliMUONReconstructor::GetRecoParam()->GetMaxBendingDistanceToTrack();
+  Double_t dXmax = GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errX2) +
+                   GetRecoParam()->GetMaxNonBendingDistanceToTrack();
+  Double_t dYmax = GetRecoParam()->GetSigmaCutForTracking() * TMath::Sqrt(errY2) +
+                  GetRecoParam()->GetMaxBendingDistanceToTrack();
   
   if (TMath::Abs(dX) > dXmax || TMath::Abs(dY) > dYmax) return kFALSE;
   
@@ -505,8 +507,8 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInChamber(AliMUONTrack &trac
   AliDebug(1,Form("Enter FollowLinearTrackInChamber(1..) %d", nextChamber+1));
   
   Double_t chi2WithOneCluster = 1.e10;
-  Double_t maxChi2WithOneCluster = 2. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                       AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
+  Double_t maxChi2WithOneCluster = 2. * GetRecoParam()->GetSigmaCutForTracking() *
+                                       GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
   Double_t bestChi2WithOneCluster = maxChi2WithOneCluster;
   Bool_t foundOneCluster = kFALSE;
   AliMUONTrack *newTrack = 0x0;
@@ -559,10 +561,10 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInChamber(AliMUONTrack &trac
        cluster->Print();
       }
       
-      if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+      if (GetRecoParam()->TrackAllTracks()) {
        // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
        newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
-       if (AliMUONReconstructor::GetRecoParam()->RequestStation(nextChamber/2))
+       if (GetRecoParam()->RequestStation(nextChamber/2))
          extrapTrackParamAtCluster.SetRemovable(kFALSE);
        else extrapTrackParamAtCluster.SetRemovable(kTRUE);
        newTrack->AddTrackParamAtCluster(extrapTrackParamAtCluster,*cluster);
@@ -585,9 +587,9 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInChamber(AliMUONTrack &trac
   }
   
   // fill out the best track if required else clean up the fRecTracksPtr array
-  if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+  if (!GetRecoParam()->TrackAllTracks()) {
     if (foundOneCluster) {
-      if (AliMUONReconstructor::GetRecoParam()->RequestStation(nextChamber/2))
+      if (GetRecoParam()->RequestStation(nextChamber/2))
        bestTrackParamAtCluster.SetRemovable(kFALSE);
       else bestTrackParamAtCluster.SetRemovable(kTRUE);
       trackCandidate.AddTrackParamAtCluster(bestTrackParamAtCluster,*(bestTrackParamAtCluster.GetClusterPtr()));
@@ -639,10 +641,10 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
   
   Double_t chi2WithOneCluster = 1.e10;
   Double_t chi2WithTwoClusters = 1.e10;
-  Double_t maxChi2WithOneCluster = 2. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                       AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
-  Double_t maxChi2WithTwoClusters = 4. * AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking() *
-                                        AliMUONReconstructor::GetRecoParam()->GetSigmaCutForTracking(); // 4 because 4 quantities in chi2
+  Double_t maxChi2WithOneCluster = 2. * GetRecoParam()->GetSigmaCutForTracking() *
+                                       GetRecoParam()->GetSigmaCutForTracking(); // 2 because 2 quantities in chi2
+  Double_t maxChi2WithTwoClusters = 4. * GetRecoParam()->GetSigmaCutForTracking() *
+                                        GetRecoParam()->GetSigmaCutForTracking(); // 4 because 4 quantities in chi2
   Double_t bestChi2WithOneCluster = maxChi2WithOneCluster;
   Double_t bestChi2WithTwoClusters = maxChi2WithTwoClusters;
   Bool_t foundOneCluster = kFALSE;
@@ -735,7 +737,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
            clusterCh1->Print();
          }
          
-         if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+         if (GetRecoParam()->TrackAllTracks()) {
            // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new clusters
             newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
            extrapTrackParamAtCluster1.SetRemovable(kTRUE);
@@ -768,10 +770,10 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
       if (!foundSecondCluster) {
        foundOneCluster = kTRUE;
         
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+       if (GetRecoParam()->TrackAllTracks()) {
          // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
           newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
-         if (AliMUONReconstructor::GetRecoParam()->RequestStation(nextStation))
+         if (GetRecoParam()->RequestStation(nextStation))
            extrapTrackParamAtCluster2.SetRemovable(kFALSE);
          else extrapTrackParamAtCluster2.SetRemovable(kTRUE);
          newTrack->AddTrackParamAtCluster(extrapTrackParamAtCluster2,*clusterCh2);
@@ -797,7 +799,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
   
   // look for candidates in chamber 1 not already attached to a track
   // if we want to keep all possible tracks or if no good couple of clusters has been found
-  if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
+  if (GetRecoParam()->TrackAllTracks() || !foundTwoClusters) {
     
     // Printout for debuging
     if ((AliLog::GetDebugLevel("MUON","AliMUONVTrackReconstructor") >= 1) || (AliLog::GetGlobalDebugLevel() >= 1)) {
@@ -840,10 +842,10 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
          clusterCh1->Print();
        }
        
-       if (AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+       if (GetRecoParam()->TrackAllTracks()) {
          // copy trackCandidate into a new track put at the end of fRecTracksPtr and add the new cluster
          newTrack = new ((*fRecTracksPtr)[fRecTracksPtr->GetLast()+1]) AliMUONTrack(trackCandidate);
-         if (AliMUONReconstructor::GetRecoParam()->RequestStation(nextStation))
+         if (GetRecoParam()->RequestStation(nextStation))
            extrapTrackParamAtCluster1.SetRemovable(kFALSE);
          else extrapTrackParamAtCluster1.SetRemovable(kTRUE);
          newTrack->AddTrackParamAtCluster(extrapTrackParamAtCluster1,*clusterCh1);
@@ -868,7 +870,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
   }
   
   // fill out the best track if required else clean up the fRecTracksPtr array
-  if (!AliMUONReconstructor::GetRecoParam()->TrackAllTracks()) {
+  if (!GetRecoParam()->TrackAllTracks()) {
     if (foundTwoClusters) {
       bestTrackParamAtCluster1.SetRemovable(kTRUE);
       trackCandidate.AddTrackParamAtCluster(bestTrackParamAtCluster1,*(bestTrackParamAtCluster1.GetClusterPtr()));
@@ -882,7 +884,7 @@ Bool_t AliMUONVTrackReconstructor::FollowLinearTrackInStation(AliMUONTrack &trac
       }
       
     } else if (foundOneCluster) {
-      if (AliMUONReconstructor::GetRecoParam()->RequestStation(nextStation))
+      if (GetRecoParam()->RequestStation(nextStation))
        bestTrackParamAtCluster1.SetRemovable(kFALSE);
       else bestTrackParamAtCluster1.SetRemovable(kTRUE);
       trackCandidate.AddTrackParamAtCluster(bestTrackParamAtCluster1,*(bestTrackParamAtCluster1.GetClusterPtr()));
index 8e566555a295d5c74079eb236f0dd588af12c3b0..c814be8d62c3b4e7846cfde5f7a4c61617159619 100644 (file)
@@ -30,13 +30,15 @@ class AliMUONGeometryTransformer;
 class AliMUONDigitMaker;
 class AliMUONTriggerCircuit;
 class TClonesArray;
+class AliMUONRecoParam;
 
 class AliMUONVTrackReconstructor : public TObject {
 
  public:
-  AliMUONVTrackReconstructor(AliMUONVClusterServer* clusterServer); // default Constructor
+  AliMUONVTrackReconstructor(const AliMUONRecoParam* recoParam, AliMUONVClusterServer* clusterServer); // default Constructor
   virtual ~AliMUONVTrackReconstructor(); // Destructor
 
+
   void EventReconstruct(AliMUONVClusterStore& clusterStore,
                         AliMUONVTrackStore& trackStore);
   
@@ -48,11 +50,36 @@ class AliMUONVTrackReconstructor : public TObject {
                                  const AliMUONVTriggerTrackStore& triggerTrackStore,
                                  const AliMUONVTriggerStore& triggerStore,
                                  const AliMUONTrackHitPattern& trackHitPattern);
+
+  const AliMUONRecoParam* GetRecoParam() const { return fRecoParam; }
   
   /// re-fit the given track
   virtual Bool_t RefitTrack(AliMUONTrack &track, Bool_t enableImprovement = kTRUE) = 0;
   
   
+  // methods previously got from the static muonrecoparam:
+  //
+  // MakeMoreTrackCandidates()
+  //    
+  // ComplementTracks()
+  //    
+  // ImproveTracks()
+  //
+  // GetMaxNonBendingSlope()
+  // GetMaxBendingSlope()
+  //
+  // GetMinBendingMomentum()
+  // GetMaxBendingMomentum()
+  //
+  // UseChamber(Int_t chamberId)
+  //
+  // GetMaxNonBendingDistanceToTrack()
+  // GetSigmaCutForTracking()
+  // GetMaxBendingDistanceToTrack()
+  // GetSigmaCutForTracking()
+  // TrackAllTracks()
+  // RequestStation(Int_t stationId)
+  
  protected:
 
   TClonesArray *fRecTracksPtr; ///< pointer to array of reconstructed tracks
@@ -60,6 +87,8 @@ class AliMUONVTrackReconstructor : public TObject {
 
   AliMUONVClusterServer* fClusterServer; ///< reference to our cluster server
 
+  const AliMUONRecoParam* fRecoParam; ///< reference to reco parameters
+  
   // Functions
   AliMUONVTrackReconstructor (const AliMUONVTrackReconstructor& rhs); ///< copy constructor
   AliMUONVTrackReconstructor& operator=(const AliMUONVTrackReconstructor& rhs); ///< assignment operator
index 45713fb0eeb67aa1ea5e1fc69945ddf7347fda5a..78a345f540046f9c62f2e534bd2d65fd5c8b98d7 100644 (file)
@@ -54,17 +54,6 @@ void runReconstruction(int seed, const char* input, const char* recoptions)
   MuonRec->SetLoadAlignData("MUON");
   MuonRec->SetNumberOfEventsPerFile(1000);
   MuonRec->SetOption("MUON",recoptions);
-  //  MuonRec->SetEventRange(319,319);
-  MuonRec->SetWriteAOD();
-  
-  AliMUONRecoParam *muonRecoParam = AliMUONRecoParam::GetLowFluxParam();
-  //muonRecoParam->CombineClusterTrackReco(kTRUE);
-  //muonRecoParam->SaveFullClusterInESD(kTRUE,100.);
-  //muonRecoParam->SetClusteringMode("PEAKFIT");
-  //muonRecoParam->SetClusteringMode("PEAKCOG");
-  muonRecoParam->Print("FULL");
-  AliMUONReconstructor::SetRecoParam(muonRecoParam);
-  
   MuonRec->SetRunQA("MUON:ALL");
   
   MuonRec->Run();