X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONRecoParam.cxx;h=869eacf523932c620fd76d32457076f651a024c3;hb=c6e702f82b02baf5fbc6377032c7f47aeb5bf9c7;hp=25b28d3912c58266360edaf580a055d30cf71f9a;hpb=15d30ed49c0118c7b2efe3f68ab04ab2e5d148a1;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONRecoParam.cxx b/MUON/AliMUONRecoParam.cxx index 25b28d3912c..869eacf5239 100644 --- a/MUON/AliMUONRecoParam.cxx +++ b/MUON/AliMUONRecoParam.cxx @@ -13,6 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ +// $Id$ //----------------------------------------------------------------------------- /// \class AliMUONRecoParam @@ -25,7 +26,9 @@ #include "AliMUONRecoParam.h" +#include "AliMUONPadStatusMaker.h" +#include "AliRecoParam.h" #include "AliLog.h" #include @@ -40,6 +43,8 @@ AliMUONRecoParam::AliMUONRecoParam() fTrackingMode("KALMAN"), fMinBendingMomentum(0.), fMaxBendingMomentum(0.), + fMaxNonBendingSlope(0.), + fMaxBendingSlope(0.), fNonBendingVertexDispersion(0.), fBendingVertexDispersion(0.), fMaxNonBendingDistanceToTrack(0.), @@ -47,20 +52,38 @@ AliMUONRecoParam::AliMUONRecoParam() fSigmaCutForTracking(0.), fSigmaCutForImprovement(0.), fSigmaCutForTrigger(0.), + fStripCutForTrigger(0.), + fMaxStripAreaForTrigger(0.), fMaxNormChi2MatchTrigger(0.), + fPercentOfFullClusterInESD(10.), fCombinedClusterTrackReco(kFALSE), fTrackAllTracks(kFALSE), fRecoverTracks(kFALSE), fMakeTrackCandidatesFast(kFALSE), + fMakeMoreTrackCandidates(kFALSE), fComplementTracks(kFALSE), fImproveTracks(kFALSE), - fUseSmoother(kFALSE) + fUseSmoother(kFALSE), + fSaveFullClusterInESD(kTRUE), + fCalibrationMode("NOGAIN"), + fBypassSt45(0), + fPadGoodnessMask(0), + fChargeSigmaCut(4.0), + fRemoveConnectedTracksInSt12(kFALSE), + fMaxTriggerTracks(0), + fMaxTrackCandidates(0), + fSelectTrackOnSlope(kFALSE) { /// Constructor - SetNameTitle("MUON","MUON"); - // use the default parameters for low flux environment - SetLowFluxParam(); + SetNameTitle("Dummy","Dummy"); + for (Int_t iCh = 0; iCh < 10; iCh++) { + fUseChamber[iCh] = kTRUE; + fDefaultNonBendingReso[iCh] = 0.; + fDefaultBendingReso[iCh] = 0.; + } + for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE; + SetDefaultLimits(); } //_____________________________________________________________________________ @@ -69,6 +92,32 @@ AliMUONRecoParam::~AliMUONRecoParam() /// Destructor } +//_____________________________________________________________________________ +void +AliMUONRecoParam::BypassSt45(Bool_t st4, Bool_t st5) +{ + /// Set the bypass status + + if ( st4 && st5 ) fBypassSt45 = 45; + else if ( st4 ) fBypassSt45 = 4; + else if ( st5 ) fBypassSt45 = 5; + else fBypassSt45 = 0; +} + +//_____________________________________________________________________________ +Option_t* +AliMUONRecoParam::GetCalibrationMode() const +{ + /// Return the calibration mode. Can be : + /// NOGAIN : only do pedestal subtraction + /// GAIN : do pedestal subtraction, and apply gain correction, but with a + /// single capacitance value for all channels + /// INJECTIONGAIN : as GAIN, but with gain values taken as EMELEC factory values + /// GAINCONSTANTCAPA : as GAIN, but with a channel-dependent capacitance value + + return fCalibrationMode.Data(); +} + //_____________________________________________________________________________ AliMUONRecoParam *AliMUONRecoParam::GetLowFluxParam() { @@ -91,27 +140,69 @@ AliMUONRecoParam *AliMUONRecoParam::GetHighFluxParam() return param; } +//_____________________________________________________________________________ +AliMUONRecoParam *AliMUONRecoParam::GetCosmicParam() +{ + /// Return default reconstruction parameters for high flux environment + + AliMUONRecoParam *param = new AliMUONRecoParam(); + param->SetCosmicParam(); + + return param; +} + +//_____________________________________________________________________________ +AliMUONRecoParam *AliMUONRecoParam::GetCalibrationParam() +{ + /// Return default (dummy) reconstruction parameters for calibration environment + + AliMUONRecoParam *param = new AliMUONRecoParam(); + param->SetCalibrationParam(); + + return param; +} + + //_____________________________________________________________________________ void AliMUONRecoParam::SetLowFluxParam() { /// Set reconstruction parameters for low flux environment - fMinBendingMomentum = 0.5; + SetNameTitle("Low Flux","Low Flux"); + SetEventSpecie(AliRecoParam::kLowMult); + fMinBendingMomentum = 1.; fMaxBendingMomentum = 3000.; - fNonBendingVertexDispersion = 10.; - fBendingVertexDispersion = 10.; - fMaxNonBendingDistanceToTrack = 2.; - fMaxBendingDistanceToTrack = 2.; + fMaxNonBendingSlope = 0.3; + fMaxBendingSlope = 0.4; + fSelectTrackOnSlope = kFALSE; + fNonBendingVertexDispersion = 70.; + fBendingVertexDispersion = 70.; + fMaxNonBendingDistanceToTrack = 1.; + fMaxBendingDistanceToTrack = 1.; fSigmaCutForTracking = 6.; fSigmaCutForImprovement = 5.; fSigmaCutForTrigger = 8.; + fStripCutForTrigger = 1.; + fMaxStripAreaForTrigger = 3.; fMaxNormChi2MatchTrigger = 16.; + fCombinedClusterTrackReco = kFALSE; fTrackAllTracks = kTRUE; fRecoverTracks = kTRUE; fMakeTrackCandidatesFast = kFALSE; + fMakeMoreTrackCandidates = kFALSE; fComplementTracks = kTRUE; fImproveTracks = kTRUE; + fRemoveConnectedTracksInSt12 = kTRUE; fUseSmoother = 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; + fMaxTriggerTracks = 100; + fMaxTrackCandidates = 10000; } @@ -120,53 +211,184 @@ void AliMUONRecoParam::SetHighFluxParam() { /// Set reconstruction parameters for high flux environment - fMinBendingMomentum = 0.5; + SetNameTitle("High Flux","High Flux"); + SetEventSpecie(AliRecoParam::kHighMult); + fMinBendingMomentum = 1.; fMaxBendingMomentum = 3000.; - fNonBendingVertexDispersion = 10.; - fBendingVertexDispersion = 10.; - fMaxNonBendingDistanceToTrack = 2.; - fMaxBendingDistanceToTrack = 2.; + fMaxNonBendingSlope = 0.3; + fMaxBendingSlope = 0.4; + fSelectTrackOnSlope = kFALSE; + fNonBendingVertexDispersion = 70.; + fBendingVertexDispersion = 70.; + fMaxNonBendingDistanceToTrack = 1.; + fMaxBendingDistanceToTrack = 1.; fSigmaCutForTracking = 6.; fSigmaCutForImprovement = 5.; fSigmaCutForTrigger = 8.; + fStripCutForTrigger = 1.; + fMaxStripAreaForTrigger = 3.; + fMaxNormChi2MatchTrigger = 16.; + fCombinedClusterTrackReco = kFALSE; + fTrackAllTracks = kTRUE; + fRecoverTracks = kTRUE; + fMakeTrackCandidatesFast = kFALSE; + fMakeMoreTrackCandidates = kFALSE; + fComplementTracks = kTRUE; + fImproveTracks = kTRUE; + fRemoveConnectedTracksInSt12 = kFALSE; + fUseSmoother = 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; + fMaxTriggerTracks = 100; + fMaxTrackCandidates = 10000; + +} + +//_____________________________________________________________________________ +void AliMUONRecoParam::SetCosmicParam() +{ + /// Set reconstruction parameters for high flux environment + + SetNameTitle("Cosmic","Cosmic"); + SetEventSpecie(AliRecoParam::kCosmic); + fMinBendingMomentum = 1.; + fMaxBendingMomentum = 10000000.; + fMaxNonBendingSlope = 0.4; + fMaxBendingSlope = 0.7; + fSelectTrackOnSlope = kTRUE; + fNonBendingVertexDispersion = 200.; + fBendingVertexDispersion = 200.; + fMaxNonBendingDistanceToTrack = 1.; + fMaxBendingDistanceToTrack = 1.; + fSigmaCutForTracking = 7.; + fSigmaCutForImprovement = 6.; + fSigmaCutForTrigger = 8.; + fStripCutForTrigger = 1.5; + fMaxStripAreaForTrigger = 3.; fMaxNormChi2MatchTrigger = 16.; + fPercentOfFullClusterInESD = 100.; + fCombinedClusterTrackReco = kFALSE; fTrackAllTracks = kTRUE; fRecoverTracks = kTRUE; fMakeTrackCandidatesFast = kFALSE; + fMakeMoreTrackCandidates = kFALSE; fComplementTracks = kTRUE; fImproveTracks = kTRUE; + fRemoveConnectedTracksInSt12 = kTRUE; fUseSmoother = kTRUE; + fSaveFullClusterInESD = kTRUE; + for (Int_t iCh = 0; iCh < 10; iCh++) { + fUseChamber[iCh] = kTRUE; + fDefaultNonBendingReso[iCh] = 0.152; + fDefaultBendingReso[iCh] = 0.027; + } + fRequestStation[0] = kFALSE; + fRequestStation[1] = kFALSE; + fRequestStation[2] = kFALSE; + fRequestStation[3] = kTRUE; + fRequestStation[4] = kTRUE; + fBypassSt45 = 0; + fPadGoodnessMask = 0x400BE80; // Ped Mean is Zero | Ped Mean Too Low | Ped Mean Too High | Ped Sigma Too Low | Ped Sigma Too High | Ped is missing | HV is missing | manu occupancy too high + fMaxTriggerTracks = 100; + fMaxTrackCandidates = 10000; + SetPedMeanLimits(20, 700); + SetManuOccupancyLimits(-1.,0.01); // reject manu above occ=1% } + +//_____________________________________________________________________________ +void AliMUONRecoParam::SetCalibrationParam() +{ + /// Set (dummy) reconstruction parameters for calibration environment + + SetNameTitle("Calibration","Calibration"); + SetEventSpecie(AliRecoParam::kCalib); + + fPedMeanLimits[0] = 5000; + fPedMeanLimits[1] = 0; + + fPadGoodnessMask = 0x8C00; // Pedestal is missing | is too low | too high + +} + +//_____________________________________________________________________________ +UInt_t +AliMUONRecoParam::RequestedStationMask() const +{ + /// Get the mask of the requested station, i.e. an integer where + /// bit n is set to one if the station n was requested + + UInt_t m(0); + + for ( Int_t i = 0; i < 5; ++i ) + { + if ( RequestStation(i) ) m |= ( 1 << i ); + } + return m; +} + //_____________________________________________________________________________ void AliMUONRecoParam::Print(Option_t *option) const { /// print reconstruction parameters /// if option = FULL then print also unused parameters - cout< %5.2f",fMinBendingMomentum)<= %7.2f x ( pedestal sigma ) ",ChargeSigmaCut()) << endl; + + cout << "Occupancy limits are :" << endl; + cout << Form("%7.2f <= Manu occupancy < %7.2f",ManuOccupancyLowLimit(),ManuOccupancyHighLimit()) << endl; + cout << Form("%7.2f <= Buspatch occupancy < %7.2f",BuspatchOccupancyLowLimit(),BuspatchOccupancyHighLimit()) << endl; + cout << Form("%7.2f <= DE occupancy < %7.2f",DEOccupancyLowLimit(),DEOccupancyHighLimit()) << 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<