ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, 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$

#include "AliMUONDigitCalibrator.h"

#include "AliCDBEntry.h"
#include "AliCDBManager.h"
#include "AliLog.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONConstants.h"
#include "AliMUONLogger.h"
#include "AliMUONPadStatusMaker.h"
#include "AliMUONPadStatusMapMaker.h"
#include "AliMUONRecoParam.h"
#include "AliMUONVCalibParam.h"
#include "AliMUONVDigit.h"
#include "AliMUONVDigitStore.h"
#include "AliMUONVStore.h"
#include "AliMpBusPatch.h"
#include "AliMpConstants.h"
#include "AliMpCDB.h"
#include "AliMpDDLStore.h"
#include "AliMpDEIterator.h"
#include "AliMpDetElement.h"
#include "AliMpManuStore.h"

//-----------------------------------------------------------------------------
/// \class AliMUONDigitCalibrator
/// Class used to calibrate digits (either real or simulated ones).
///
/// The calibration consists of subtracting the pedestal
/// and multiplying by a gain, so that
/// Signal = (ADC-pedestal)*gain
///
/// Please note also that for the moment, if a digit lies on a dead channel
/// we remove this digit from the list of digits.
/// FIXME: this has to be revisited. By using the AliMUONDigit::fFlags we
/// should in principle flag a digit as bad w/o removing it, but this 
/// then requires some changes in the cluster finder to deal with this extra
/// information correctly (e.g. to set a quality for the cluster if it contains
/// bad digits).
///
/// \author Laurent Aphecetche
//-----------------------------------------------------------------------------


/// \cond CLASSIMP
ClassImp(AliMUONDigitCalibrator)
/// \endcond

const Int_t AliMUONDigitCalibrator::fgkNoGain(0);
const Int_t AliMUONDigitCalibrator::fgkGainConstantCapa(1);
const Int_t AliMUONDigitCalibrator::fgkGain(2);
const Int_t AliMUONDigitCalibrator::fgkInjectionGain(3);

//_____________________________________________________________________________
AliMUONDigitCalibrator::AliMUONDigitCalibrator(Int_t runNumber)
: TObject(),
fLogger(new AliMUONLogger(20000)),
fStatusMaker(0x0),
fStatusMapMaker(0x0),
fPedestals(0x0),
fGains(0x0),
fApplyGains(0),
fCapacitances(0x0),
fNumberOfBadPads(0),
fNumberOfPads(0),
fChargeSigmaCut(0),
fMask(0)
{
  /// ctor
  
  AliMUONRecoParam* recoParam(0x0);
  
  AliCDBEntry* e = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam",runNumber);
  if (e)
  {
    TObject* o = e->GetObject();
    if ( o->IsA() == TObjArray::Class() )
    {
      TObjArray* a = static_cast<TObjArray*>(o);
//      a->SetOwner(kTRUE); // FIXME: this should be done but somehow makes the reco crash at the end at cleaning stage... investigate why ?
      TIter next(a);
      AliMUONRecoParam* p;
      while ( ( p = static_cast<AliMUONRecoParam*>(next()) ))
      {
        if ( p->IsDefault()) recoParam = p;
      }
    }
    else
    {
      recoParam = static_cast<AliMUONRecoParam*>(o);
    }
  }
  if (!recoParam)
  {
    AliError("Cannot get the recoParam. Failing");
    return;
  }
  
  // OK. Now get all we need and work...
  
  AliMUONCalibrationData calib(runNumber);
  
  Ctor(calib,recoParam,kFALSE);
}

//_____________________________________________________________________________
AliMUONDigitCalibrator::AliMUONDigitCalibrator(const AliMUONCalibrationData& calib,
                                               const AliMUONRecoParam* recoParams)
: TObject(),
fLogger(new AliMUONLogger(20000)),
fStatusMaker(0x0),
fStatusMapMaker(0x0),
fPedestals(0x0),
fGains(0x0),
fApplyGains(0),
fCapacitances(0x0),
fNumberOfBadPads(0),
fNumberOfPads(0),
fChargeSigmaCut(0),
fMask(0)
{
  /// ctor
  
  Ctor(calib,recoParams);
}

//_____________________________________________________________________________
AliMUONDigitCalibrator::AliMUONDigitCalibrator(const AliMUONCalibrationData& calib, int /*b*/)
: TObject(),
fLogger(new AliMUONLogger(20000)),
fStatusMaker(0x0),
fStatusMapMaker(0x0),
fPedestals(0x0),
fGains(0x0),
fApplyGains(0),
fCapacitances(0x0),
fNumberOfBadPads(0),
fNumberOfPads(0),
fChargeSigmaCut(0),
fMask(0)
{
  /// ctor
  
  Ctor(calib,0x0);
}

