From 0e894e58da0a093dd283c5311297442bb77163f9 Mon Sep 17 00:00:00 2001 From: ivana Date: Fri, 4 Apr 2008 20:28:59 +0000 Subject: [PATCH] - Added protection to prevent crash when the option "BypassSt45()" is activated - Slightly modified the tracking algorithm to better reconstruct cosmic data and to run without magnetic field - New set of reconstruction parameters for cosmic data: use AliMUONRecoParam::GetCosmicParam(); (Philippe P.) --- MUON/AliMUONRecoParam.cxx | 57 +++++++++++++++++++++++++---- MUON/AliMUONRecoParam.h | 12 +++++- MUON/AliMUONTrackExtrap.cxx | 5 ++- MUON/AliMUONTrackParam.cxx | 54 +++++++++++++-------------- MUON/AliMUONTrackReconstructor.cxx | 13 +++++-- MUON/AliMUONTrackReconstructorK.cxx | 18 +++++++-- MUON/AliMUONVTrackReconstructor.cxx | 3 -- MUON/runDataReconstruction.C | 19 ++++++---- 8 files changed, 125 insertions(+), 56 deletions(-) diff --git a/MUON/AliMUONRecoParam.cxx b/MUON/AliMUONRecoParam.cxx index 616022b9a6b..6bfe46ee60a 100644 --- a/MUON/AliMUONRecoParam.cxx +++ b/MUON/AliMUONRecoParam.cxx @@ -38,6 +38,7 @@ AliMUONRecoParam::AliMUONRecoParam() : AliDetectorRecoParam(), fClusteringMode("MLEM"), fTrackingMode("KALMAN"), + fMostProbBendingMomentum(0.), fMinBendingMomentum(0.), fMaxBendingMomentum(0.), fMaxNonBendingSlope(0.), @@ -110,11 +111,23 @@ AliMUONRecoParam *AliMUONRecoParam::GetHighFluxParam() return param; } +//_____________________________________________________________________________ +AliMUONRecoParam *AliMUONRecoParam::GetCosmicParam() +{ + /// Return default reconstruction parameters for high flux environment + + AliMUONRecoParam *param = new AliMUONRecoParam(); + param->SetCosmicParam(); + + return param; +} + //_____________________________________________________________________________ void AliMUONRecoParam::SetLowFluxParam() { /// Set reconstruction parameters for low flux environment + fMostProbBendingMomentum = 2.; fMinBendingMomentum = 1.; fMaxBendingMomentum = 3000.; fMaxNonBendingSlope = 0.3; @@ -145,6 +158,7 @@ void AliMUONRecoParam::SetHighFluxParam() { /// Set reconstruction parameters for high flux environment + fMostProbBendingMomentum = 2.; fMinBendingMomentum = 1.; fMaxBendingMomentum = 3000.; fMaxNonBendingSlope = 0.3; @@ -170,6 +184,39 @@ void AliMUONRecoParam::SetHighFluxParam() } +//_____________________________________________________________________________ +void AliMUONRecoParam::SetCosmicParam() +{ + /// Set reconstruction parameters for high flux environment + + fMostProbBendingMomentum = 2.; + fMinBendingMomentum = 1.; + fMaxBendingMomentum = 10000000.; + fMaxNonBendingSlope = 0.3; + fNonBendingVertexDispersion = 10.; + fBendingVertexDispersion = 10.; + fMaxNonBendingDistanceToTrack = 10.; + fMaxBendingDistanceToTrack = 10.; + fSigmaCutForTracking = 20.; + fSigmaCutForImprovement = 20.; + fSigmaCutForTrigger = 8.; + fMaxNormChi2MatchTrigger = 16.; + fPercentOfFullClusterInESD = 100.; + fCombinedClusterTrackReco = kFALSE; + fTrackAllTracks = kTRUE; + fRecoverTracks = kTRUE; + fMakeTrackCandidatesFast = kFALSE; + fMakeMoreTrackCandidates = kFALSE; + fComplementTracks = kTRUE; + fImproveTracks = kTRUE; + fUseSmoother = kTRUE; + fSaveFullClusterInESD = kTRUE; + for (Int_t iCh = 0; iCh < 10; iCh++) fUseChamber[iCh] = kTRUE; + for (Int_t iSt = 0; iSt < 5; iSt++) fRequestStation[iSt] = kTRUE; + fBypassSt45 = kFALSE; + +} + //_____________________________________________________________________________ void AliMUONRecoParam::Print(Option_t *option) const { @@ -190,6 +237,8 @@ void AliMUONRecoParam::Print(Option_t *option) const if (fSaveFullClusterInESD) cout< 0.01) return kCorrectionFactor * (-0.0003 * simpleBValue * simpleBLength * simpleBPosition / impactParam); + else return AliMUONReconstructor::GetRecoParam()->GetMostProbBendingMomentum(); } //__________________________________________________________________________ diff --git a/MUON/AliMUONTrackParam.cxx b/MUON/AliMUONTrackParam.cxx index abcb58e3c06..42f218a4960 100644 --- a/MUON/AliMUONTrackParam.cxx +++ b/MUON/AliMUONTrackParam.cxx @@ -191,53 +191,49 @@ AliMUONTrackParam::Clear(Option_t* /*opt*/) Double_t AliMUONTrackParam::Px() const { /// return p_x from track parameters - Double_t pYZ, pZ, pX; - pYZ = 0; - if ( TMath::Abs(fParameters(4,0)) > 0 ) - pYZ = TMath::Abs(1.0 / fParameters(4,0)); - pZ = -pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) - pX = pZ * fParameters(1,0); - return pX; + Double_t pZ; + if (TMath::Abs(fParameters(4,0)) > 0) { + Double_t pYZ = (TMath::Abs(fParameters(4,0)) > 0) ? TMath::Abs(1.0 / fParameters(4,0)) : FLT_MAX; + pZ = - pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) + } else { + pZ = - FLT_MAX / TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0) + fParameters(1,0) * fParameters(1,0)); + } + return pZ * fParameters(1,0); } //__________________________________________________________________________ Double_t AliMUONTrackParam::Py() const { /// return p_y from track parameters - Double_t pYZ, pZ, pY; - pYZ = 0; - if ( TMath::Abs(fParameters(4,0)) > 0 ) - pYZ = TMath::Abs(1.0 / fParameters(4,0)); - pZ = -pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) - pY = pZ * fParameters(3,0); - return pY; + Double_t pZ; + if (TMath::Abs(fParameters(4,0)) > 0) { + Double_t pYZ = (TMath::Abs(fParameters(4,0)) > 0) ? TMath::Abs(1.0 / fParameters(4,0)) : FLT_MAX; + pZ = - pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) + } else { + pZ = - FLT_MAX / TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0) + fParameters(1,0) * fParameters(1,0)); + } + return pZ * fParameters(3,0); } //__________________________________________________________________________ Double_t AliMUONTrackParam::Pz() const { /// return p_z from track parameters - Double_t pYZ, pZ; - pYZ = 0; - if ( TMath::Abs(fParameters(4,0)) > 0 ) - pYZ = TMath::Abs(1.0 / fParameters(4,0)); - pZ = -pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) - return pZ; + if (TMath::Abs(fParameters(4,0)) > 0) { + Double_t pYZ = TMath::Abs(1.0 / fParameters(4,0)); + return - pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) + } else return - FLT_MAX / TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0) + fParameters(1,0) * fParameters(1,0)); } //__________________________________________________________________________ Double_t AliMUONTrackParam::P() const { /// return p from track parameters - Double_t pYZ, pZ, p; - pYZ = 0; - if ( TMath::Abs(fParameters(4,0)) > 0 ) - pYZ = TMath::Abs(1.0 / fParameters(4,0)); - pZ = -pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) - p = TMath::Abs(pZ) * - TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0) + fParameters(1,0) * fParameters(1,0)); - return p; - + if (TMath::Abs(fParameters(4,0)) > 0) { + Double_t pYZ = TMath::Abs(1.0 / fParameters(4,0)); + Double_t pZ = - pYZ / (TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0))); // spectro. (z<0) + return TMath::Abs(pZ) * TMath::Sqrt(1.0 + fParameters(3,0) * fParameters(3,0) + fParameters(1,0) * fParameters(1,0)); + } else return FLT_MAX; } //__________________________________________________________________________ diff --git a/MUON/AliMUONTrackReconstructor.cxx b/MUON/AliMUONTrackReconstructor.cxx index 59dc5384189..a7221970952 100644 --- a/MUON/AliMUONTrackReconstructor.cxx +++ b/MUON/AliMUONTrackReconstructor.cxx @@ -1263,9 +1263,6 @@ void AliMUONTrackReconstructor::ComplementTracks(const AliMUONVClusterStore& clu AliMUONVCluster* cluster; AliMUONTrackParam *trackParam, *nextTrackParam, copyOfTrackParam, trackParamAtCluster, bestTrackParamAtCluster; - // Remove double track to complete only "good" tracks - RemoveDoubleTracks(); - AliMUONTrack *track = (AliMUONTrack*) fRecTracksPtr->First(); while (track) { trackModified = kFALSE; @@ -1311,6 +1308,16 @@ void AliMUONTrackReconstructor::ComplementTracks(const AliMUONVClusterStore& clu // add new cluster if any if (foundOneCluster) { + + // Printout for debuging + if ((AliLog::GetDebugLevel("MUON","AliMUONTrackReconstructor") >= 1) || (AliLog::GetGlobalDebugLevel() >= 1)) { + cout << "ComplementTracks: found one cluster in chamber(1..): " << chamberId+1 << endl; + bestTrackParamAtCluster.GetClusterPtr()->Print(); + cout<SetRemovable(kTRUE); bestTrackParamAtCluster.SetRemovable(kTRUE); track->AddTrackParamAtCluster(bestTrackParamAtCluster,*(bestTrackParamAtCluster.GetClusterPtr())); diff --git a/MUON/AliMUONTrackReconstructorK.cxx b/MUON/AliMUONTrackReconstructorK.cxx index e15560e7762..71a6b8860a8 100644 --- a/MUON/AliMUONTrackReconstructorK.cxx +++ b/MUON/AliMUONTrackReconstructorK.cxx @@ -278,6 +278,11 @@ void AliMUONTrackReconstructorK::RetraceTrack(AliMUONTrack &trackCandidate, Bool // parameters at last but one cluster AliMUONTrackParam* previousTrackParam = (AliMUONTrackParam*) trackCandidate.GetTrackParamAtCluster()->Before(lastTrackParam); AliMUONVCluster* cluster1 = previousTrackParam->GetClusterPtr(); + // make sure it is on the previous chamber (can have 2 clusters in the same chamber after "ComplementTrack") + if (cluster2->GetChamberId() == cluster1->GetChamberId()) { + previousTrackParam = (AliMUONTrackParam*) trackCandidate.GetTrackParamAtCluster()->Before(previousTrackParam); + cluster1 = previousTrackParam->GetClusterPtr(); + } Double_t x1 = cluster1->GetX(); Double_t y1 = cluster1->GetY(); Double_t z1 = cluster1->GetZ(); @@ -1323,9 +1328,6 @@ void AliMUONTrackReconstructorK::ComplementTracks(const AliMUONVClusterStore& cl AliMUONVCluster *cluster; AliMUONTrackParam *trackParam, *previousTrackParam, *nextTrackParam, trackParamAtCluster, bestTrackParamAtCluster; - // Remove double track to complete only "good" tracks - RemoveDoubleTracks(); - AliMUONTrack *track = (AliMUONTrack*) fRecTracksPtr->First(); while (track) { trackModified = kFALSE; @@ -1377,6 +1379,16 @@ void AliMUONTrackReconstructorK::ComplementTracks(const AliMUONVClusterStore& cl // add new cluster if any if (foundOneCluster) { + + // Printout for debuging + if ((AliLog::GetDebugLevel("MUON","AliMUONTrackReconstructorK") >= 1) || (AliLog::GetGlobalDebugLevel() >= 1)) { + cout << "ComplementTracks: found one cluster in chamber(1..): " << chamberId+1 << endl; + bestTrackParamAtCluster.GetClusterPtr()->Print(); + cout<SetRemovable(kTRUE); bestTrackParamAtCluster.SetRemovable(kTRUE); track->AddTrackParamAtCluster(bestTrackParamAtCluster,*(bestTrackParamAtCluster.GetClusterPtr())); diff --git a/MUON/AliMUONVTrackReconstructor.cxx b/MUON/AliMUONVTrackReconstructor.cxx index 6eedfe7bb1c..7cdb2d0c0ae 100644 --- a/MUON/AliMUONVTrackReconstructor.cxx +++ b/MUON/AliMUONVTrackReconstructor.cxx @@ -913,9 +913,6 @@ void AliMUONVTrackReconstructor::ImproveTracks() AliMUONTrack *track, *nextTrack; - // Remove double track to improve only "good" tracks - RemoveDoubleTracks(); - track = (AliMUONTrack*) fRecTracksPtr->First(); while (track) { diff --git a/MUON/runDataReconstruction.C b/MUON/runDataReconstruction.C index 5b0948fe970..8b3ee6d1ea0 100644 --- a/MUON/runDataReconstruction.C +++ b/MUON/runDataReconstruction.C @@ -37,7 +37,8 @@ #endif // Data file, OCDB on Grid -TString input="alien:///alice/data/2008/LHC08a/000021931/raw/08000021931001.50.root"; +TString input="alien:///alice/data/2008/LHC08a/000024841/raw/08000024841010.10.root"; +//TString input="alien:///alice/data/2008/LHC08a/000021931/raw/08000021931001.50.root"; TString ocdbPath = "alien://folder=/alice/data/2008/LHC08a/OCDB"; // Data file, OCDB locally @@ -52,20 +53,21 @@ Int_t seed = 1234567; void runDataReconstruction(Int_t calib = 1) { TGrid::Connect("alien://"); - + AliCDBManager* man = AliCDBManager::Instance(); man->SetDefaultStorage(ocdbPath.Data()); //man->SetSpecificStorage("MUON/Calib/Mapping","local://$ALICE_ROOT"); //man->SetSpecificStorage("MUON/Calib/DDLStore","local://$ALICE_ROOT"); //man->SetSpecificStorage("MUON/Calib/Gains","local://$ALICE_ROOT"); - + gRandom->SetSeed(seed); - AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG); + // no magnetic field --> factor (4th parameter) = 0 + AliMagFMaps* field = new AliMagFMaps("Maps","Maps", 1, 0., 10., AliMagFMaps::k5kG); AliTracker::SetFieldMap(field, kFALSE); AliReconstruction *MuonRec = new AliReconstruction(); - - + + MuonRec->SetInput(input.Data()); MuonRec->SetRunVertexFinder(kFALSE); MuonRec->SetRunLocalReconstruction("MUON"); @@ -77,8 +79,9 @@ void runDataReconstruction(Int_t calib = 1) // MuonRec->SetEventRange(319,319); MuonRec->SetWriteAOD(); //MuonRec.SetEventRange(0,100); - AliMUONRecoParam *muonRecoParam = AliMUONRecoParam::GetLowFluxParam(); - muonRecoParam->CombineClusterTrackReco(kFALSE); + AliMUONRecoParam *muonRecoParam = AliMUONRecoParam::GetCosmicParam(); + muonRecoParam->BypassSt45(kTRUE); + muonRecoParam->RequestStation(2,kFALSE); TString caliboption = caliboption1; if ( calib == 2 ) caliboption = caliboption2; muonRecoParam->SetCalibrationMode(caliboption.Data()); -- 2.43.0