From 35be7ed7d6262dc57ca2082102037e1e77c8de35 Mon Sep 17 00:00:00 2001 From: laphecet Date: Wed, 27 Aug 2008 13:50:56 +0000 Subject: [PATCH] Define default values of cluster resolution per chamber in the reconstruction parameters (AliMUONRecoParam object) (Philippe P.) --- MUON/AliMUONLegacyClusterServer.cxx | 4 +- MUON/AliMUONLegacyClusterServer.h | 9 +- MUON/AliMUONRawCluster.cxx | 5 +- MUON/AliMUONRawClusterV2.cxx | 9 +- MUON/AliMUONRecoParam.cxx | 51 ++++-- MUON/AliMUONRecoParam.h | 163 ++++++++++-------- MUON/AliMUONReconstructor.cxx | 2 +- MUON/AliMUONRefitter.cxx | 6 +- MUON/AliMUONSimpleClusterServer.cxx | 12 +- MUON/AliMUONSimpleClusterServer.h | 3 +- MUON/AliMUONTrackReconstructor.cxx | 2 +- MUON/AliMUONTrackReconstructorK.cxx | 2 +- MUON/AliMUONTracker.cxx | 1 - MUON/AliMUONVClusterServer.h | 4 +- MUON/AliMUONVTrackReconstructor.cxx | 2 +- .../Calib/RecoParam/Run0_999999999_v0_s0.root | Bin 4708 -> 4807 bytes MUON/TestRecPoints.C | 19 +- 17 files changed, 179 insertions(+), 115 deletions(-) diff --git a/MUON/AliMUONLegacyClusterServer.cxx b/MUON/AliMUONLegacyClusterServer.cxx index c4ae587c2d3..f0e4a2116d5 100644 --- a/MUON/AliMUONLegacyClusterServer.cxx +++ b/MUON/AliMUONLegacyClusterServer.cxx @@ -37,6 +37,7 @@ #include "AliMUONTriggerTrackToTrackerClusters.h" #include "AliMUONVCluster.h" #include "AliMUONVClusterStore.h" +#include "AliMUONRecoParam.h" #include "AliMpArea.h" #include @@ -67,7 +68,8 @@ AliMUONLegacyClusterServer::~AliMUONLegacyClusterServer() Int_t AliMUONLegacyClusterServer::Clusterize(Int_t chamberId, AliMUONVClusterStore& clusterStore, - const AliMpArea& /*area*/) + const AliMpArea& /*area*/, + const AliMUONRecoParam* /*recoParam*/) { /// Fills clusterStore with clusters in given chamber /// diff --git a/MUON/AliMUONLegacyClusterServer.h b/MUON/AliMUONLegacyClusterServer.h index b7f8d747a43..bc4424e57e6 100644 --- a/MUON/AliMUONLegacyClusterServer.h +++ b/MUON/AliMUONLegacyClusterServer.h @@ -24,15 +24,16 @@ class AliMUONLegacyClusterServer : public AliMUONVClusterServer { public: AliMUONLegacyClusterServer(const AliMUONGeometryTransformer& transformer, - AliMUONVClusterStore* store=0x0, - Bool_t bypassSt4=kFALSE, - Bool_t bypassSt5=kFALSE); + AliMUONVClusterStore* store=0x0, + Bool_t bypassSt4=kFALSE, + Bool_t bypassSt5=kFALSE); virtual ~AliMUONLegacyClusterServer(); virtual Int_t Clusterize(Int_t chamberId, AliMUONVClusterStore& clusterStore, - const AliMpArea& area); + const AliMpArea& area, + const AliMUONRecoParam* recoParam = 0x0); virtual void UseDigits(TIter& next); diff --git a/MUON/AliMUONRawCluster.cxx b/MUON/AliMUONRawCluster.cxx index 1d4e6eebcab..49feed2f4f7 100644 --- a/MUON/AliMUONRawCluster.cxx +++ b/MUON/AliMUONRawCluster.cxx @@ -30,7 +30,6 @@ #include #include "AliMUONRawCluster.h" -#include "AliMUONConstants.h" /// \cond CLASSIMP ClassImp(AliMUONRawCluster) @@ -62,8 +61,8 @@ AliMUONRawCluster::AliMUONRawCluster() } } fNcluster[0]=fNcluster[1]=-1; - fErrXY[0] = AliMUONConstants::DefaultNonBendingReso(); - fErrXY[1] = AliMUONConstants::DefaultBendingReso(); + fErrXY[0] = FLT_MAX; + fErrXY[1] = FLT_MAX; } //____________________________________________________ diff --git a/MUON/AliMUONRawClusterV2.cxx b/MUON/AliMUONRawClusterV2.cxx index ec54b21d04a..d87ecb7d680 100644 --- a/MUON/AliMUONRawClusterV2.cxx +++ b/MUON/AliMUONRawClusterV2.cxx @@ -25,7 +25,6 @@ #include "AliMUONRawClusterV2.h" -#include "AliMUONConstants.h" #include "AliLog.h" @@ -43,8 +42,8 @@ AliMUONRawClusterV2::AliMUONRawClusterV2() fX(FLT_MAX), fY(FLT_MAX), fZ(FLT_MAX), - fErrX2(AliMUONConstants::DefaultNonBendingReso2()), - fErrY2(AliMUONConstants::DefaultBendingReso2()), + fErrX2(FLT_MAX), + fErrY2(FLT_MAX), fQ(0.), fChi2(0.), fNDigits(0), @@ -59,8 +58,8 @@ AliMUONRawClusterV2::AliMUONRawClusterV2(Int_t chamberId, Int_t detElemId, Int_t fX(FLT_MAX), fY(FLT_MAX), fZ(FLT_MAX), - fErrX2(AliMUONConstants::DefaultNonBendingReso2()), - fErrY2(AliMUONConstants::DefaultBendingReso2()), + fErrX2(FLT_MAX), + fErrY2(FLT_MAX), fQ(0.), fChi2(0.), fNDigits(0), diff --git a/MUON/AliMUONRecoParam.cxx b/MUON/AliMUONRecoParam.cxx index a5fb04f614c..92fea35da67 100644 --- a/MUON/AliMUONRecoParam.cxx +++ b/MUON/AliMUONRecoParam.cxx @@ -169,7 +169,11 @@ void AliMUONRecoParam::SetLowFluxParam() fComplementTracks = kTRUE; fImproveTracks = kTRUE; fUseSmoother = kTRUE; - for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE; + for (Int_t iCh = 0; iCh < 10; iCh++) { + fUseChamber[iCh] = kTRUE; + fDefaultNonBendingReso[iCh] = 0.144; + fDefaultBendingReso[iCh] = 0.01; + } for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE; fBypassSt45 = 0; @@ -204,7 +208,11 @@ void AliMUONRecoParam::SetHighFluxParam() fComplementTracks = kTRUE; fImproveTracks = kTRUE; fUseSmoother = kTRUE; - for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE; + for (Int_t iCh = 0; iCh < 10; iCh++) { + fUseChamber[iCh] = kTRUE; + fDefaultNonBendingReso[iCh] = 0.144; + fDefaultBendingReso[iCh] = 0.01; + } for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE; fBypassSt45 = 0; @@ -255,7 +263,11 @@ void AliMUONRecoParam::SetCosmicParam() fImproveTracks = kTRUE; fUseSmoother = kTRUE; fSaveFullClusterInESD = kTRUE; - for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE; + for (Int_t iCh = 0; iCh < 10; iCh++) { + fUseChamber[iCh] = kTRUE; + fDefaultNonBendingReso[iCh] = 0.144; + fDefaultBendingReso[iCh] = 0.01; + } for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE; fBypassSt45 = 0; @@ -392,22 +404,29 @@ void AliMUONRecoParam::Print(Option_t *option) const } while (++st < 5); if (discardedSt) cout<= %7.2f x ( pedestal sigma ) ",ChargeSigmaCut()) << endl; + cout << "chamber non bending resolution = |"; + for (Int_t iCh = 0; iCh < 10; iCh++) cout << Form(" %6.3f |",fDefaultNonBendingReso[iCh]); + cout << endl; + cout << "chamber bending resolution = |"; + for (Int_t iCh = 0; iCh < 10; iCh++) cout << Form(" %6.3f |",fDefaultBendingReso[iCh]); + cout << endl; + cout<<"\t----------------------------------------------"< class AliMUONRecoParam : public AliDetectorRecoParam { @@ -26,9 +27,9 @@ class AliMUONRecoParam : public AliDetectorRecoParam /// set the calibration mode (see GetCalibrationMode() for possible modes) void SetCalibrationMode(Option_t* mode) { fCalibrationMode = mode; fCalibrationMode.ToUpper();} - + Option_t* GetCalibrationMode() const; - + /// set the clustering (pre-clustering) mode void SetClusteringMode(Option_t* mode) {fClusteringMode = mode; fClusteringMode.ToUpper();} /// get the clustering (pre-clustering) mode @@ -100,7 +101,7 @@ class AliMUONRecoParam : public AliDetectorRecoParam Bool_t ImproveTracks() const {return fImproveTracks;} /// return the cut in sigma to apply on cluster (local chi2) during track improvement Double_t GetSigmaCutForImprovement() const {return fSigmaCutForImprovement;} - + /// set the cut in sigma to apply on track during trigger hit pattern search void SetSigmaCutForTrigger(Double_t val) {fSigmaCutForTrigger = val;} /// return the cut in sigma to apply on track during trigger hit pattern search @@ -162,81 +163,93 @@ class AliMUONRecoParam : public AliDetectorRecoParam UInt_t RequestedStationMask() const; /// set the bypassSt45 value - void BypassSt45(Bool_t st4, Bool_t st5); - + void BypassSt45(Bool_t st4, Bool_t st5); + /// return kTRUE if we should replace clusters in St 4 and 5 by generated clusters from trigger tracks Bool_t BypassSt45() const { return fBypassSt45==45; } - /// return kTRUE if we should replace clusters in St 4 by generated clusters from trigger tracks + /// return kTRUE if we should replace clusters in St 4 by generated clusters from trigger tracks Bool_t BypassSt4() const { return BypassSt45() || fBypassSt45==4 ; } - - /// return kTRUE if we should replace clusters in St 5 by generated clusters from trigger tracks + + /// return kTRUE if we should replace clusters in St 5 by generated clusters from trigger tracks Bool_t BypassSt5() const { return BypassSt45() || fBypassSt45==5 ; } - /// Set Low and High threshold for St12 HV - void SetHVSt12Limits(float low, float high) { fHVSt12Limits[0]=low; fHVSt12Limits[1]=high; } - /// Retrieve low limit for St12's HV - Float_t HVSt12LowLimit() const { return fHVSt12Limits[0]; } - /// Retrieve high limit for St12's HV - Float_t HVSt12HighLimit() const { return fHVSt12Limits[1]; } - + /// Set Low and High threshold for St12 HV + void SetHVSt12Limits(float low, float high) { fHVSt12Limits[0]=low; fHVSt12Limits[1]=high; } + /// Retrieve low limit for St12's HV + Float_t HVSt12LowLimit() const { return fHVSt12Limits[0]; } + /// Retrieve high limit for St12's HV + Float_t HVSt12HighLimit() const { return fHVSt12Limits[1]; } + /// Set Low and High threshold for St345 HV - void SetHVSt345Limits(float low, float high) { fHVSt345Limits[0]=low; fHVSt345Limits[1]=high; } - /// Retrieve low limit for St345's HV - Float_t HVSt345LowLimit() const { return fHVSt345Limits[0]; } - /// Retrieve high limit for St345's HV - Float_t HVSt345HighLimit() const { return fHVSt345Limits[1]; } - + void SetHVSt345Limits(float low, float high) { fHVSt345Limits[0]=low; fHVSt345Limits[1]=high; } + /// Retrieve low limit for St345's HV + Float_t HVSt345LowLimit() const { return fHVSt345Limits[0]; } + /// Retrieve high limit for St345's HV + Float_t HVSt345HighLimit() const { return fHVSt345Limits[1]; } + /// Set Low and High threshold for pedestal mean - void SetPedMeanLimits(float low, float high) { fPedMeanLimits[0]=low; fPedMeanLimits[1]=high; } - /// Retrieve low limit of ped mean - Float_t PedMeanLowLimit() const { return fPedMeanLimits[0]; } - /// Retrieve high limit of ped mean - Float_t PedMeanHighLimit() const { return fPedMeanLimits[1]; } - + void SetPedMeanLimits(float low, float high) { fPedMeanLimits[0]=low; fPedMeanLimits[1]=high; } + /// Retrieve low limit of ped mean + Float_t PedMeanLowLimit() const { return fPedMeanLimits[0]; } + /// Retrieve high limit of ped mean + Float_t PedMeanHighLimit() const { return fPedMeanLimits[1]; } + /// Set Low and High threshold for pedestal sigma - void SetPedSigmaLimits(float low, float high) { fPedSigmaLimits[0]=low; fPedSigmaLimits[1]=high; } - /// Retrieve low limit of ped sigma - Float_t PedSigmaLowLimit() const { return fPedSigmaLimits[0]; } - /// Retrieve high limit of ped sigma - Float_t PedSigmaHighLimit() const { return fPedSigmaLimits[1]; } - - /// Set Low and High threshold for gain a0 term - void SetGainA1Limits(float low, float high) { fGainA1Limits[0]=low; fGainA1Limits[1]=high; } - /// Retrieve low limit of a1 (linear term) gain parameter - Float_t GainA1LowLimit() const { return fGainA1Limits[0]; } - /// Retrieve high limit of a1 (linear term) gain parameter - Float_t GainA1HighLimit() const { return fGainA1Limits[1]; } - - /// Set Low and High threshold for gain a1 term - void SetGainA2Limits(float low, float high) { fGainA2Limits[0]=low; fGainA2Limits[1]=high; } - /// Retrieve low limit of a2 (quadratic term) gain parameter - Float_t GainA2LowLimit() const { return fGainA2Limits[0]; } - /// Retrieve high limit of a2 (quadratic term) gain parameter - Float_t GainA2HighLimit() const { return fGainA2Limits[1]; } - - /// Set Low and High threshold for gain threshold term - void SetGainThresLimits(float low, float high) { fGainThresLimits[0]=low; fGainThresLimits[1]=high; } - /// Retrieve low limit on threshold gain parameter - Float_t GainThresLowLimit() const { return fGainThresLimits[0]; } - /// Retrieve high limit on threshold gain parameter - Float_t GainThresHighLimit() const { return fGainThresLimits[1]; } - - /// Set the goodness mask (see AliMUONPadStatusMapMaker) - void SetPadGoodnessMask(UInt_t mask) { fPadGoodnessMask=mask; } - /// Get the goodness mask - UInt_t PadGoodnessMask() const { return fPadGoodnessMask; } - - virtual void Print(Option_t *option = "") const; + void SetPedSigmaLimits(float low, float high) { fPedSigmaLimits[0]=low; fPedSigmaLimits[1]=high; } + /// Retrieve low limit of ped sigma + Float_t PedSigmaLowLimit() const { return fPedSigmaLimits[0]; } + /// Retrieve high limit of ped sigma + Float_t PedSigmaHighLimit() const { return fPedSigmaLimits[1]; } + + /// Set Low and High threshold for gain a0 term + void SetGainA1Limits(float low, float high) { fGainA1Limits[0]=low; fGainA1Limits[1]=high; } + /// Retrieve low limit of a1 (linear term) gain parameter + Float_t GainA1LowLimit() const { return fGainA1Limits[0]; } + /// Retrieve high limit of a1 (linear term) gain parameter + Float_t GainA1HighLimit() const { return fGainA1Limits[1]; } + + /// Set Low and High threshold for gain a1 term + void SetGainA2Limits(float low, float high) { fGainA2Limits[0]=low; fGainA2Limits[1]=high; } + /// Retrieve low limit of a2 (quadratic term) gain parameter + Float_t GainA2LowLimit() const { return fGainA2Limits[0]; } + /// Retrieve high limit of a2 (quadratic term) gain parameter + Float_t GainA2HighLimit() const { return fGainA2Limits[1]; } + + /// Set Low and High threshold for gain threshold term + void SetGainThresLimits(float low, float high) { fGainThresLimits[0]=low; fGainThresLimits[1]=high; } + /// Retrieve low limit on threshold gain parameter + Float_t GainThresLowLimit() const { return fGainThresLimits[0]; } + /// Retrieve high limit on threshold gain parameter + Float_t GainThresHighLimit() const { return fGainThresLimits[1]; } + + /// Set the goodness mask (see AliMUONPadStatusMapMaker) + void SetPadGoodnessMask(UInt_t mask) { fPadGoodnessMask=mask; } + /// Get the goodness mask + UInt_t PadGoodnessMask() const { return fPadGoodnessMask; } /// Number of sigma cut we must apply when cutting on adc-ped Double_t ChargeSigmaCut() const { return fChargeSigmaCut; } - + /// Number of sigma cut we must apply when cutting on adc-ped void ChargeSigmaCut(Double_t value) { fChargeSigmaCut=value; } - -private: - void SetDefaultLimits(); + + /// Set the default non bending resolution of chamber iCh + void SetDefaultNonBendingReso(Int_t iCh, Double_t val) {if (iCh >= 0 && iCh < 10) fDefaultNonBendingReso[iCh] = val;} + /// Get the default non bending resolution of chamber iCh + Double_t GetDefaultNonBendingReso(Int_t iCh) const {return (iCh >= 0 && iCh < 10) ? fDefaultNonBendingReso[iCh] : FLT_MAX;} + /// Set the default bending resolution of chamber iCh + void SetDefaultBendingReso(Int_t iCh, Double_t val) {if (iCh >= 0 && iCh < 10) fDefaultBendingReso[iCh] = val;} + /// Get the default bending resolution of chamber iCh + Double_t GetDefaultBendingReso(Int_t iCh) const {return (iCh >= 0 && iCh < 10) ? fDefaultBendingReso[iCh] : FLT_MAX;} + + virtual void Print(Option_t *option = "") const; + + + private: + + void SetDefaultLimits(); + private: @@ -291,32 +304,36 @@ private: Bool_t fSaveFullClusterInESD; ///< kTRUE to save all cluster info (including pads) in ESD /// calibration mode: GAIN, NOGAIN, GAINCONSTANTCAPA - TString fCalibrationMode; ///<\brief calibration mode + TString fCalibrationMode; ///<\brief calibration mode - Int_t fBypassSt45; ///< non-zero to use trigger tracks to generate "fake" clusters in St 4 and 5. Can be 0, 4, 5 or 45 only + Int_t fBypassSt45; ///< non-zero to use trigger tracks to generate "fake" clusters in St 4 and 5. Can be 0, 4, 5 or 45 only Bool_t fUseChamber[10]; ///< kTRUE to use the chamber i in the tracking algorithm Bool_t fRequestStation[5]; ///< kTRUE to request at least one cluster in station i to validate the track - Double32_t fGainA1Limits[2]; ///< Low and High threshold for gain a0 parameter + Double32_t fGainA1Limits[2]; ///< Low and High threshold for gain a0 parameter Double32_t fGainA2Limits[2]; ///< Low and High threshold for gain a1 parameter Double32_t fGainThresLimits[2]; ///< Low and High threshold for gain threshold parameter Double32_t fHVSt12Limits[2]; ///< Low and High threshold for St12 HV Double32_t fHVSt345Limits[2]; ///< Low and High threshold for St345 HV Double32_t fPedMeanLimits[2]; ///< Low and High threshold for pedestal mean Double32_t fPedSigmaLimits[2]; ///< Low and High threshold for pedestal sigma - - UInt_t fPadGoodnessMask; ///< goodness mask (see AliMUONPadStatusMaker) - - Double_t fChargeSigmaCut; ///< number of sigma to cut on adc-ped + + UInt_t fPadGoodnessMask; ///< goodness mask (see AliMUONPadStatusMaker) + + Double32_t fChargeSigmaCut; ///< number of sigma to cut on adc-ped + + Double32_t fDefaultNonBendingReso[10]; ///< default chamber resolution in the non-bending direction + Double32_t fDefaultBendingReso[10]; ///< default chamber resolution in the bending direction // functions void SetLowFluxParam(); void SetHighFluxParam(); void SetCosmicParam(); - - ClassDef(AliMUONRecoParam,9) // MUON reco parameters + + + ClassDef(AliMUONRecoParam,10) // MUON reco parameters }; #endif diff --git a/MUON/AliMUONReconstructor.cxx b/MUON/AliMUONReconstructor.cxx index bbb4e15c801..50b9566f57f 100644 --- a/MUON/AliMUONReconstructor.cxx +++ b/MUON/AliMUONReconstructor.cxx @@ -525,7 +525,7 @@ AliMUONReconstructor::FillTreeR(AliMUONVTriggerStore* triggerStore, if ( ( i == 6 || i == 7 ) && GetRecoParam()->BypassSt4() ) continue; if ( ( i == 8 || i == 9 ) && GetRecoParam()->BypassSt5() ) continue; - fClusterServer->Clusterize(i,*fClusterStore,area); + fClusterServer->Clusterize(i,*fClusterStore,area,GetRecoParam()); } } diff --git a/MUON/AliMUONRefitter.cxx b/MUON/AliMUONRefitter.cxx index 66649803186..fe4b8b27fe5 100644 --- a/MUON/AliMUONRefitter.cxx +++ b/MUON/AliMUONRefitter.cxx @@ -212,7 +212,7 @@ AliMUONVClusterStore* AliMUONRefitter::ReClusterize(UInt_t trackId, UInt_t clust // re-clusterize TIter next(fESDInterface->CreateDigitIterator(trackId, clusterId)); fClusterServer->UseDigits(next); - fClusterServer->Clusterize(cluster->GetChamberId(),*clusterStore,AliMpArea()); + fClusterServer->Clusterize(cluster->GetChamberId(),*clusterStore,AliMpArea(),GetRecoParam()); return clusterStore; } @@ -246,7 +246,7 @@ AliMUONVClusterStore* AliMUONRefitter::ReClusterize(UInt_t clusterId) // re-clusterize TIter next(fESDInterface->CreateDigitIteratorInCluster(clusterId)); fClusterServer->UseDigits(next); - fClusterServer->Clusterize(cluster->GetChamberId(),*clusterStore,AliMpArea()); + fClusterServer->Clusterize(cluster->GetChamberId(),*clusterStore,AliMpArea(),GetRecoParam()); return clusterStore; } @@ -306,7 +306,7 @@ AliMUONTrack* AliMUONRefitter::RetrackFromDigits(const AliMUONTrack& track) // re-clusterize current cluster TIter nextDigit(fESDInterface->CreateDigitIterator(trackId, cluster->GetUniqueID())); fClusterServer->UseDigits(nextDigit); - Int_t nNewClusters = fClusterServer->Clusterize(cluster->GetChamberId(),*newClusterStore,AliMpArea()); + Int_t nNewClusters = fClusterServer->Clusterize(cluster->GetChamberId(),*newClusterStore,AliMpArea(),GetRecoParam()); // check that re-clusterizing succeeded if (nNewClusters == 0) { diff --git a/MUON/AliMUONSimpleClusterServer.cxx b/MUON/AliMUONSimpleClusterServer.cxx index 408610439f9..848c75ad390 100644 --- a/MUON/AliMUONSimpleClusterServer.cxx +++ b/MUON/AliMUONSimpleClusterServer.cxx @@ -28,6 +28,7 @@ #include "AliMUONVClusterFinder.h" #include "AliMUONVClusterStore.h" #include "AliMUONVDigitStore.h" +#include "AliMUONRecoParam.h" #include "AliMpArea.h" #include "AliMpDEIterator.h" #include "AliMpDEManager.h" @@ -95,7 +96,8 @@ AliMUONSimpleClusterServer::~AliMUONSimpleClusterServer() Int_t AliMUONSimpleClusterServer::Clusterize(Int_t chamberId, AliMUONVClusterStore& clusterStore, - const AliMpArea& area) + const AliMpArea& area, + const AliMUONRecoParam* recoParam) { /// Area is in absolute coordinate. If not valid, means clusterize all /// the chamber. @@ -110,6 +112,11 @@ AliMUONSimpleClusterServer::Clusterize(Int_t chamberId, return fBypass->GenerateClusters(chamberId,clusterStore); } + if (!recoParam) { + AliError("Reconstruction parameters are missing: unable to clusterize"); + return 0; + } + AliMpDEIterator it; it.First(chamberId); @@ -167,7 +174,7 @@ AliMUONSimpleClusterServer::Clusterize(Int_t chamberId, { // add new cluster to the store with information to build its ID // increment the number of clusters into the store - AliMUONVCluster* rawCluster = clusterStore.Add(AliMpDEManager::GetChamberId(detElemId), detElemId, fNCluster++); + AliMUONVCluster* rawCluster = clusterStore.Add(chamberId, detElemId, fNCluster++); ++nofAddedClusters; @@ -194,6 +201,7 @@ AliMUONSimpleClusterServer::Clusterize(Int_t chamberId, cluster->Position().X(), cluster->Position().Y(), 0, xg, yg, zg); rawCluster->SetXYZ(xg, yg, zg); + rawCluster->SetErrXY(recoParam->GetDefaultNonBendingReso(chamberId),recoParam->GetDefaultBendingReso(chamberId)); AliDebug(1,Form("Adding RawCluster detElemId %4d mult %2d charge %e (xl,yl,zl)=(%e,%e,%e) (xg,yg,zg)=(%e,%e,%e)", detElemId,rawCluster->GetNDigits(),rawCluster->GetCharge(), diff --git a/MUON/AliMUONSimpleClusterServer.h b/MUON/AliMUONSimpleClusterServer.h index 1b5ed78a681..104db1eaa65 100644 --- a/MUON/AliMUONSimpleClusterServer.h +++ b/MUON/AliMUONSimpleClusterServer.h @@ -33,7 +33,8 @@ public: Int_t Clusterize(Int_t chamberId, AliMUONVClusterStore& clusterStore, - const AliMpArea& area); + const AliMpArea& area, + const AliMUONRecoParam* recoParam = 0x0); void UseDigits(TIter& next); diff --git a/MUON/AliMUONTrackReconstructor.cxx b/MUON/AliMUONTrackReconstructor.cxx index d087b33c5eb..f903ed748b7 100644 --- a/MUON/AliMUONTrackReconstructor.cxx +++ b/MUON/AliMUONTrackReconstructor.cxx @@ -92,7 +92,7 @@ void AliMUONTrackReconstructor::MakeTrackCandidates(AliMUONVClusterStore& cluste for (Int_t i = firstChamber; i <= lastChamber; ++i ) { - if (fClusterServer && GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea()); + if (fClusterServer && GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea(), GetRecoParam()); } // Loop over stations(1..) 5 and 4 and make track candidates diff --git a/MUON/AliMUONTrackReconstructorK.cxx b/MUON/AliMUONTrackReconstructorK.cxx index d876a331c53..cb3bcc1720e 100644 --- a/MUON/AliMUONTrackReconstructorK.cxx +++ b/MUON/AliMUONTrackReconstructorK.cxx @@ -90,7 +90,7 @@ void AliMUONTrackReconstructorK::MakeTrackCandidates(AliMUONVClusterStore& clust for (Int_t i = firstChamber; i <= lastChamber; ++i ) { - if (fClusterServer && GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea()); + if (fClusterServer && GetRecoParam()->UseChamber(i)) fClusterServer->Clusterize(i, clusterStore, AliMpArea(), GetRecoParam()); } // Loop over stations(1..) 5 and 4 and make track candidates diff --git a/MUON/AliMUONTracker.cxx b/MUON/AliMUONTracker.cxx index 7a6fab25573..937f5cdaec4 100644 --- a/MUON/AliMUONTracker.cxx +++ b/MUON/AliMUONTracker.cxx @@ -51,7 +51,6 @@ #include "AliMUONTriggerTrackStoreV1.h" #include "AliMUONTriggerTrack.h" #include "AliMUONLocalTrigger.h" -#include "AliMUONVCluster.h" #include "AliMUONVClusterServer.h" #include "AliMUONVDigitStore.h" #include "AliMUONVTriggerStore.h" diff --git a/MUON/AliMUONVClusterServer.h b/MUON/AliMUONVClusterServer.h index aa7d542604c..10191fb1d89 100644 --- a/MUON/AliMUONVClusterServer.h +++ b/MUON/AliMUONVClusterServer.h @@ -18,6 +18,7 @@ class AliMUONVClusterStore; class AliMUONVTriggerTrackStore; +class AliMUONRecoParam; class AliMpArea; class TIter; @@ -30,7 +31,8 @@ public: /// Find and add clusters from a given region of a given chamber to the store. virtual Int_t Clusterize(Int_t chamberId, AliMUONVClusterStore& clusterStore, - const AliMpArea& area) = 0; + const AliMpArea& area, + const AliMUONRecoParam* recoParam = 0x0) = 0; /// Specify an iterator to loop over the digits needed to perform our job. virtual void UseDigits(TIter& next) = 0; diff --git a/MUON/AliMUONVTrackReconstructor.cxx b/MUON/AliMUONVTrackReconstructor.cxx index 074c42da549..d2b6b350868 100644 --- a/MUON/AliMUONVTrackReconstructor.cxx +++ b/MUON/AliMUONVTrackReconstructor.cxx @@ -380,7 +380,7 @@ void AliMUONVTrackReconstructor::AskForNewClustersInChamber(const AliMUONTrackPa AliMpArea area(position, dimensions); // ask to cluterize in the given area of the given chamber - fClusterServer->Clusterize(chamber, clusterStore, area); + fClusterServer->Clusterize(chamber, clusterStore, area, GetRecoParam()); } diff --git a/MUON/Calib/RecoParam/Run0_999999999_v0_s0.root b/MUON/Calib/RecoParam/Run0_999999999_v0_s0.root index 9fa9a5bece4193ba22b8cfc60e7d387995cfd357..ffbdfba3fee58769c8aedb134ca9fec4ee1aeabd 100644 GIT binary patch delta 4301 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 + // Load reconstruction parameters + AliCDBPath path("MUON","Calib","RecoParam"); + AliCDBEntry *entry=AliCDBManager::Instance()->Get(path.GetPath()); + if(entry) { + recoParam = dynamic_cast(entry->GetObject()); + entry->SetOwner(0); + AliCDBManager::Instance()->UnloadFromCache(path.GetPath()); + } + if (!recoParam) { + printf("Couldn't find RecoParam object in OCDB: create default one"); + recoParam = AliMUONRecoParam::GetLowFluxParam(); + } + recoParam->Print("FULL"); clusterFinder = new AliMUONClusterFinderMLEM(kFALSE,new AliMUONPreClusterFinder); clusterServer = new AliMUONSimpleClusterServer(clusterFinder,*transformer); } @@ -297,7 +314,7 @@ void TestRecPoints(TString baseDir=".", TString outDir=".", Float_t adcCut = 10. clusterServer->UseDigits(nextDigitTrackCut); for (Int_t ch = firstChamber; ch <= lastChamber; ++ch ){ - clusterServer->Clusterize(ch, clusterStore, AliMpArea()); + clusterServer->Clusterize(ch, clusterStore, AliMpArea(),recoParam); } TIter next(clusterStore.CreateIterator()); -- 2.43.0