//_____________________________________________________________________________
void
AliMUONDigitCalibrator::Ctor(const AliMUONCalibrationData& calib,
                             const AliMUONRecoParam* recoParams,
                             Bool_t deferredInitialization)
{
  /// designated ctor
  
  TString cMode("NOGAIN");
  if (recoParams) cMode=recoParams->GetCalibrationMode();
  cMode.ToUpper();
  
  if ( cMode == "NOGAIN" ) 
  {
    fApplyGains = fgkNoGain;
    AliInfo("Will NOT apply gain correction");
  }
  else if ( cMode == "GAINCONSTANTCAPA" ) 
  {
    fApplyGains = fgkGainConstantCapa;
    AliInfo("Will apply gain correction, but with constant capacitance");
  }
  else if ( cMode == "GAIN" ) 
  {
    fApplyGains = fgkGain;
    AliInfo("Will apply gain correction, with measured capacitances");
  }
  else if ( cMode == "INJECTIONGAIN")
	{
		fApplyGains = fgkInjectionGain;
    AliInfo("Will apply injection gain correction, with EMELEC factory gains");
	}  
  else
  {
    AliError(Form("Invalid calib mode = %s. Will use NOGAIN instead",cMode.Data()));
    fApplyGains = fgkNoGain;
  }
  
  // Load mapping manu store
  if ( ! AliMpCDB::LoadManuStore() ) {
    AliFatal("Could not access manu store from OCDB !");
  }
  
  fStatusMaker = new AliMUONPadStatusMaker(calib);
  
  // Set default values, as loose as reasonable
  
  fChargeSigmaCut = 3.0;
  
	fMask = 0x8080; // reject pads where ped *or* hv are missing
	
	if ( recoParams )
	{
    // if we have reco params, we use limits and cuts from there :
    
    fStatusMaker->SetLimits(*recoParams);
    
    fMask = recoParams->PadGoodnessMask();
		//WARNING : getting this mask wrong is a very effective way of getting
		//no digits at all out of this class ;-)
    
    fChargeSigmaCut = recoParams->ChargeSigmaCut();
	}
  else
  {
    fLogger->Log("No RecoParam available");
    fLogger->Log(Form("SigmaCut=%e",fChargeSigmaCut));
  }
  
  fStatusMapMaker = new AliMUONPadStatusMapMaker(*fStatusMaker,fMask,deferredInitialization);
  
  fPedestals = calib.Pedestals();
  
  fGains = calib.Gains(); // we get gains whatever the calibMode is, in order
  // to get the saturation value...
  
  if ( fApplyGains == fgkGain || fApplyGains == fgkInjectionGain ) 
  {
    fCapacitances = calib.Capacitances();
  }
}

//_____________________________________________________________________________
AliMUONDigitCalibrator::~AliMUONDigitCalibrator()
{
  /// dtor.
  
  if ( fNumberOfPads > 0 ) 
  {
    if ( fStatusMaker ) 
    {
      fStatusMaker->Report(fMask);
    }
    
    AliInfo("Summary of messages:");

    fLogger->Print();
    
    AliInfo(Form("We have seen %g pads, and rejected %g (%7.2f %%)",
                 fNumberOfPads,fNumberOfBadPads,
                 ( fNumberOfPads > 0 ) ? fNumberOfBadPads*100.0/fNumberOfPads : 0 ));
	}

  delete fStatusMaker;
  delete fStatusMapMaker;
  delete fLogger;
}

//_____________________________________________________________________________
void
AliMUONDigitCalibrator::Calibrate(AliMUONVDigitStore& digitStore)
{
  /// Calibrate the digits contained in digitStore  
  TIter next(digitStore.CreateTrackerIterator());
  AliMUONVDigit* digit;
  
  fStatusMapMaker->RefreshRejectProbabilities(); // this will do something only for simulations
  // (and only for those simulations where the reject list contain probabilities which are
  // different from zero or one)
  
  AliDebug(1,Form("# of digits = %d",digitStore.GetSize()));
  
  while ( ( digit = static_cast<AliMUONVDigit*>(next() ) ) )
  {
    if ( digit->IsCalibrated() ) 
    {
      fLogger->Log("ERROR : trying to calibrate a digit twice");
      return;
    }
    
    digit->Calibrated(kTRUE);
    digit->ChargeInFC(kTRUE);
    
    Float_t charge(0.0);
    Int_t statusMap;
    Bool_t isSaturated(kFALSE);
    
    ++fNumberOfPads;
    
    Bool_t ok = IsValidDigit(digit->DetElemId(),digit->ManuId(),digit->ManuChannel(),&statusMap);
    
    digit->SetStatusMap(statusMap);

    if (ok)
    {
      charge = CalibrateDigit(digit->DetElemId(),digit->ManuId(),digit->ManuChannel(),
                              digit->ADC(),fChargeSigmaCut,&isSaturated);
    }
    else
    {
      ++fNumberOfBadPads;      
    }
    
    digit->SetCharge(charge);
    digit->Saturated(isSaturated);
    
  }
}

//_____________________________________________________________________________
Float_t
AliMUONDigitCalibrator::CalibrateDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel,
                                       Float_t adc, Float_t nsigmas, 
                                       Bool_t* isSaturated) const

