ROOT logo
/**************************************************************************
* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

// $Id$

//-----------------------------------------------------------------------------
/// \class AliMUONRecoParam
///
/// Class with MUON reconstruction parameters
///
///  \author Philippe Pillot
//-----------------------------------------------------------------------------



#include "AliMUONRecoParam.h"
#include "AliMUONPadStatusMaker.h"

#include "AliRecoParam.h"
#include "AliLog.h"

#include "AliCDBManager.h"
#include "AliCDBEntry.h"

#include <Riostream.h>

using std::cout;
using std::endl;
ClassImp(AliMUONRecoParam)


//_____________________________________________________________________________
AliMUONRecoParam::AliMUONRecoParam()
: AliDetectorRecoParam(),
  fClusteringMode("MLEM"),
  fTrackingMode("KALMAN"),
  fMinBendingMomentum(0.),
  fMaxBendingMomentum(0.),
  fMaxNonBendingSlope(0.),
  fMaxBendingSlope(0.),
  fNonBendingVertexDispersion(0.),
  fBendingVertexDispersion(0.),
  fMaxNonBendingDistanceToTrack(0.),
  fMaxBendingDistanceToTrack(0.),
  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),
  fSaveFullClusterInESD(kTRUE),
  fCalibrationMode("NOGAIN"),
  fBypassSt45(0),
  fPadGoodnessMask(0),
  fChargeSigmaCut(4.0),
  fRemoveConnectedTracksInSt12(kFALSE),
  fMaxTriggerTracks(0),
  fMaxTrackCandidates(0),
  fSelectTrackOnSlope(kFALSE),
  fMissingPadFractionLimit(-1),
  fFractionOfBuspatchOutsideOccupancyLimit(0),
  fAverageNoisePadCharge(0.22875),
  fClusterChargeCut(2.0),
  fEventSizeSoftLimit(35.0),
  fEventSizeHardLimit(45.0),
  fTokenLostLimit(0.0),
  fTryRecover(kFALSE),
  fDiscardMonoCathodClusters(kFALSE),
  fMonoCathodClNonBendingRes(0.),
  fMonoCathodClBendingRes(0.)
{  
  /// Constructor
  
  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();
}

//_____________________________________________________________________________
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() 
{
  /// Return default reconstruction parameters for low flux environment
  
  AliMUONRecoParam *param = new AliMUONRecoParam();
  param->SetLowFluxParam();
  
  return param;
}

//_____________________________________________________________________________
AliMUONRecoParam *AliMUONRecoParam::GetHighFluxParam() 
{
  /// Return default reconstruction parameters for high flux environment
  
  AliMUONRecoParam *param = new AliMUONRecoParam();
  param->SetHighFluxParam();
 
  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
  
  SetNameTitle("Low Flux","Low Flux");
  SetEventSpecie(AliRecoParam::kLowMult);
  fMinBendingMomentum = 0.8;
  fMaxBendingMomentum = 1.e10;
  fMaxNonBendingSlope = 0.3;
  fMaxBendingSlope = 0.4;
  fSelectTrackOnSlope = kFALSE;
  fNonBendingVertexDispersion = 70.;
  fBendingVertexDispersion = 70.;
  fMaxNonBendingDistanceToTrack = 1.;
  fMaxBendingDistanceToTrack = 1.;
  fSigmaCutForTracking = 6.;
  fSigmaCutForImprovement = 5.;
  fSigmaCutForTrigger = 4.;
  fStripCutForTrigger = 1.;
  fMaxStripAreaForTrigger = 3.;
  fMaxNormChi2MatchTrigger = fSigmaCutForTrigger * fSigmaCutForTrigger;
  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;  
  fDiscardMonoCathodClusters = kFALSE;
  fMonoCathodClNonBendingRes = 10.;
  fMonoCathodClBendingRes = 10.;
}

//_____________________________________________________________________________
void AliMUONRecoParam::SetHighFluxParam() 
{
  /// Set reconstruction parameters for high flux environment
  
  SetNameTitle("High Flux","High Flux");
  SetEventSpecie(AliRecoParam::kHighMult);
  fMinBendingMomentum = 0.8;
  fMaxBendingMomentum = 1.e10;
  fMaxNonBendingSlope = 0.3;
  fMaxBendingSlope = 0.4;
  fSelectTrackOnSlope = kFALSE;
  fNonBendingVertexDispersion = 70.;
  fBendingVertexDispersion = 70.;
  fMaxNonBendingDistanceToTrack = 1.;
  fMaxBendingDistanceToTrack = 1.;
  fSigmaCutForTracking = 6.;
  fSigmaCutForImprovement = 5.;
  fSigmaCutForTrigger = 4.;
  fStripCutForTrigger = 1.;
  fMaxStripAreaForTrigger = 3.;
  fMaxNormChi2MatchTrigger = fSigmaCutForTrigger * fSigmaCutForTrigger;
  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;
  fDiscardMonoCathodClusters = kFALSE;
  fMonoCathodClNonBendingRes = 10.;
  fMonoCathodClBendingRes = 10.;
}

//_____________________________________________________________________________
void AliMUONRecoParam::SetCosmicParam() 
{
  /// Set reconstruction parameters for high flux environment
  
  SetNameTitle("Cosmic","Cosmic");
  SetEventSpecie(AliRecoParam::kCosmic);
  fMinBendingMomentum = 0.8;
  fMaxBendingMomentum = 1.e10;
  fMaxNonBendingSlope = 0.3;
  fMaxBendingSlope = 0.4;
  fSelectTrackOnSlope = kTRUE;
  fNonBendingVertexDispersion = 170.;
  fBendingVertexDispersion = 170.;
  fMaxNonBendingDistanceToTrack = 1.;
  fMaxBendingDistanceToTrack = 1.;
  fSigmaCutForTracking = 7.;
  fSigmaCutForImprovement = 6.;
  fSigmaCutForTrigger = 4.;
  fStripCutForTrigger = 1.5;
  fMaxStripAreaForTrigger = 3.;
  fMaxNormChi2MatchTrigger = fSigmaCutForTrigger * fSigmaCutForTrigger;
  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.4;
    fDefaultBendingReso[iCh] = 0.4;
  }
  fRequestStation[0] = kTRUE;
  fRequestStation[1] = kTRUE;
  fRequestStation[2] = kTRUE;
  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;
  fDiscardMonoCathodClusters = kFALSE;
  fMonoCathodClNonBendingRes = 10.;
  fMonoCathodClBendingRes = 10.;
  
  SetPedMeanLimits(20, 700);
  SetManuOccupancyLimits(-1.,0.01); // reject manu above occ=1%

  SetBuspatchOccupancyLimits(-1,0.05);  
  SetFractionOfBuspatchOutsideOccupancyLimit(0.10); // 10 %
}


//_____________________________________________________________________________
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<<endl<<"\t------MUON Reconstruction parameters ("<<GetName()<<")------"<<endl;
  
  if (IsDefault()) cout<<"\t\t*** Parameters used by default ***"<<endl;
  
  cout << "Event Specie=" << GetEventSpecie() << endl;
  
  cout<<Form("Calibration mode = %s",fCalibrationMode.Data())<<endl;
  cout<<Form("Clustering mode = %s",fClusteringMode.Data())<<endl;
  cout<<Form("Tracking mode = %s",fTrackingMode.Data())<<endl;

	TString bypass;
	
	if ( BypassSt45() )
	{
		bypass = "stations 4 and 5";
	}
	else if ( BypassSt4() ) 
	{
		bypass = "station 4";
	}
	else if ( BypassSt5() ) 
	{
		bypass = "station 5";
	}
	
  if (bypass.Length()) cout << "Will bypass " << bypass.Data() << " (replacing real clusters by generated ones from trigger tracks)" << endl;
  
  if (fCombinedClusterTrackReco) cout<<"Combined cluster/track reconstruction: ON"<<endl;
  else cout<<"Combined cluster/track reconstruction: OFF"<<endl;
  
  if (fSaveFullClusterInESD) cout<<Form("Save all cluster info in ESD for %5.2f %% of events",fPercentOfFullClusterInESD)<<endl;
  else cout<<"Save partial cluster info in ESD"<<endl;
    
  cout<<"Selection of track candidates:"<<endl;
  if (fSelectTrackOnSlope) cout<<Form("\t- Non-bending slope < %5.2f",fMaxNonBendingSlope)<<endl;
  else cout<<"\t- Impact parameter < 3 * vertex dispersion in the non-bending direction"<<endl;
  cout<<Form("\t- if B!=0: Bending momentum > %5.2f",fMinBendingMomentum)<<endl;
  if (fSelectTrackOnSlope) cout<<Form("\t  if B==0: Bending slope < %5.2f",fMaxBendingSlope)<<endl;
  else cout<<"\t  if B==0: Impact parameter < 3 * vertex dispersion in the bending direction"<<endl;
  
  cout<<Form("Vertex dispersion (used to estimate initial bending momentum resolution) = (%5.2f,%5.2f)",fNonBendingVertexDispersion,fBendingVertexDispersion)<<endl;
  
  cout<<Form("Maximum distance to track = (%5.2f,%5.2f)",fMaxNonBendingDistanceToTrack,fMaxBendingDistanceToTrack)<<endl;
  
  cout<<Form("Sigma cut for tracking = %5.2f",fSigmaCutForTracking)<<endl;

  cout<<Form("Sigma cut for trigger hit pattern = %5.2f",fSigmaCutForTrigger)<<endl;

  cout<<Form("Cut in strips for trigger chamber efficiency = %5.2f",fStripCutForTrigger)<<endl;

  cout<<Form("Max search area in strips for trigger chamber efficiency = %5.2f",fMaxStripAreaForTrigger)<<endl;

  if (fTrackAllTracks) cout<<"Track all the possible candidates"<<endl;
  else cout<<"Track only the best candidates"<<endl;
  
  if (strstr(option,"FULL")) {
    cout<<"Make track candidates assuming linear propagation between stations 4 and 5: ";
    if (fMakeTrackCandidatesFast) cout<<"ON"<<endl;
    else cout<<"OFF"<<endl;
  } else if (fMakeTrackCandidatesFast)
    cout<<"Make track candidates assuming linear propagation between stations 4 and 5"<<endl;
  
  if (strstr(option,"FULL")) {
    cout<<"Make track candidates starting from 1 cluster in each of the stations 4 and 5: ";
    if (fMakeMoreTrackCandidates) cout<<"ON"<<endl;
    else cout<<"OFF"<<endl;
  } else if (fMakeMoreTrackCandidates)
    cout<<"Make track candidates starting from 1 cluster in each of the stations 4 and 5"<<endl;
  
  if (strstr(option,"FULL")) {
    cout<<"Try to recover tracks getting lost during tracking: ";
    if (fRecoverTracks) cout<<"ON"<<endl;
    else cout<<"OFF"<<endl;
  } else if (fRecoverTracks)
    cout<<"Try to recover tracks getting lost during tracking"<<endl;
  
  if (strstr(option,"FULL")) {
    cout<<"Try to complete the reconstructed tracks by adding missing clusters: ";
    if (fComplementTracks) cout<<"ON"<<endl;
    else cout<<"OFF"<<endl;
  } else if (fComplementTracks)
    cout<<"Try to complete the reconstructed tracks by adding missing clusters"<<endl;
  
  if (strstr(option,"FULL")) {
    cout<<"Try to improve the reconstructed tracks by removing bad clusters: ";
    if (fImproveTracks) cout<<Form("ON (sigma cut = %5.2f)",fSigmaCutForImprovement)<<endl;
    else cout<<"OFF"<<endl;
  } else if (fImproveTracks)
    cout<<Form("Try to improve the reconstructed tracks by removing bad clusters (sigma cut = %5.2f)",fSigmaCutForImprovement)<<endl;
  
  if (fRemoveConnectedTracksInSt12) cout<<"Remove tracks sharing one cluster or more in any station"<<endl;
  else cout<<"Remove tracks sharing one cluster or more in stations 3, 4 and 5"<<endl;
  
  if (strstr(option,"FULL")) {
    cout<<"Use smoother to compute final track parameters, etc, at each cluster (used for Kalman tracking only): ";
    if (fUseSmoother) cout<<"ON"<<endl;
    else cout<<"OFF"<<endl;
  } else if (fUseSmoother)
    cout<<"Use smoother to compute final track parameters, etc, at each cluster"<<endl;
  
  cout<<Form("Maximum normalized chi2 of tracking/trigger track matching = %5.2f",fMaxNormChi2MatchTrigger)<<endl;
  
  Bool_t discardedCh = kFALSE;
  Int_t ch = 0;
  do {
    if (!UseChamber(ch)) {
      if (!discardedCh) {
	cout<<"Discarded chambers(1..): "<<ch+1;
	discardedCh = kTRUE;
      }
      else cout<<" "<<ch+1;
    }
  } while (++ch < 10);
  if (discardedCh) cout<<endl;
  
  Bool_t discardedSt = kFALSE;
  Int_t st = 0;
  do {
    if (!RequestStation(st)) {
      if (!discardedSt) {
	cout<<"Not requested stations(1..): "<<st+1;
	discardedSt = kTRUE;
      }
      else cout<<" "<<st+1;
    }
  } while (++st < 5);
  if (discardedSt) cout<<endl;
  
  cout << Form("Pad goodness policy mask is 0x%x",PadGoodnessMask()) << endl;
  cout << "Which means we reject pads having the condition = " <<
  AliMUONPadStatusMaker::AsCondition(PadGoodnessMask()).Data() << endl;
  
  cout << "The pad limits we are using are :" << endl;
  
  for ( int ichamber = 0; ichamber < 10; ++ichamber ) 
  {
    cout << Form("HV Ch %d must be >= %5.2f",ichamber,HVLimit(ichamber)) << endl;
  }

  cout << Form("%7.2f <= Pedestal mean <= %7.2f",PedMeanLowLimit(),PedMeanHighLimit()) << endl;
  cout << Form("%7.2f <= Pedestal sigma <= %7.2f",PedSigmaLowLimit(),PedSigmaHighLimit()) << endl;
  cout << Form("%e <= Gain linear term <= %e",GainA1LowLimit(),GainA1HighLimit()) << endl;
  cout << Form("%e <= Gain quadratic term <= %e",GainA2LowLimit(),GainA2HighLimit()) << endl;
  cout << Form("%5.0f <= Gain threshold term <= %5.0f",GainThresLowLimit(),GainThresHighLimit()) << endl;
    
  cout << Form("And we cut on charge >= %7.2f x ( pedestal sigma ) ",ChargeSigmaCut()) << endl;
  
  cout << "Occupancy limits are :" << endl;
  
  cout << Form("%e <= Manu occupancy < %7.3f",ManuOccupancyLowLimit(),ManuOccupancyHighLimit()) << endl;
  cout << Form("%e <= Buspatch occupancy < %7.3f",BuspatchOccupancyLowLimit(),BuspatchOccupancyHighLimit()) << endl;
  cout << Form("%e <= DE occupancy < %7.3f",DEOccupancyLowLimit(),DEOccupancyHighLimit()) << endl;
  
  cout << "'QAChecker' limits" << endl;  
  cout << Form("FractionOfBuspatchOutsideOccupancyLimit = %5.2f %%",FractionOfBuspatchOutsideOccupancyLimit()*100.0) << endl;
  cout << Form("Event size limit = %5.2f KB/event (soft) and %5.2f KB/event (hard)",fEventSizeSoftLimit,fEventSizeHardLimit) << endl;
  if ( fTokenLostLimit > 0 )
  {
    cout << Form("We tolerate up to %5.2f %% token lost errors per event",fTokenLostLimit) << endl;
  }
  else
  {
    cout << "We dot not tolerate any token lost error !" << 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<<Form("maximum number of trigger tracks above which the tracking is cancelled = %d",fMaxTriggerTracks)<<endl;
  cout<<Form("maximum number of track candidates above which the tracking is abandonned = %d",fMaxTrackCandidates)<<endl;

  cout << Form("The average noise pad charge is assumed to be %7.2f fC",AverageNoisePadCharge()) << endl;
  cout << Form("and clusters below %5.2f times this noise charge (i.e. %7.2f fC) are discarded",
               ClusterChargeCut(),ClusterChargeCut()*AverageNoisePadCharge()) << endl;
  cout << Form("Note that LowestPadCharge is then %7.2f fC",LowestPadCharge()) << endl;
  
  if (strstr(option,"FULL")) {
    cout<<"Try to improve the reconstructed tracks by changing the resolution of mono-cathod clusters: ";
    if (fDiscardMonoCathodClusters) cout<<Form("ON (res = %6.3f, %6.3f)",fMonoCathodClNonBendingRes,fMonoCathodClBendingRes)<<endl;
    else cout<<"OFF"<<endl;
  } else if (fDiscardMonoCathodClusters)
    cout<<Form("Try to improve the reconstructed tracks by changing the resolution of mono-cathod clusters (res = %6.3f, %6.3f)",
	       fMonoCathodClNonBendingRes,fMonoCathodClBendingRes)<<endl;
  
  if (TryRecover())
  {
    cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
    cout << "!!! WILL TRY TO RECOVER CORRUPTED RAW DATA !!!" << endl;
    cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;    
  }
  cout<<"\t-----------------------------------------------------"<<endl<<endl;
  
}

//_____________________________________________________________________________
void
AliMUONRecoParam::SetHVLimit(Int_t chamberId, Double_t value)
{
  /// Set the HV limit for a given chamber (or all chambers 
  /// if chamberId==-1
  
  if ( chamberId == -1 ) 
  {
    for ( Int_t i = 0; i < 10; ++i ) 
    {
      fHVLimit[i] = value;
    }
  }
  else if ( chamberId >= 0 && chamberId < 10 ) 
  {
    fHVLimit[chamberId]=value;
  }
  else
  {
    AliError(Form("chamberId = %d is not a valid chamberId",chamberId));
  }
}

//_____________________________________________________________________________
Double_t AliMUONRecoParam::HVLimit(Int_t chamberId) const
{
  /// Get the HV limit for a given chamber
  if ( chamberId >= 0 && chamberId < 10 )
  {
    return fHVLimit[chamberId];
  }
  AliError(Form("chamberId = %d is not a valid chamberId",chamberId));

  return 0.0;
}

//_____________________________________________________________________________
void
AliMUONRecoParam::SetDefaultLimits()
{
	/// Set the default limits and pad goodness policy

  fHVSt12Limits[0]=1500; // kept for backward compatibility only
	fHVSt12Limits[1]=2000; // kept for backward compatibility only
	fHVSt345Limits[0]=1500; // kept for backward compatibility only
	fHVSt345Limits[1]=2000; // kept for backward compatibility only
  
  SetHVLimit(-1,1590); // this one is the real HV limit used now
  
	fPedMeanLimits[0] = 20;
	fPedMeanLimits[1] = 1024;
	
	fPedSigmaLimits[0] = 0.6;
	fPedSigmaLimits[1] = 100;

	fGainA1Limits[0] = 0.1;
	fGainA1Limits[1] = 10;

	fGainA2Limits[0] = -1E30;
	fGainA2Limits[1] = 1E30;
	
	fGainThresLimits[0] = 0;
	fGainThresLimits[1] = 4095;
	
	fPadGoodnessMask = 0x8080; // Ped is missing | HV is missing

  fManuOccupancyLimits[0] = -1.0; 
  fManuOccupancyLimits[1] = 1.0;

  fBuspatchOccupancyLimits[0] = 1E-6; 
  fBuspatchOccupancyLimits[1] = 1.0;

  fDEOccupancyLimits[0] = -1.0; 
  fDEOccupancyLimits[1] = 1.0;

  fMissingPadFractionLimit = -1; // DEPRECATED
  fFractionOfBuspatchOutsideOccupancyLimit = 0.05; // 5 % 

  ChargeSigmaCut(4.0); // pad with charge < 4.0 x sigma will be removed (where sigma is the actual noise of that very pad, i.e. not the average)
  
  AverageNoisePadCharge(0.22875); // 0.22875 coulombs ~ 1.5 ADC channels

  ClusterChargeCut(2.0); // will cut cluster below 2.0 x LowestPadCharge()
  
  SetEventSizeLimits(35.0,45.0);
  
  SetTokenLostLimit(0.0);
  
  fTryRecover = kFALSE;
}


//-----------------------------------------------------------------------
TObjArray* 
AliMUONRecoParam::Create(const char* settings)
{
  /// Create pre-defined recoparam array, according to settings.
  /// settings is case-insensitive.
  ///
  /// Currently defined are :
  ///
  /// "cosmics" :
  ///      Cosmic (default)
  ///      Calibration
  /// "ppideal"
  ///      LowFlux (default)
  ///      Calibration
  /// "ppreal"
  ///      LowFlux (modified to reconstruct real p-p data)
  ///      Calibration
  /// "pprealsim"
  ///      LowFlux (modified to reconstruct realistic p-p simulation)
  ///      Calibration
  /// "pbpbreal"
  ///      HighFlux (modified to reconstruct real Pb-Pb data)
  ///      Calibration
  
  AliMUONRecoParam* param(0x0);
  
  AliRecoParam::EventSpecie_t defaultParam = AliRecoParam::kLowMult;
  
  TString stype(settings);
  stype.ToLower();
  
  if ( stype == "cosmics" )
  {
    // set parameters for cosmic runs
    param = AliMUONRecoParam::GetCosmicParam();
    defaultParam = AliRecoParam::kCosmic;
  }
  else if ( stype == "ppideal" ) 
  {
    // set default lowFlux parameters
    param = AliMUONRecoParam::GetLowFluxParam();
  }
  else if ( stype == "ppreal" || stype == "pprealsim" || stype == "pprealnofield" ) 
  {      
    // common parameters for p-p data and realistic p-p simu
    param = AliMUONRecoParam::GetLowFluxParam();
    param->SaveFullClusterInESD(kTRUE, 100.);
    for (Int_t iCh=0; iCh<10; iCh++) 
    {
      param->SetDefaultNonBendingReso(iCh,0.4);
      param->SetDefaultBendingReso(iCh,0.4);
    }
    param->SetSigmaCutForTracking(7.);
    param->SetStripCutForTrigger(1.5);
    param->SetSigmaCutForTrigger(6.);
    param->ImproveTracks(kTRUE, 6.);
    param->SetPedMeanLimits(20, 700);
    param->SetManuOccupancyLimits(-1.,0.015);
    param->SetBuspatchOccupancyLimits(-1.,0.05);  
    param->SetFractionOfBuspatchOutsideOccupancyLimit(0.05); // 5 %
    param->SetEventSizeLimits(45., 65.);
    param->SetHVLimit(0,1550);
    param->SetHVLimit(1,1550);
    param->SetHVLimit(2,1550);
    param->SetHVLimit(3,1550);
    
    // specific parameters for p-p data or realistic p-p simu
    if ( stype == "ppreal" || stype == "pprealnofield" )
    {
      param->SetPadGoodnessMask(0x400BE9B);
    }
    else
    {
      param->SetPadGoodnessMask(0x8080);      
    }
    
    if ( stype == "pprealnofield" )
    {
      param->TryRecover(kTRUE);
    }
  }
  else if ( stype == "pbpbreal" || stype == "pbpbrealsim" ) 
  {      
    // common parameters for Pb-Pb data and realistic Pb-Pb simu
    param = AliMUONRecoParam::GetHighFluxParam();
    defaultParam = AliRecoParam::kHighMult;
    param->SaveFullClusterInESD(kTRUE, 100.);
    for (Int_t iCh=0; iCh<10; iCh++) 
    {
      param->SetDefaultNonBendingReso(iCh,0.2);
      param->SetDefaultBendingReso(iCh,0.2);
    }
    param->SetSigmaCutForTracking(5.);
    param->SetStripCutForTrigger(1.5);
    param->SetSigmaCutForTrigger(4.);
//    param->MakeMoreTrackCandidates(kTRUE);
    param->ImproveTracks(kTRUE, 4.);
    param->SetPedMeanLimits(20, 700);
    param->SetManuOccupancyLimits(-1.,0.03);
    param->SetBuspatchOccupancyLimits(-1.,0.1); // 10 % (this cut not used for the reco anyway)
    param->SetFractionOfBuspatchOutsideOccupancyLimit(0.05); // 5 %
    param->SetEventSizeLimits(100., 150.);
    param->DiscardMonoCathodClusters(kTRUE, 10., 10.);
    
    // specific parameters for Pb-Pb data or realistic Pb-Pb simu
    if ( stype == "pbpbreal" )
    {
      param->SetPadGoodnessMask(0x400BE9B);
    }
    else
    {
      param->SetPadGoodnessMask(0x8080);      
    }
  }
  else
  {
    AliErrorClass("Unknown settings !");
    return 0x0;
  }

  TObjArray* recoParams = new TObjArray;

  recoParams->AddLast(param);
  
  // set (dummy) parameters for calibration runs
  param = AliMUONRecoParam::GetCalibrationParam();
  recoParams->AddLast(param);
  
  // set parameters for Pb-Pb runs
  // param = AliMUONRecoParam::GetHighFluxParam();
  // recoParams.AddLast(param);
  
  // identify default parameters (exit if identification failed)
  Bool_t defaultIsSet = kFALSE;
  TIter next(recoParams);
  while ( (param = static_cast<AliMUONRecoParam*>(next())) ) 
  {
    if (param->GetEventSpecie() == defaultParam) 
    {
      param->SetAsDefault();
      defaultIsSet = kTRUE;
    }
    param->Print("FULL");
  }
  
  if (!defaultIsSet) 
  {
    AliErrorClass("The default reconstruction parameters are not set! Exiting...");
    return 0x0;
  }  
  
  return recoParams;
}

//______________________________________________________________________________
void 
AliMUONRecoParam::Show(Int_t runNumber, const char* ocdb)
{
  /// Show what we have in the designated OCDB for that run, as far as RecoParams are concerned
  
  AliCDBManager::Instance()->SetDefaultStorage(ocdb);
  AliCDBManager::Instance()->SetRun(runNumber);
  
  AliCDBEntry* entry = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam");
  
  if (!entry) return;
  
  TObject* o = entry->GetObject();
  
  if ( o->IsA() == TObjArray::Class() ) 
  {
    TObjArray* array = static_cast<TObjArray*>(o);
    for ( Int_t i = 0; i <= array->GetLast(); ++i ) 
    {
      AliDetectorRecoParam* p = static_cast<AliDetectorRecoParam*>(array->At(i));
      cout << Form("array[%d]=%s %s %s",i,
                   p ? p->ClassName() : "",
                   p ? AliRecoParam::GetEventSpecieName(AliRecoParam::Convert(p->GetEventSpecie())) :"",
                   p ? ( p->IsDefault() ? "default" : "") : "" ) << endl;
    }
    cout << "=========== dumps below ====== " << endl;
    
    for ( Int_t i = 0; i <= array->GetLast(); ++i ) 
    {
      AliDetectorRecoParam* p = static_cast<AliDetectorRecoParam*>(array->At(i));
      if ( p ) p->Print("FULL");
    }
  }
  else
  {
    o->Print();
  }
}
 AliMUONRecoParam.cxx:1
 AliMUONRecoParam.cxx:2
 AliMUONRecoParam.cxx:3
 AliMUONRecoParam.cxx:4
 AliMUONRecoParam.cxx:5
 AliMUONRecoParam.cxx:6
 AliMUONRecoParam.cxx:7
 AliMUONRecoParam.cxx:8
 AliMUONRecoParam.cxx:9
 AliMUONRecoParam.cxx:10
 AliMUONRecoParam.cxx:11
 AliMUONRecoParam.cxx:12
 AliMUONRecoParam.cxx:13
 AliMUONRecoParam.cxx:14
 AliMUONRecoParam.cxx:15
 AliMUONRecoParam.cxx:16
 AliMUONRecoParam.cxx:17
 AliMUONRecoParam.cxx:18
 AliMUONRecoParam.cxx:19
 AliMUONRecoParam.cxx:20
 AliMUONRecoParam.cxx:21
 AliMUONRecoParam.cxx:22
 AliMUONRecoParam.cxx:23
 AliMUONRecoParam.cxx:24
 AliMUONRecoParam.cxx:25
 AliMUONRecoParam.cxx:26
 AliMUONRecoParam.cxx:27
 AliMUONRecoParam.cxx:28
 AliMUONRecoParam.cxx:29
 AliMUONRecoParam.cxx:30
 AliMUONRecoParam.cxx:31
 AliMUONRecoParam.cxx:32
 AliMUONRecoParam.cxx:33
 AliMUONRecoParam.cxx:34
 AliMUONRecoParam.cxx:35
 AliMUONRecoParam.cxx:36
 AliMUONRecoParam.cxx:37
 AliMUONRecoParam.cxx:38
 AliMUONRecoParam.cxx:39
 AliMUONRecoParam.cxx:40
 AliMUONRecoParam.cxx:41
 AliMUONRecoParam.cxx:42
 AliMUONRecoParam.cxx:43
 AliMUONRecoParam.cxx:44
 AliMUONRecoParam.cxx:45
 AliMUONRecoParam.cxx:46
 AliMUONRecoParam.cxx:47
 AliMUONRecoParam.cxx:48
 AliMUONRecoParam.cxx:49
 AliMUONRecoParam.cxx:50
 AliMUONRecoParam.cxx:51
 AliMUONRecoParam.cxx:52
 AliMUONRecoParam.cxx:53
 AliMUONRecoParam.cxx:54
 AliMUONRecoParam.cxx:55
 AliMUONRecoParam.cxx:56
 AliMUONRecoParam.cxx:57
 AliMUONRecoParam.cxx:58
 AliMUONRecoParam.cxx:59
 AliMUONRecoParam.cxx:60
 AliMUONRecoParam.cxx:61
 AliMUONRecoParam.cxx:62
 AliMUONRecoParam.cxx:63
 AliMUONRecoParam.cxx:64
 AliMUONRecoParam.cxx:65
 AliMUONRecoParam.cxx:66
 AliMUONRecoParam.cxx:67
 AliMUONRecoParam.cxx:68
 AliMUONRecoParam.cxx:69
 AliMUONRecoParam.cxx:70
 AliMUONRecoParam.cxx:71
 AliMUONRecoParam.cxx:72
 AliMUONRecoParam.cxx:73
 AliMUONRecoParam.cxx:74
 AliMUONRecoParam.cxx:75
 AliMUONRecoParam.cxx:76
 AliMUONRecoParam.cxx:77
 AliMUONRecoParam.cxx:78
 AliMUONRecoParam.cxx:79
 AliMUONRecoParam.cxx:80
 AliMUONRecoParam.cxx:81
 AliMUONRecoParam.cxx:82
 AliMUONRecoParam.cxx:83
 AliMUONRecoParam.cxx:84
 AliMUONRecoParam.cxx:85
 AliMUONRecoParam.cxx:86
 AliMUONRecoParam.cxx:87
 AliMUONRecoParam.cxx:88
 AliMUONRecoParam.cxx:89
 AliMUONRecoParam.cxx:90
 AliMUONRecoParam.cxx:91
 AliMUONRecoParam.cxx:92
 AliMUONRecoParam.cxx:93
 AliMUONRecoParam.cxx:94
 AliMUONRecoParam.cxx:95
 AliMUONRecoParam.cxx:96
 AliMUONRecoParam.cxx:97
 AliMUONRecoParam.cxx:98
 AliMUONRecoParam.cxx:99
 AliMUONRecoParam.cxx:100
 AliMUONRecoParam.cxx:101
 AliMUONRecoParam.cxx:102
 AliMUONRecoParam.cxx:103
 AliMUONRecoParam.cxx:104
 AliMUONRecoParam.cxx:105
 AliMUONRecoParam.cxx:106
 AliMUONRecoParam.cxx:107
 AliMUONRecoParam.cxx:108
 AliMUONRecoParam.cxx:109
 AliMUONRecoParam.cxx:110
 AliMUONRecoParam.cxx:111
 AliMUONRecoParam.cxx:112
 AliMUONRecoParam.cxx:113
 AliMUONRecoParam.cxx:114
 AliMUONRecoParam.cxx:115
 AliMUONRecoParam.cxx:116
 AliMUONRecoParam.cxx:117
 AliMUONRecoParam.cxx:118
 AliMUONRecoParam.cxx:119
 AliMUONRecoParam.cxx:120
 AliMUONRecoParam.cxx:121
 AliMUONRecoParam.cxx:122
 AliMUONRecoParam.cxx:123
 AliMUONRecoParam.cxx:124
 AliMUONRecoParam.cxx:125
 AliMUONRecoParam.cxx:126
 AliMUONRecoParam.cxx:127
 AliMUONRecoParam.cxx:128
 AliMUONRecoParam.cxx:129
 AliMUONRecoParam.cxx:130
 AliMUONRecoParam.cxx:131
 AliMUONRecoParam.cxx:132
 AliMUONRecoParam.cxx:133
 AliMUONRecoParam.cxx:134
 AliMUONRecoParam.cxx:135
 AliMUONRecoParam.cxx:136
 AliMUONRecoParam.cxx:137
 AliMUONRecoParam.cxx:138
 AliMUONRecoParam.cxx:139
 AliMUONRecoParam.cxx:140
 AliMUONRecoParam.cxx:141
 AliMUONRecoParam.cxx:142
 AliMUONRecoParam.cxx:143
 AliMUONRecoParam.cxx:144
 AliMUONRecoParam.cxx:145
 AliMUONRecoParam.cxx:146
 AliMUONRecoParam.cxx:147
 AliMUONRecoParam.cxx:148
 AliMUONRecoParam.cxx:149
 AliMUONRecoParam.cxx:150
 AliMUONRecoParam.cxx:151
 AliMUONRecoParam.cxx:152
 AliMUONRecoParam.cxx:153
 AliMUONRecoParam.cxx:154
 AliMUONRecoParam.cxx:155
 AliMUONRecoParam.cxx:156
 AliMUONRecoParam.cxx:157
 AliMUONRecoParam.cxx:158
 AliMUONRecoParam.cxx:159
 AliMUONRecoParam.cxx:160
 AliMUONRecoParam.cxx:161
 AliMUONRecoParam.cxx:162
 AliMUONRecoParam.cxx:163
 AliMUONRecoParam.cxx:164
 AliMUONRecoParam.cxx:165
 AliMUONRecoParam.cxx:166
 AliMUONRecoParam.cxx:167
 AliMUONRecoParam.cxx:168
 AliMUONRecoParam.cxx:169
 AliMUONRecoParam.cxx:170
 AliMUONRecoParam.cxx:171
 AliMUONRecoParam.cxx:172
 AliMUONRecoParam.cxx:173
 AliMUONRecoParam.cxx:174
 AliMUONRecoParam.cxx:175
 AliMUONRecoParam.cxx:176
 AliMUONRecoParam.cxx:177
 AliMUONRecoParam.cxx:178
 AliMUONRecoParam.cxx:179
 AliMUONRecoParam.cxx:180
 AliMUONRecoParam.cxx:181
 AliMUONRecoParam.cxx:182
 AliMUONRecoParam.cxx:183
 AliMUONRecoParam.cxx:184
 AliMUONRecoParam.cxx:185
 AliMUONRecoParam.cxx:186
 AliMUONRecoParam.cxx:187
 AliMUONRecoParam.cxx:188
 AliMUONRecoParam.cxx:189
 AliMUONRecoParam.cxx:190
 AliMUONRecoParam.cxx:191
 AliMUONRecoParam.cxx:192
 AliMUONRecoParam.cxx:193
 AliMUONRecoParam.cxx:194
 AliMUONRecoParam.cxx:195
 AliMUONRecoParam.cxx:196
 AliMUONRecoParam.cxx:197
 AliMUONRecoParam.cxx:198
 AliMUONRecoParam.cxx:199
 AliMUONRecoParam.cxx:200
 AliMUONRecoParam.cxx:201
 AliMUONRecoParam.cxx:202
 AliMUONRecoParam.cxx:203
 AliMUONRecoParam.cxx:204
 AliMUONRecoParam.cxx:205
 AliMUONRecoParam.cxx:206
 AliMUONRecoParam.cxx:207
 AliMUONRecoParam.cxx:208
 AliMUONRecoParam.cxx:209
 AliMUONRecoParam.cxx:210
 AliMUONRecoParam.cxx:211
 AliMUONRecoParam.cxx:212
 AliMUONRecoParam.cxx:213
 AliMUONRecoParam.cxx:214
 AliMUONRecoParam.cxx:215
 AliMUONRecoParam.cxx:216
 AliMUONRecoParam.cxx:217
 AliMUONRecoParam.cxx:218
 AliMUONRecoParam.cxx:219
 AliMUONRecoParam.cxx:220
 AliMUONRecoParam.cxx:221
 AliMUONRecoParam.cxx:222
 AliMUONRecoParam.cxx:223
 AliMUONRecoParam.cxx:224
 AliMUONRecoParam.cxx:225
 AliMUONRecoParam.cxx:226
 AliMUONRecoParam.cxx:227
 AliMUONRecoParam.cxx:228
 AliMUONRecoParam.cxx:229
 AliMUONRecoParam.cxx:230
 AliMUONRecoParam.cxx:231
 AliMUONRecoParam.cxx:232
 AliMUONRecoParam.cxx:233
 AliMUONRecoParam.cxx:234
 AliMUONRecoParam.cxx:235
 AliMUONRecoParam.cxx:236
 AliMUONRecoParam.cxx:237
 AliMUONRecoParam.cxx:238
 AliMUONRecoParam.cxx:239
 AliMUONRecoParam.cxx:240
 AliMUONRecoParam.cxx:241
 AliMUONRecoParam.cxx:242
 AliMUONRecoParam.cxx:243
 AliMUONRecoParam.cxx:244
 AliMUONRecoParam.cxx:245
 AliMUONRecoParam.cxx:246
 AliMUONRecoParam.cxx:247
 AliMUONRecoParam.cxx:248
 AliMUONRecoParam.cxx:249
 AliMUONRecoParam.cxx:250
 AliMUONRecoParam.cxx:251
 AliMUONRecoParam.cxx:252
 AliMUONRecoParam.cxx:253
 AliMUONRecoParam.cxx:254
 AliMUONRecoParam.cxx:255
 AliMUONRecoParam.cxx:256
 AliMUONRecoParam.cxx:257
 AliMUONRecoParam.cxx:258
 AliMUONRecoParam.cxx:259
 AliMUONRecoParam.cxx:260
 AliMUONRecoParam.cxx:261
 AliMUONRecoParam.cxx:262
 AliMUONRecoParam.cxx:263
 AliMUONRecoParam.cxx:264
 AliMUONRecoParam.cxx:265
 AliMUONRecoParam.cxx:266
 AliMUONRecoParam.cxx:267
 AliMUONRecoParam.cxx:268
 AliMUONRecoParam.cxx:269
 AliMUONRecoParam.cxx:270
 AliMUONRecoParam.cxx:271
 AliMUONRecoParam.cxx:272
 AliMUONRecoParam.cxx:273
 AliMUONRecoParam.cxx:274
 AliMUONRecoParam.cxx:275
 AliMUONRecoParam.cxx:276
 AliMUONRecoParam.cxx:277
 AliMUONRecoParam.cxx:278
 AliMUONRecoParam.cxx:279
 AliMUONRecoParam.cxx:280
 AliMUONRecoParam.cxx:281
 AliMUONRecoParam.cxx:282
 AliMUONRecoParam.cxx:283
 AliMUONRecoParam.cxx:284
 AliMUONRecoParam.cxx:285
 AliMUONRecoParam.cxx:286
 AliMUONRecoParam.cxx:287
 AliMUONRecoParam.cxx:288
 AliMUONRecoParam.cxx:289
 AliMUONRecoParam.cxx:290
 AliMUONRecoParam.cxx:291
 AliMUONRecoParam.cxx:292
 AliMUONRecoParam.cxx:293
 AliMUONRecoParam.cxx:294
 AliMUONRecoParam.cxx:295
 AliMUONRecoParam.cxx:296
 AliMUONRecoParam.cxx:297
 AliMUONRecoParam.cxx:298
 AliMUONRecoParam.cxx:299
 AliMUONRecoParam.cxx:300
 AliMUONRecoParam.cxx:301
 AliMUONRecoParam.cxx:302
 AliMUONRecoParam.cxx:303
 AliMUONRecoParam.cxx:304
 AliMUONRecoParam.cxx:305
 AliMUONRecoParam.cxx:306
 AliMUONRecoParam.cxx:307
 AliMUONRecoParam.cxx:308
 AliMUONRecoParam.cxx:309
 AliMUONRecoParam.cxx:310
 AliMUONRecoParam.cxx:311
 AliMUONRecoParam.cxx:312
 AliMUONRecoParam.cxx:313
 AliMUONRecoParam.cxx:314
 AliMUONRecoParam.cxx:315
 AliMUONRecoParam.cxx:316
 AliMUONRecoParam.cxx:317
 AliMUONRecoParam.cxx:318
 AliMUONRecoParam.cxx:319
 AliMUONRecoParam.cxx:320
 AliMUONRecoParam.cxx:321
 AliMUONRecoParam.cxx:322
 AliMUONRecoParam.cxx:323
 AliMUONRecoParam.cxx:324
 AliMUONRecoParam.cxx:325
 AliMUONRecoParam.cxx:326
 AliMUONRecoParam.cxx:327
 AliMUONRecoParam.cxx:328
 AliMUONRecoParam.cxx:329
 AliMUONRecoParam.cxx:330
 AliMUONRecoParam.cxx:331
 AliMUONRecoParam.cxx:332
 AliMUONRecoParam.cxx:333
 AliMUONRecoParam.cxx:334
 AliMUONRecoParam.cxx:335
 AliMUONRecoParam.cxx:336
 AliMUONRecoParam.cxx:337
 AliMUONRecoParam.cxx:338
 AliMUONRecoParam.cxx:339
 AliMUONRecoParam.cxx:340
 AliMUONRecoParam.cxx:341
 AliMUONRecoParam.cxx:342
 AliMUONRecoParam.cxx:343
 AliMUONRecoParam.cxx:344
 AliMUONRecoParam.cxx:345
 AliMUONRecoParam.cxx:346
 AliMUONRecoParam.cxx:347
 AliMUONRecoParam.cxx:348
 AliMUONRecoParam.cxx:349
 AliMUONRecoParam.cxx:350
 AliMUONRecoParam.cxx:351
 AliMUONRecoParam.cxx:352
 AliMUONRecoParam.cxx:353
 AliMUONRecoParam.cxx:354
 AliMUONRecoParam.cxx:355
 AliMUONRecoParam.cxx:356
 AliMUONRecoParam.cxx:357
 AliMUONRecoParam.cxx:358
 AliMUONRecoParam.cxx:359
 AliMUONRecoParam.cxx:360
 AliMUONRecoParam.cxx:361
 AliMUONRecoParam.cxx:362
 AliMUONRecoParam.cxx:363
 AliMUONRecoParam.cxx:364
 AliMUONRecoParam.cxx:365
 AliMUONRecoParam.cxx:366
 AliMUONRecoParam.cxx:367
 AliMUONRecoParam.cxx:368
 AliMUONRecoParam.cxx:369
 AliMUONRecoParam.cxx:370
 AliMUONRecoParam.cxx:371
 AliMUONRecoParam.cxx:372
 AliMUONRecoParam.cxx:373
 AliMUONRecoParam.cxx:374
 AliMUONRecoParam.cxx:375
 AliMUONRecoParam.cxx:376
 AliMUONRecoParam.cxx:377
 AliMUONRecoParam.cxx:378
 AliMUONRecoParam.cxx:379
 AliMUONRecoParam.cxx:380
 AliMUONRecoParam.cxx:381
 AliMUONRecoParam.cxx:382
 AliMUONRecoParam.cxx:383
 AliMUONRecoParam.cxx:384
 AliMUONRecoParam.cxx:385
 AliMUONRecoParam.cxx:386
 AliMUONRecoParam.cxx:387
 AliMUONRecoParam.cxx:388
 AliMUONRecoParam.cxx:389
 AliMUONRecoParam.cxx:390
 AliMUONRecoParam.cxx:391
 AliMUONRecoParam.cxx:392
 AliMUONRecoParam.cxx:393
 AliMUONRecoParam.cxx:394
 AliMUONRecoParam.cxx:395
 AliMUONRecoParam.cxx:396
 AliMUONRecoParam.cxx:397
 AliMUONRecoParam.cxx:398
 AliMUONRecoParam.cxx:399
 AliMUONRecoParam.cxx:400
 AliMUONRecoParam.cxx:401
 AliMUONRecoParam.cxx:402
 AliMUONRecoParam.cxx:403
 AliMUONRecoParam.cxx:404
 AliMUONRecoParam.cxx:405
 AliMUONRecoParam.cxx:406
 AliMUONRecoParam.cxx:407
 AliMUONRecoParam.cxx:408
 AliMUONRecoParam.cxx:409
 AliMUONRecoParam.cxx:410
 AliMUONRecoParam.cxx:411
 AliMUONRecoParam.cxx:412
 AliMUONRecoParam.cxx:413
 AliMUONRecoParam.cxx:414
 AliMUONRecoParam.cxx:415
 AliMUONRecoParam.cxx:416
 AliMUONRecoParam.cxx:417
 AliMUONRecoParam.cxx:418
 AliMUONRecoParam.cxx:419
 AliMUONRecoParam.cxx:420
 AliMUONRecoParam.cxx:421
 AliMUONRecoParam.cxx:422
 AliMUONRecoParam.cxx:423
 AliMUONRecoParam.cxx:424
 AliMUONRecoParam.cxx:425
 AliMUONRecoParam.cxx:426
 AliMUONRecoParam.cxx:427
 AliMUONRecoParam.cxx:428
 AliMUONRecoParam.cxx:429
 AliMUONRecoParam.cxx:430
 AliMUONRecoParam.cxx:431
 AliMUONRecoParam.cxx:432
 AliMUONRecoParam.cxx:433
 AliMUONRecoParam.cxx:434
 AliMUONRecoParam.cxx:435
 AliMUONRecoParam.cxx:436
 AliMUONRecoParam.cxx:437
 AliMUONRecoParam.cxx:438
 AliMUONRecoParam.cxx:439
 AliMUONRecoParam.cxx:440
 AliMUONRecoParam.cxx:441
 AliMUONRecoParam.cxx:442
 AliMUONRecoParam.cxx:443
 AliMUONRecoParam.cxx:444
 AliMUONRecoParam.cxx:445
 AliMUONRecoParam.cxx:446
 AliMUONRecoParam.cxx:447
 AliMUONRecoParam.cxx:448
 AliMUONRecoParam.cxx:449
 AliMUONRecoParam.cxx:450
 AliMUONRecoParam.cxx:451
 AliMUONRecoParam.cxx:452
 AliMUONRecoParam.cxx:453
 AliMUONRecoParam.cxx:454
 AliMUONRecoParam.cxx:455
 AliMUONRecoParam.cxx:456
 AliMUONRecoParam.cxx:457
 AliMUONRecoParam.cxx:458
 AliMUONRecoParam.cxx:459
 AliMUONRecoParam.cxx:460
 AliMUONRecoParam.cxx:461
 AliMUONRecoParam.cxx:462
 AliMUONRecoParam.cxx:463
 AliMUONRecoParam.cxx:464
 AliMUONRecoParam.cxx:465
 AliMUONRecoParam.cxx:466
 AliMUONRecoParam.cxx:467
 AliMUONRecoParam.cxx:468
 AliMUONRecoParam.cxx:469
 AliMUONRecoParam.cxx:470
 AliMUONRecoParam.cxx:471
 AliMUONRecoParam.cxx:472
 AliMUONRecoParam.cxx:473
 AliMUONRecoParam.cxx:474
 AliMUONRecoParam.cxx:475
 AliMUONRecoParam.cxx:476
 AliMUONRecoParam.cxx:477
 AliMUONRecoParam.cxx:478
 AliMUONRecoParam.cxx:479
 AliMUONRecoParam.cxx:480
 AliMUONRecoParam.cxx:481
 AliMUONRecoParam.cxx:482
 AliMUONRecoParam.cxx:483
 AliMUONRecoParam.cxx:484
 AliMUONRecoParam.cxx:485
 AliMUONRecoParam.cxx:486
 AliMUONRecoParam.cxx:487
 AliMUONRecoParam.cxx:488
 AliMUONRecoParam.cxx:489
 AliMUONRecoParam.cxx:490
 AliMUONRecoParam.cxx:491
 AliMUONRecoParam.cxx:492
 AliMUONRecoParam.cxx:493
 AliMUONRecoParam.cxx:494
 AliMUONRecoParam.cxx:495
 AliMUONRecoParam.cxx:496
 AliMUONRecoParam.cxx:497
 AliMUONRecoParam.cxx:498
 AliMUONRecoParam.cxx:499
 AliMUONRecoParam.cxx:500
 AliMUONRecoParam.cxx:501
 AliMUONRecoParam.cxx:502
 AliMUONRecoParam.cxx:503
 AliMUONRecoParam.cxx:504
 AliMUONRecoParam.cxx:505
 AliMUONRecoParam.cxx:506
 AliMUONRecoParam.cxx:507
 AliMUONRecoParam.cxx:508
 AliMUONRecoParam.cxx:509
 AliMUONRecoParam.cxx:510
 AliMUONRecoParam.cxx:511
 AliMUONRecoParam.cxx:512
 AliMUONRecoParam.cxx:513
 AliMUONRecoParam.cxx:514
 AliMUONRecoParam.cxx:515
 AliMUONRecoParam.cxx:516
 AliMUONRecoParam.cxx:517
 AliMUONRecoParam.cxx:518
 AliMUONRecoParam.cxx:519
 AliMUONRecoParam.cxx:520
 AliMUONRecoParam.cxx:521
 AliMUONRecoParam.cxx:522
 AliMUONRecoParam.cxx:523
 AliMUONRecoParam.cxx:524
 AliMUONRecoParam.cxx:525
 AliMUONRecoParam.cxx:526
 AliMUONRecoParam.cxx:527
 AliMUONRecoParam.cxx:528
 AliMUONRecoParam.cxx:529
 AliMUONRecoParam.cxx:530
 AliMUONRecoParam.cxx:531
 AliMUONRecoParam.cxx:532
 AliMUONRecoParam.cxx:533
 AliMUONRecoParam.cxx:534
 AliMUONRecoParam.cxx:535
 AliMUONRecoParam.cxx:536
 AliMUONRecoParam.cxx:537
 AliMUONRecoParam.cxx:538
 AliMUONRecoParam.cxx:539
 AliMUONRecoParam.cxx:540
 AliMUONRecoParam.cxx:541
 AliMUONRecoParam.cxx:542
 AliMUONRecoParam.cxx:543
 AliMUONRecoParam.cxx:544
 AliMUONRecoParam.cxx:545
 AliMUONRecoParam.cxx:546
 AliMUONRecoParam.cxx:547
 AliMUONRecoParam.cxx:548
 AliMUONRecoParam.cxx:549
 AliMUONRecoParam.cxx:550
 AliMUONRecoParam.cxx:551
 AliMUONRecoParam.cxx:552
 AliMUONRecoParam.cxx:553
 AliMUONRecoParam.cxx:554
 AliMUONRecoParam.cxx:555
 AliMUONRecoParam.cxx:556
 AliMUONRecoParam.cxx:557
 AliMUONRecoParam.cxx:558
 AliMUONRecoParam.cxx:559
 AliMUONRecoParam.cxx:560
 AliMUONRecoParam.cxx:561
 AliMUONRecoParam.cxx:562
 AliMUONRecoParam.cxx:563
 AliMUONRecoParam.cxx:564
 AliMUONRecoParam.cxx:565
 AliMUONRecoParam.cxx:566
 AliMUONRecoParam.cxx:567
 AliMUONRecoParam.cxx:568
 AliMUONRecoParam.cxx:569
 AliMUONRecoParam.cxx:570
 AliMUONRecoParam.cxx:571
 AliMUONRecoParam.cxx:572
 AliMUONRecoParam.cxx:573
 AliMUONRecoParam.cxx:574
 AliMUONRecoParam.cxx:575
 AliMUONRecoParam.cxx:576
 AliMUONRecoParam.cxx:577
 AliMUONRecoParam.cxx:578
 AliMUONRecoParam.cxx:579
 AliMUONRecoParam.cxx:580
 AliMUONRecoParam.cxx:581
 AliMUONRecoParam.cxx:582
 AliMUONRecoParam.cxx:583
 AliMUONRecoParam.cxx:584
 AliMUONRecoParam.cxx:585
 AliMUONRecoParam.cxx:586
 AliMUONRecoParam.cxx:587
 AliMUONRecoParam.cxx:588
 AliMUONRecoParam.cxx:589
 AliMUONRecoParam.cxx:590
 AliMUONRecoParam.cxx:591
 AliMUONRecoParam.cxx:592
 AliMUONRecoParam.cxx:593
 AliMUONRecoParam.cxx:594
 AliMUONRecoParam.cxx:595
 AliMUONRecoParam.cxx:596
 AliMUONRecoParam.cxx:597
 AliMUONRecoParam.cxx:598
 AliMUONRecoParam.cxx:599
 AliMUONRecoParam.cxx:600
 AliMUONRecoParam.cxx:601
 AliMUONRecoParam.cxx:602
 AliMUONRecoParam.cxx:603
 AliMUONRecoParam.cxx:604
 AliMUONRecoParam.cxx:605
 AliMUONRecoParam.cxx:606
 AliMUONRecoParam.cxx:607
 AliMUONRecoParam.cxx:608
 AliMUONRecoParam.cxx:609
 AliMUONRecoParam.cxx:610
 AliMUONRecoParam.cxx:611
 AliMUONRecoParam.cxx:612
 AliMUONRecoParam.cxx:613
 AliMUONRecoParam.cxx:614
 AliMUONRecoParam.cxx:615
 AliMUONRecoParam.cxx:616
 AliMUONRecoParam.cxx:617
 AliMUONRecoParam.cxx:618
 AliMUONRecoParam.cxx:619
 AliMUONRecoParam.cxx:620
 AliMUONRecoParam.cxx:621
 AliMUONRecoParam.cxx:622
 AliMUONRecoParam.cxx:623
 AliMUONRecoParam.cxx:624
 AliMUONRecoParam.cxx:625
 AliMUONRecoParam.cxx:626
 AliMUONRecoParam.cxx:627
 AliMUONRecoParam.cxx:628
 AliMUONRecoParam.cxx:629
 AliMUONRecoParam.cxx:630
 AliMUONRecoParam.cxx:631
 AliMUONRecoParam.cxx:632
 AliMUONRecoParam.cxx:633
 AliMUONRecoParam.cxx:634
 AliMUONRecoParam.cxx:635
 AliMUONRecoParam.cxx:636
 AliMUONRecoParam.cxx:637
 AliMUONRecoParam.cxx:638
 AliMUONRecoParam.cxx:639
 AliMUONRecoParam.cxx:640
 AliMUONRecoParam.cxx:641
 AliMUONRecoParam.cxx:642
 AliMUONRecoParam.cxx:643
 AliMUONRecoParam.cxx:644
 AliMUONRecoParam.cxx:645
 AliMUONRecoParam.cxx:646
 AliMUONRecoParam.cxx:647
 AliMUONRecoParam.cxx:648
 AliMUONRecoParam.cxx:649
 AliMUONRecoParam.cxx:650
 AliMUONRecoParam.cxx:651
 AliMUONRecoParam.cxx:652
 AliMUONRecoParam.cxx:653
 AliMUONRecoParam.cxx:654
 AliMUONRecoParam.cxx:655
 AliMUONRecoParam.cxx:656
 AliMUONRecoParam.cxx:657
 AliMUONRecoParam.cxx:658
 AliMUONRecoParam.cxx:659
 AliMUONRecoParam.cxx:660
 AliMUONRecoParam.cxx:661
 AliMUONRecoParam.cxx:662
 AliMUONRecoParam.cxx:663
 AliMUONRecoParam.cxx:664
 AliMUONRecoParam.cxx:665
 AliMUONRecoParam.cxx:666
 AliMUONRecoParam.cxx:667
 AliMUONRecoParam.cxx:668
 AliMUONRecoParam.cxx:669
 AliMUONRecoParam.cxx:670
 AliMUONRecoParam.cxx:671
 AliMUONRecoParam.cxx:672
 AliMUONRecoParam.cxx:673
 AliMUONRecoParam.cxx:674
 AliMUONRecoParam.cxx:675
 AliMUONRecoParam.cxx:676
 AliMUONRecoParam.cxx:677
 AliMUONRecoParam.cxx:678
 AliMUONRecoParam.cxx:679
 AliMUONRecoParam.cxx:680
 AliMUONRecoParam.cxx:681
 AliMUONRecoParam.cxx:682
 AliMUONRecoParam.cxx:683
 AliMUONRecoParam.cxx:684
 AliMUONRecoParam.cxx:685
 AliMUONRecoParam.cxx:686
 AliMUONRecoParam.cxx:687
 AliMUONRecoParam.cxx:688
 AliMUONRecoParam.cxx:689
 AliMUONRecoParam.cxx:690
 AliMUONRecoParam.cxx:691
 AliMUONRecoParam.cxx:692
 AliMUONRecoParam.cxx:693
 AliMUONRecoParam.cxx:694
 AliMUONRecoParam.cxx:695
 AliMUONRecoParam.cxx:696
 AliMUONRecoParam.cxx:697
 AliMUONRecoParam.cxx:698
 AliMUONRecoParam.cxx:699
 AliMUONRecoParam.cxx:700
 AliMUONRecoParam.cxx:701
 AliMUONRecoParam.cxx:702
 AliMUONRecoParam.cxx:703
 AliMUONRecoParam.cxx:704
 AliMUONRecoParam.cxx:705
 AliMUONRecoParam.cxx:706
 AliMUONRecoParam.cxx:707
 AliMUONRecoParam.cxx:708
 AliMUONRecoParam.cxx:709
 AliMUONRecoParam.cxx:710
 AliMUONRecoParam.cxx:711
 AliMUONRecoParam.cxx:712
 AliMUONRecoParam.cxx:713
 AliMUONRecoParam.cxx:714
 AliMUONRecoParam.cxx:715
 AliMUONRecoParam.cxx:716
 AliMUONRecoParam.cxx:717
 AliMUONRecoParam.cxx:718
 AliMUONRecoParam.cxx:719
 AliMUONRecoParam.cxx:720
 AliMUONRecoParam.cxx:721
 AliMUONRecoParam.cxx:722
 AliMUONRecoParam.cxx:723
 AliMUONRecoParam.cxx:724
 AliMUONRecoParam.cxx:725
 AliMUONRecoParam.cxx:726
 AliMUONRecoParam.cxx:727
 AliMUONRecoParam.cxx:728
 AliMUONRecoParam.cxx:729
 AliMUONRecoParam.cxx:730
 AliMUONRecoParam.cxx:731
 AliMUONRecoParam.cxx:732
 AliMUONRecoParam.cxx:733
 AliMUONRecoParam.cxx:734
 AliMUONRecoParam.cxx:735
 AliMUONRecoParam.cxx:736
 AliMUONRecoParam.cxx:737
 AliMUONRecoParam.cxx:738
 AliMUONRecoParam.cxx:739
 AliMUONRecoParam.cxx:740
 AliMUONRecoParam.cxx:741
 AliMUONRecoParam.cxx:742
 AliMUONRecoParam.cxx:743
 AliMUONRecoParam.cxx:744
 AliMUONRecoParam.cxx:745
 AliMUONRecoParam.cxx:746
 AliMUONRecoParam.cxx:747
 AliMUONRecoParam.cxx:748
 AliMUONRecoParam.cxx:749
 AliMUONRecoParam.cxx:750
 AliMUONRecoParam.cxx:751
 AliMUONRecoParam.cxx:752
 AliMUONRecoParam.cxx:753
 AliMUONRecoParam.cxx:754
 AliMUONRecoParam.cxx:755
 AliMUONRecoParam.cxx:756
 AliMUONRecoParam.cxx:757
 AliMUONRecoParam.cxx:758
 AliMUONRecoParam.cxx:759
 AliMUONRecoParam.cxx:760
 AliMUONRecoParam.cxx:761
 AliMUONRecoParam.cxx:762
 AliMUONRecoParam.cxx:763
 AliMUONRecoParam.cxx:764
 AliMUONRecoParam.cxx:765
 AliMUONRecoParam.cxx:766
 AliMUONRecoParam.cxx:767
 AliMUONRecoParam.cxx:768
 AliMUONRecoParam.cxx:769
 AliMUONRecoParam.cxx:770
 AliMUONRecoParam.cxx:771
 AliMUONRecoParam.cxx:772
 AliMUONRecoParam.cxx:773
 AliMUONRecoParam.cxx:774
 AliMUONRecoParam.cxx:775
 AliMUONRecoParam.cxx:776
 AliMUONRecoParam.cxx:777
 AliMUONRecoParam.cxx:778
 AliMUONRecoParam.cxx:779
 AliMUONRecoParam.cxx:780
 AliMUONRecoParam.cxx:781
 AliMUONRecoParam.cxx:782
 AliMUONRecoParam.cxx:783
 AliMUONRecoParam.cxx:784
 AliMUONRecoParam.cxx:785
 AliMUONRecoParam.cxx:786
 AliMUONRecoParam.cxx:787
 AliMUONRecoParam.cxx:788
 AliMUONRecoParam.cxx:789
 AliMUONRecoParam.cxx:790
 AliMUONRecoParam.cxx:791
 AliMUONRecoParam.cxx:792
 AliMUONRecoParam.cxx:793
 AliMUONRecoParam.cxx:794
 AliMUONRecoParam.cxx:795
 AliMUONRecoParam.cxx:796
 AliMUONRecoParam.cxx:797
 AliMUONRecoParam.cxx:798
 AliMUONRecoParam.cxx:799
 AliMUONRecoParam.cxx:800
 AliMUONRecoParam.cxx:801
 AliMUONRecoParam.cxx:802
 AliMUONRecoParam.cxx:803
 AliMUONRecoParam.cxx:804
 AliMUONRecoParam.cxx:805
 AliMUONRecoParam.cxx:806
 AliMUONRecoParam.cxx:807
 AliMUONRecoParam.cxx:808
 AliMUONRecoParam.cxx:809
 AliMUONRecoParam.cxx:810
 AliMUONRecoParam.cxx:811
 AliMUONRecoParam.cxx:812
 AliMUONRecoParam.cxx:813
 AliMUONRecoParam.cxx:814
 AliMUONRecoParam.cxx:815
 AliMUONRecoParam.cxx:816
 AliMUONRecoParam.cxx:817
 AliMUONRecoParam.cxx:818
 AliMUONRecoParam.cxx:819
 AliMUONRecoParam.cxx:820
 AliMUONRecoParam.cxx:821
 AliMUONRecoParam.cxx:822
 AliMUONRecoParam.cxx:823
 AliMUONRecoParam.cxx:824
 AliMUONRecoParam.cxx:825
 AliMUONRecoParam.cxx:826
 AliMUONRecoParam.cxx:827
 AliMUONRecoParam.cxx:828
 AliMUONRecoParam.cxx:829
 AliMUONRecoParam.cxx:830
 AliMUONRecoParam.cxx:831
 AliMUONRecoParam.cxx:832
 AliMUONRecoParam.cxx:833
 AliMUONRecoParam.cxx:834
 AliMUONRecoParam.cxx:835
 AliMUONRecoParam.cxx:836
 AliMUONRecoParam.cxx:837
 AliMUONRecoParam.cxx:838
 AliMUONRecoParam.cxx:839
 AliMUONRecoParam.cxx:840
 AliMUONRecoParam.cxx:841
 AliMUONRecoParam.cxx:842
 AliMUONRecoParam.cxx:843
 AliMUONRecoParam.cxx:844
 AliMUONRecoParam.cxx:845
 AliMUONRecoParam.cxx:846
 AliMUONRecoParam.cxx:847
 AliMUONRecoParam.cxx:848
 AliMUONRecoParam.cxx:849
 AliMUONRecoParam.cxx:850
 AliMUONRecoParam.cxx:851