{
  /// Calibrate one digit
  /// Return the digit charge, in fC
  
  if ( nsigmas < 0 ) 
  {
    nsigmas = fChargeSigmaCut;
  }

  fLogger->Log(Form("ChargeSigmaCut used = %e",nsigmas));

  AliMUONVCalibParam* pedestal = static_cast<AliMUONVCalibParam*>
  (fPedestals->FindObject(detElemId,manuId));
  
  if (!pedestal)
  {
    // no pedestal -> no charge    
    fLogger->Log(Form("Got a null pedestal object for DE,manu=%d,%d",detElemId,manuId));        
    return 0.0;
  }
  
  
  AliMUONVCalibParam* gain = static_cast<AliMUONVCalibParam*>
  (fGains->FindObject(detElemId,manuId));
  
  if (!gain)
  {
    if ( fApplyGains != fgkNoGain )
    {
      // no gain -> no charge
      fLogger->Log(Form("Got a null gain object for DE,manu=%d,%d",
                        detElemId,manuId)); 
      return 0.0;
    }
  }
  
  Float_t padc = adc-pedestal->ValueAsFloat(manuChannel,0);
  
	// Gain (mV/fC) = 1/(a0*capa) with a0~1.25 and capa~0.2 
  Float_t charge(0);
  Float_t capa(AliMUONConstants::DefaultCapa()); // capa = 0.2 and a0 = 1.25
  Float_t a0(AliMUONConstants::DefaultA0());  // is equivalent to gain = 4 mV/fC
  Float_t a1(0);
  Float_t adc2mv(AliMUONConstants::DefaultADC2MV()); // 1 ADC channel = 0.61 mV
  Float_t injGain(4); // By default the gain is set to 4 mV/fC
  //
  // Note that the ChargeMax (for one pad) is roughly 4096 * 0.61 mV/channel / 4 mV/fC = 625 fC

  if ( fApplyGains == fgkGain || fApplyGains == fgkInjectionGain ) 
  {
    Int_t serialNumber 
    = AliMpManuStore::Instance()->GetManuSerial(detElemId, manuId);
    
    AliMUONVCalibParam* param = static_cast<AliMUONVCalibParam*>(fCapacitances->FindObject(serialNumber));
    
    if ( param )
    {
      capa = param->ValueAsFloat(manuChannel,0);
			injGain = param->ValueAsFloat(manuChannel,1);
      if ( injGain < 0 ) 
      {
        fLogger->Log(Form("injGain is %e < 0 for serialNumber=%d",injGain,serialNumber));
        return 0.0;
      }
    }
    else
    {
      // If capa not found in the OCDB we exit
	    fLogger->Log(Form("No capa (injGain) found for serialNumber=%d",serialNumber));
			return 0.0;
    }
  }
  
  if ( padc > nsigmas*pedestal->ValueAsFloat(manuChannel,1) ) 
  {
    if ( fApplyGains == fgkGain || fApplyGains == fgkGainConstantCapa ) 
    {
      a0 = gain->ValueAsFloat(manuChannel,0);
      a1 = gain->ValueAsFloat(manuChannel,1);
      Int_t thres = gain->ValueAsInt(manuChannel,2);
      if ( padc < thres ) 
      {
        charge = a0*padc;
      }
      else
      {
        charge = a0*thres + a0*(padc-thres) + a1*(padc-thres)*(padc-thres);
      }
			charge *= capa*adc2mv;
    }
    else if ( fApplyGains == fgkInjectionGain ) 
    {
			
      charge = padc*adc2mv/injGain;
    }
		else
		{
			charge = a0*padc*capa*adc2mv;
		}
  }
  
  if ( isSaturated ) 
  {
    Int_t saturation(3000);
    
    if ( gain && ( fApplyGains != fgkNoGain ) )
    {
      saturation = gain->ValueAsInt(manuChannel,4);
    }
    
    if ( padc >= saturation )
    {
      *isSaturated = kTRUE;
    }
    else
    {
      *isSaturated = kFALSE;
    }
  }
  
  return ( charge > 0.0 ? charge : 0.0 );
}

//_____________________________________________________________________________
Bool_t 
AliMUONDigitCalibrator::IsValidDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel,
                                     Int_t* statusMap) const

{
  /// Check if a given pad is ok or not.
  
  // initialize the statusmap to dead by default
  if (statusMap) *statusMap = AliMUONPadStatusMapMaker::SelfDeadMask();

  // First a protection against bad input parameters
  AliMpDetElement* de = AliMpDDLStore::Instance()->GetDetElement(detElemId);
  if (!de) return kFALSE; // not existing DE
  if (!de->IsExistingChannel(manuId,manuChannel))
  {
    // non-existing (might happen when we get parity errors in read-out
    // that spoils the manuId
    return kFALSE;
  }
  if (!de->IsConnectedChannel(manuId,manuChannel))
  {
    // existing (in read-out), but not connected channel
    return kFALSE;
  }
  
  // ok, now we have a valid channel number, so let's see if that pad
  // behaves or not ;-)
  
  Int_t sm = StatusMap(detElemId,manuId,manuChannel);
  
  if (statusMap) *statusMap = sm;
  
  if ( ( sm & AliMUONPadStatusMapMaker::SelfDeadMask() ) != 0 ) 
  {
    // pad itself is bad (not testing its neighbours at this stage)
    return kFALSE;
  }
  
  return kTRUE;
}

//_____________________________________________________________________________
Int_t 
AliMUONDigitCalibrator::PadStatus(Int_t detElemId, Int_t manuId, Int_t manuChannel) const
{
  /// Return the status of the given pad
  return fStatusMaker->PadStatus(detElemId,manuId,manuChannel);
}

//_____________________________________________________________________________
Int_t 
AliMUONDigitCalibrator::StatusMap(Int_t detElemId, Int_t manuId, Int_t manuChannel) const
{
  /// Return the status map of the given pad
  return fStatusMapMaker->StatusMap(detElemId,manuId,manuChannel);
  
}

 AliMUONDigitCalibrator.cxx:1
 AliMUONDigitCalibrator.cxx:2
 AliMUONDigitCalibrator.cxx:3
 AliMUONDigitCalibrator.cxx:4
 AliMUONDigitCalibrator.cxx:5
 AliMUONDigitCalibrator.cxx:6
 AliMUONDigitCalibrator.cxx:7
 AliMUONDigitCalibrator.cxx:8
 AliMUONDigitCalibrator.cxx:9
 AliMUONDigitCalibrator.cxx:10
 AliMUONDigitCalibrator.cxx:11
 AliMUONDigitCalibrator.cxx:12
 AliMUONDigitCalibrator.cxx:13
 AliMUONDigitCalibrator.cxx:14
 AliMUONDigitCalibrator.cxx:15
 AliMUONDigitCalibrator.cxx:16
 AliMUONDigitCalibrator.cxx:17
 AliMUONDigitCalibrator.cxx:18
 AliMUONDigitCalibrator.cxx:19
 AliMUONDigitCalibrator.cxx:20
 AliMUONDigitCalibrator.cxx:21
 AliMUONDigitCalibrator.cxx:22
 AliMUONDigitCalibrator.cxx:23
 AliMUONDigitCalibrator.cxx:24
 AliMUONDigitCalibrator.cxx:25
 AliMUONDigitCalibrator.cxx:26
 AliMUONDigitCalibrator.cxx:27
 AliMUONDigitCalibrator.cxx:28
 AliMUONDigitCalibrator.cxx:29
 AliMUONDigitCalibrator.cxx:30
 AliMUONDigitCalibrator.cxx:31
 AliMUONDigitCalibrator.cxx:32
 AliMUONDigitCalibrator.cxx:33
 AliMUONDigitCalibrator.cxx:34
 AliMUONDigitCalibrator.cxx:35
 AliMUONDigitCalibrator.cxx:36
 AliMUONDigitCalibrator.cxx:37
 AliMUONDigitCalibrator.cxx:38
 AliMUONDigitCalibrator.cxx:39
 AliMUONDigitCalibrator.cxx:40
 AliMUONDigitCalibrator.cxx:41
 AliMUONDigitCalibrator.cxx:42
 AliMUONDigitCalibrator.cxx:43
 AliMUONDigitCalibrator.cxx:44
 AliMUONDigitCalibrator.cxx:45
 AliMUONDigitCalibrator.cxx:46
 AliMUONDigitCalibrator.cxx:47
 AliMUONDigitCalibrator.cxx:48
 AliMUONDigitCalibrator.cxx:49
 AliMUONDigitCalibrator.cxx:50
 AliMUONDigitCalibrator.cxx:51
 AliMUONDigitCalibrator.cxx:52
 AliMUONDigitCalibrator.cxx:53
 AliMUONDigitCalibrator.cxx:54
 AliMUONDigitCalibrator.cxx:55
 AliMUONDigitCalibrator.cxx:56
 AliMUONDigitCalibrator.cxx:57
 AliMUONDigitCalibrator.cxx:58
 AliMUONDigitCalibrator.cxx:59
 AliMUONDigitCalibrator.cxx:60
 AliMUONDigitCalibrator.cxx:61
 AliMUONDigitCalibrator.cxx:62
 AliMUONDigitCalibrator.cxx:63
 AliMUONDigitCalibrator.cxx:64
 AliMUONDigitCalibrator.cxx:65
 AliMUONDigitCalibrator.cxx:66
 AliMUONDigitCalibrator.cxx:67
 AliMUONDigitCalibrator.cxx:68
 AliMUONDigitCalibrator.cxx:69
 AliMUONDigitCalibrator.cxx:70
 AliMUONDigitCalibrator.cxx:71
 AliMUONDigitCalibrator.cxx:72
 AliMUONDigitCalibrator.cxx:73
 AliMUONDigitCalibrator.cxx:74
 AliMUONDigitCalibrator.cxx:75
 AliMUONDigitCalibrator.cxx:76
 AliMUONDigitCalibrator.cxx:77
 AliMUONDigitCalibrator.cxx:78
 AliMUONDigitCalibrator.cxx:79
 AliMUONDigitCalibrator.cxx:80
 AliMUONDigitCalibrator.cxx:81
 AliMUONDigitCalibrator.cxx:82
 AliMUONDigitCalibrator.cxx:83
 AliMUONDigitCalibrator.cxx:84
 AliMUONDigitCalibrator.cxx:85
 AliMUONDigitCalibrator.cxx:86
 AliMUONDigitCalibrator.cxx:87
 AliMUONDigitCalibrator.cxx:88
 AliMUONDigitCalibrator.cxx:89
 AliMUONDigitCalibrator.cxx:90
 AliMUONDigitCalibrator.cxx:91
 AliMUONDigitCalibrator.cxx:92
 AliMUONDigitCalibrator.cxx:93
 AliMUONDigitCalibrator.cxx:94
 AliMUONDigitCalibrator.cxx:95
 AliMUONDigitCalibrator.cxx:96
 AliMUONDigitCalibrator.cxx:97
 AliMUONDigitCalibrator.cxx:98
 AliMUONDigitCalibrator.cxx:99
 AliMUONDigitCalibrator.cxx:100
 AliMUONDigitCalibrator.cxx:101
 AliMUONDigitCalibrator.cxx:102
 AliMUONDigitCalibrator.cxx:103
 AliMUONDigitCalibrator.cxx:104
 AliMUONDigitCalibrator.cxx:105
 AliMUONDigitCalibrator.cxx:106
 AliMUONDigitCalibrator.cxx:107
 AliMUONDigitCalibrator.cxx:108
 AliMUONDigitCalibrator.cxx:109
 AliMUONDigitCalibrator.cxx:110
 AliMUONDigitCalibrator.cxx:111
 AliMUONDigitCalibrator.cxx:112
 AliMUONDigitCalibrator.cxx:113
 AliMUONDigitCalibrator.cxx:114
 AliMUONDigitCalibrator.cxx:115
 AliMUONDigitCalibrator.cxx:116
 AliMUONDigitCalibrator.cxx:117
 AliMUONDigitCalibrator.cxx:118
 AliMUONDigitCalibrator.cxx:119
 AliMUONDigitCalibrator.cxx:120
 AliMUONDigitCalibrator.cxx:121
 AliMUONDigitCalibrator.cxx:122
 AliMUONDigitCalibrator.cxx:123
 AliMUONDigitCalibrator.cxx:124
 AliMUONDigitCalibrator.cxx:125
 AliMUONDigitCalibrator.cxx:126
 AliMUONDigitCalibrator.cxx:127
 AliMUONDigitCalibrator.cxx:128
 AliMUONDigitCalibrator.cxx:129
 AliMUONDigitCalibrator.cxx:130
 AliMUONDigitCalibrator.cxx:131
 AliMUONDigitCalibrator.cxx:132
 AliMUONDigitCalibrator.cxx:133
 AliMUONDigitCalibrator.cxx:134
 AliMUONDigitCalibrator.cxx:135
 AliMUONDigitCalibrator.cxx:136
 AliMUONDigitCalibrator.cxx:137
 AliMUONDigitCalibrator.cxx:138
 AliMUONDigitCalibrator.cxx:139
 AliMUONDigitCalibrator.cxx:140
 AliMUONDigitCalibrator.cxx:141
 AliMUONDigitCalibrator.cxx:142
 AliMUONDigitCalibrator.cxx:143
 AliMUONDigitCalibrator.cxx:144
 AliMUONDigitCalibrator.cxx:145
 AliMUONDigitCalibrator.cxx:146
 AliMUONDigitCalibrator.cxx:147
 AliMUONDigitCalibrator.cxx:148
 AliMUONDigitCalibrator.cxx:149
 AliMUONDigitCalibrator.cxx:150
 AliMUONDigitCalibrator.cxx:151
 AliMUONDigitCalibrator.cxx:152
 AliMUONDigitCalibrator.cxx:153
 AliMUONDigitCalibrator.cxx:154
 AliMUONDigitCalibrator.cxx:155
 AliMUONDigitCalibrator.cxx:156
 AliMUONDigitCalibrator.cxx:157
 AliMUONDigitCalibrator.cxx:158
 AliMUONDigitCalibrator.cxx:159
 AliMUONDigitCalibrator.cxx:160
 AliMUONDigitCalibrator.cxx:161
 AliMUONDigitCalibrator.cxx:162
 AliMUONDigitCalibrator.cxx:163
 AliMUONDigitCalibrator.cxx:164
 AliMUONDigitCalibrator.cxx:165
 AliMUONDigitCalibrator.cxx:166
 AliMUONDigitCalibrator.cxx:167
 AliMUONDigitCalibrator.cxx:168
 AliMUONDigitCalibrator.cxx:169
 AliMUONDigitCalibrator.cxx:170
 AliMUONDigitCalibrator.cxx:171
 AliMUONDigitCalibrator.cxx:172
 AliMUONDigitCalibrator.cxx:173
 AliMUONDigitCalibrator.cxx:174
 AliMUONDigitCalibrator.cxx:175
 AliMUONDigitCalibrator.cxx:176
 AliMUONDigitCalibrator.cxx:177
 AliMUONDigitCalibrator.cxx:178
 AliMUONDigitCalibrator.cxx:179
 AliMUONDigitCalibrator.cxx:180
 AliMUONDigitCalibrator.cxx:181
 AliMUONDigitCalibrator.cxx:182
 AliMUONDigitCalibrator.cxx:183
 AliMUONDigitCalibrator.cxx:184
 AliMUONDigitCalibrator.cxx:185
 AliMUONDigitCalibrator.cxx:186
 AliMUONDigitCalibrator.cxx:187
 AliMUONDigitCalibrator.cxx:188
 AliMUONDigitCalibrator.cxx:189
 AliMUONDigitCalibrator.cxx:190
 AliMUONDigitCalibrator.cxx:191
 AliMUONDigitCalibrator.cxx:192
 AliMUONDigitCalibrator.cxx:193
 AliMUONDigitCalibrator.cxx:194
 AliMUONDigitCalibrator.cxx:195
 AliMUONDigitCalibrator.cxx:196
 AliMUONDigitCalibrator.cxx:197
 AliMUONDigitCalibrator.cxx:198
 AliMUONDigitCalibrator.cxx:199
 AliMUONDigitCalibrator.cxx:200
 AliMUONDigitCalibrator.cxx:201
 AliMUONDigitCalibrator.cxx:202
 AliMUONDigitCalibrator.cxx:203
 AliMUONDigitCalibrator.cxx:204
 AliMUONDigitCalibrator.cxx:205
 AliMUONDigitCalibrator.cxx:206
 AliMUONDigitCalibrator.cxx:207
 AliMUONDigitCalibrator.cxx:208
 AliMUONDigitCalibrator.cxx:209
 AliMUONDigitCalibrator.cxx:210
 AliMUONDigitCalibrator.cxx:211
 AliMUONDigitCalibrator.cxx:212
 AliMUONDigitCalibrator.cxx:213
 AliMUONDigitCalibrator.cxx:214
 AliMUONDigitCalibrator.cxx:215
 AliMUONDigitCalibrator.cxx:216
 AliMUONDigitCalibrator.cxx:217
 AliMUONDigitCalibrator.cxx:218
 AliMUONDigitCalibrator.cxx:219
 AliMUONDigitCalibrator.cxx:220
 AliMUONDigitCalibrator.cxx:221
 AliMUONDigitCalibrator.cxx:222
 AliMUONDigitCalibrator.cxx:223
 AliMUONDigitCalibrator.cxx:224
 AliMUONDigitCalibrator.cxx:225
 AliMUONDigitCalibrator.cxx:226
 AliMUONDigitCalibrator.cxx:227
 AliMUONDigitCalibrator.cxx:228
 AliMUONDigitCalibrator.cxx:229
 AliMUONDigitCalibrator.cxx:230
 AliMUONDigitCalibrator.cxx:231
 AliMUONDigitCalibrator.cxx:232
 AliMUONDigitCalibrator.cxx:233
 AliMUONDigitCalibrator.cxx:234
 AliMUONDigitCalibrator.cxx:235
 AliMUONDigitCalibrator.cxx:236
 AliMUONDigitCalibrator.cxx:237
 AliMUONDigitCalibrator.cxx:238
 AliMUONDigitCalibrator.cxx:239
 AliMUONDigitCalibrator.cxx:240
 AliMUONDigitCalibrator.cxx:241
 AliMUONDigitCalibrator.cxx:242
 AliMUONDigitCalibrator.cxx:243
 AliMUONDigitCalibrator.cxx:244
 AliMUONDigitCalibrator.cxx:245
 AliMUONDigitCalibrator.cxx:246
 AliMUONDigitCalibrator.cxx:247
 AliMUONDigitCalibrator.cxx:248
 AliMUONDigitCalibrator.cxx:249
 AliMUONDigitCalibrator.cxx:250
 AliMUONDigitCalibrator.cxx:251
 AliMUONDigitCalibrator.cxx:252
 AliMUONDigitCalibrator.cxx:253
 AliMUONDigitCalibrator.cxx:254
 AliMUONDigitCalibrator.cxx:255
 AliMUONDigitCalibrator.cxx:256
 AliMUONDigitCalibrator.cxx:257
 AliMUONDigitCalibrator.cxx:258
 AliMUONDigitCalibrator.cxx:259
 AliMUONDigitCalibrator.cxx:260
 AliMUONDigitCalibrator.cxx:261
 AliMUONDigitCalibrator.cxx:262
 AliMUONDigitCalibrator.cxx:263
 AliMUONDigitCalibrator.cxx:264
 AliMUONDigitCalibrator.cxx:265
 AliMUONDigitCalibrator.cxx:266
 AliMUONDigitCalibrator.cxx:267
 AliMUONDigitCalibrator.cxx:268
 AliMUONDigitCalibrator.cxx:269
 AliMUONDigitCalibrator.cxx:270
 AliMUONDigitCalibrator.cxx:271
 AliMUONDigitCalibrator.cxx:272
 AliMUONDigitCalibrator.cxx:273
 AliMUONDigitCalibrator.cxx:274
 AliMUONDigitCalibrator.cxx:275
 AliMUONDigitCalibrator.cxx:276
 AliMUONDigitCalibrator.cxx:277
 AliMUONDigitCalibrator.cxx:278
 AliMUONDigitCalibrator.cxx:279
 AliMUONDigitCalibrator.cxx:280
 AliMUONDigitCalibrator.cxx:281
 AliMUONDigitCalibrator.cxx:282
 AliMUONDigitCalibrator.cxx:283
 AliMUONDigitCalibrator.cxx:284
 AliMUONDigitCalibrator.cxx:285
 AliMUONDigitCalibrator.cxx:286
 AliMUONDigitCalibrator.cxx:287
 AliMUONDigitCalibrator.cxx:288
 AliMUONDigitCalibrator.cxx:289
 AliMUONDigitCalibrator.cxx:290
 AliMUONDigitCalibrator.cxx:291
 AliMUONDigitCalibrator.cxx:292
 AliMUONDigitCalibrator.cxx:293
 AliMUONDigitCalibrator.cxx:294
 AliMUONDigitCalibrator.cxx:295
 AliMUONDigitCalibrator.cxx:296
 AliMUONDigitCalibrator.cxx:297
 AliMUONDigitCalibrator.cxx:298
 AliMUONDigitCalibrator.cxx:299
 AliMUONDigitCalibrator.cxx:300
 AliMUONDigitCalibrator.cxx:301
 AliMUONDigitCalibrator.cxx:302
 AliMUONDigitCalibrator.cxx:303
 AliMUONDigitCalibrator.cxx:304
 AliMUONDigitCalibrator.cxx:305
 AliMUONDigitCalibrator.cxx:306
 AliMUONDigitCalibrator.cxx:307
 AliMUONDigitCalibrator.cxx:308
 AliMUONDigitCalibrator.cxx:309
 AliMUONDigitCalibrator.cxx:310
 AliMUONDigitCalibrator.cxx:311
 AliMUONDigitCalibrator.cxx:312
 AliMUONDigitCalibrator.cxx:313
 AliMUONDigitCalibrator.cxx:314
 AliMUONDigitCalibrator.cxx:315
 AliMUONDigitCalibrator.cxx:316
 AliMUONDigitCalibrator.cxx:317
 AliMUONDigitCalibrator.cxx:318
 AliMUONDigitCalibrator.cxx:319
 AliMUONDigitCalibrator.cxx:320
 AliMUONDigitCalibrator.cxx:321
 AliMUONDigitCalibrator.cxx:322
 AliMUONDigitCalibrator.cxx:323
 AliMUONDigitCalibrator.cxx:324
 AliMUONDigitCalibrator.cxx:325
 AliMUONDigitCalibrator.cxx:326
 AliMUONDigitCalibrator.cxx:327
 AliMUONDigitCalibrator.cxx:328
 AliMUONDigitCalibrator.cxx:329
 AliMUONDigitCalibrator.cxx:330
 AliMUONDigitCalibrator.cxx:331
 AliMUONDigitCalibrator.cxx:332
 AliMUONDigitCalibrator.cxx:333
 AliMUONDigitCalibrator.cxx:334
 AliMUONDigitCalibrator.cxx:335
 AliMUONDigitCalibrator.cxx:336
 AliMUONDigitCalibrator.cxx:337
 AliMUONDigitCalibrator.cxx:338
 AliMUONDigitCalibrator.cxx:339
 AliMUONDigitCalibrator.cxx:340
 AliMUONDigitCalibrator.cxx:341
 AliMUONDigitCalibrator.cxx:342
 AliMUONDigitCalibrator.cxx:343
 AliMUONDigitCalibrator.cxx:344
 AliMUONDigitCalibrator.cxx:345
 AliMUONDigitCalibrator.cxx:346
 AliMUONDigitCalibrator.cxx:347
 AliMUONDigitCalibrator.cxx:348
 AliMUONDigitCalibrator.cxx:349
 AliMUONDigitCalibrator.cxx:350
 AliMUONDigitCalibrator.cxx:351
 AliMUONDigitCalibrator.cxx:352
 AliMUONDigitCalibrator.cxx:353
 AliMUONDigitCalibrator.cxx:354
 AliMUONDigitCalibrator.cxx:355
 AliMUONDigitCalibrator.cxx:356
 AliMUONDigitCalibrator.cxx:357
 AliMUONDigitCalibrator.cxx:358
 AliMUONDigitCalibrator.cxx:359
 AliMUONDigitCalibrator.cxx:360
 AliMUONDigitCalibrator.cxx:361
 AliMUONDigitCalibrator.cxx:362
 AliMUONDigitCalibrator.cxx:363
 AliMUONDigitCalibrator.cxx:364
 AliMUONDigitCalibrator.cxx:365
 AliMUONDigitCalibrator.cxx:366
 AliMUONDigitCalibrator.cxx:367
 AliMUONDigitCalibrator.cxx:368
 AliMUONDigitCalibrator.cxx:369
 AliMUONDigitCalibrator.cxx:370
 AliMUONDigitCalibrator.cxx:371
 AliMUONDigitCalibrator.cxx:372
 AliMUONDigitCalibrator.cxx:373
 AliMUONDigitCalibrator.cxx:374
 AliMUONDigitCalibrator.cxx:375
 AliMUONDigitCalibrator.cxx:376
 AliMUONDigitCalibrator.cxx:377
 AliMUONDigitCalibrator.cxx:378
 AliMUONDigitCalibrator.cxx:379
 AliMUONDigitCalibrator.cxx:380
 AliMUONDigitCalibrator.cxx:381
 AliMUONDigitCalibrator.cxx:382
 AliMUONDigitCalibrator.cxx:383
 AliMUONDigitCalibrator.cxx:384
 AliMUONDigitCalibrator.cxx:385
 AliMUONDigitCalibrator.cxx:386
 AliMUONDigitCalibrator.cxx:387
 AliMUONDigitCalibrator.cxx:388
 AliMUONDigitCalibrator.cxx:389
 AliMUONDigitCalibrator.cxx:390
 AliMUONDigitCalibrator.cxx:391
 AliMUONDigitCalibrator.cxx:392
 AliMUONDigitCalibrator.cxx:393
 AliMUONDigitCalibrator.cxx:394
 AliMUONDigitCalibrator.cxx:395
 AliMUONDigitCalibrator.cxx:396
 AliMUONDigitCalibrator.cxx:397
 AliMUONDigitCalibrator.cxx:398
 AliMUONDigitCalibrator.cxx:399
 AliMUONDigitCalibrator.cxx:400
 AliMUONDigitCalibrator.cxx:401
 AliMUONDigitCalibrator.cxx:402
 AliMUONDigitCalibrator.cxx:403
 AliMUONDigitCalibrator.cxx:404
 AliMUONDigitCalibrator.cxx:405
 AliMUONDigitCalibrator.cxx:406
 AliMUONDigitCalibrator.cxx:407
 AliMUONDigitCalibrator.cxx:408
 AliMUONDigitCalibrator.cxx:409
 AliMUONDigitCalibrator.cxx:410
 AliMUONDigitCalibrator.cxx:411
 AliMUONDigitCalibrator.cxx:412
 AliMUONDigitCalibrator.cxx:413
 AliMUONDigitCalibrator.cxx:414
 AliMUONDigitCalibrator.cxx:415
 AliMUONDigitCalibrator.cxx:416
 AliMUONDigitCalibrator.cxx:417
 AliMUONDigitCalibrator.cxx:418
 AliMUONDigitCalibrator.cxx:419
 AliMUONDigitCalibrator.cxx:420
 AliMUONDigitCalibrator.cxx:421
 AliMUONDigitCalibrator.cxx:422
 AliMUONDigitCalibrator.cxx:423
 AliMUONDigitCalibrator.cxx:424
 AliMUONDigitCalibrator.cxx:425
 AliMUONDigitCalibrator.cxx:426
 AliMUONDigitCalibrator.cxx:427
 AliMUONDigitCalibrator.cxx:428
 AliMUONDigitCalibrator.cxx:429
 AliMUONDigitCalibrator.cxx:430
 AliMUONDigitCalibrator.cxx:431
 AliMUONDigitCalibrator.cxx:432
 AliMUONDigitCalibrator.cxx:433
 AliMUONDigitCalibrator.cxx:434
 AliMUONDigitCalibrator.cxx:435
 AliMUONDigitCalibrator.cxx:436
 AliMUONDigitCalibrator.cxx:437
 AliMUONDigitCalibrator.cxx:438
 AliMUONDigitCalibrator.cxx:439
 AliMUONDigitCalibrator.cxx:440
 AliMUONDigitCalibrator.cxx:441
 AliMUONDigitCalibrator.cxx:442
 AliMUONDigitCalibrator.cxx:443
 AliMUONDigitCalibrator.cxx:444
 AliMUONDigitCalibrator.cxx:445
 AliMUONDigitCalibrator.cxx:446
 AliMUONDigitCalibrator.cxx:447
 AliMUONDigitCalibrator.cxx:448
 AliMUONDigitCalibrator.cxx:449
 AliMUONDigitCalibrator.cxx:450
 AliMUONDigitCalibrator.cxx:451
 AliMUONDigitCalibrator.cxx:452
 AliMUONDigitCalibrator.cxx:453
 AliMUONDigitCalibrator.cxx:454
 AliMUONDigitCalibrator.cxx:455
 AliMUONDigitCalibrator.cxx:456
 AliMUONDigitCalibrator.cxx:457
 AliMUONDigitCalibrator.cxx:458
 AliMUONDigitCalibrator.cxx:459
 AliMUONDigitCalibrator.cxx:460
 AliMUONDigitCalibrator.cxx:461
 AliMUONDigitCalibrator.cxx:462
 AliMUONDigitCalibrator.cxx:463
 AliMUONDigitCalibrator.cxx:464
 AliMUONDigitCalibrator.cxx:465
 AliMUONDigitCalibrator.cxx:466
 AliMUONDigitCalibrator.cxx:467
 AliMUONDigitCalibrator.cxx:468
 AliMUONDigitCalibrator.cxx:469
 AliMUONDigitCalibrator.cxx:470
 AliMUONDigitCalibrator.cxx:471
 AliMUONDigitCalibrator.cxx:472
 AliMUONDigitCalibrator.cxx:473
 AliMUONDigitCalibrator.cxx:474
 AliMUONDigitCalibrator.cxx:475
 AliMUONDigitCalibrator.cxx:476
 AliMUONDigitCalibrator.cxx:477
 AliMUONDigitCalibrator.cxx:478
 AliMUONDigitCalibrator.cxx:479
 AliMUONDigitCalibrator.cxx:480
 AliMUONDigitCalibrator.cxx:481
 AliMUONDigitCalibrator.cxx:482
 AliMUONDigitCalibrator.cxx:483
 AliMUONDigitCalibrator.cxx:484
 AliMUONDigitCalibrator.cxx:485
 AliMUONDigitCalibrator.cxx:486
 AliMUONDigitCalibrator.cxx:487
 AliMUONDigitCalibrator.cxx:488
 AliMUONDigitCalibrator.cxx:489
 AliMUONDigitCalibrator.cxx:490
 AliMUONDigitCalibrator.cxx:491
 AliMUONDigitCalibrator.cxx:492
 AliMUONDigitCalibrator.cxx:493
 AliMUONDigitCalibrator.cxx:494
 AliMUONDigitCalibrator.cxx:495
 AliMUONDigitCalibrator.cxx:496
 AliMUONDigitCalibrator.cxx:497
 AliMUONDigitCalibrator.cxx:498
 AliMUONDigitCalibrator.cxx:499
 AliMUONDigitCalibrator.cxx:500
 AliMUONDigitCalibrator.cxx:501
 AliMUONDigitCalibrator.cxx:502
 AliMUONDigitCalibrator.cxx:503
 AliMUONDigitCalibrator.cxx:504
 AliMUONDigitCalibrator.cxx:505
 AliMUONDigitCalibrator.cxx:506
 AliMUONDigitCalibrator.cxx:507
 AliMUONDigitCalibrator.cxx:508
 AliMUONDigitCalibrator.cxx:509