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 "AliMUONPedestal.h"
#include "AliMUONErrorCounter.h"
#include "AliMUONVStore.h"
#include "AliMUON2DMap.h"
#include "AliMUONCalibParamND.h"
#include "AliMpConstants.h"
#include <TString.h>
#include <TTimeStamp.h>
#include <TMath.h>
#include <TTree.h>
#include <TFile.h>
#include <TH1F.h>
#include <THashList.h>
#include <Riostream.h>

#include <sstream>

//-----------------------------------------------------------------------------
/// \class AliMUONPedestal
///
/// Implementation of the pedestal computing
///
/// add
/// 
///
/// \author Alberto Baldisseri, JL Charvet (05/05/2009)
//-----------------------------------------------------------------------------

using std::ostream;
using std::ifstream;
using std::endl;
using std::cout;
using std::ios;
/// \cond CLASSIMP
ClassImp(AliMUONPedestal)
/// \endcond

//______________________________________________________________________________
AliMUONPedestal::AliMUONPedestal()
: TObject(),
//fN(0),
fNCurrentEvents(0),
fNEvthreshold(0),
fSorting(0),
fNEvents(0),
fRunNumber(0),
fNChannel(0),
fNManu(0),
fNManuConfig(0),
fConfig(1),
fStatusDA(0),
fHistos(0),
fErrorBuspatchTable(new AliMUON2DMap(kFALSE)),
fManuBuspatchTable(new AliMUON2DMap(kFALSE)),
fManuBPoutofconfigTable(new AliMUON2DMap(kFALSE)),
fDate(new TTimeStamp()),
fFilcout(0),
fHistoFileName(),
fPedestalStore(new AliMUON2DMap(kTRUE)),
fIndex(-1),
fPrefixDA(),
fPrefixLDC(),
fHistoFile(0),
fTree(0)
{
/// Default constructor
}
//______________________________________________________________________________
AliMUONPedestal::AliMUONPedestal(TRootIOCtor* /*dummy*/)
: TObject(),
//fN(0),
fNCurrentEvents(0),
fNEvthreshold(0),
fSorting(0),
fNEvents(0),
fRunNumber(0),
fNChannel(0),
fNManu(0),
fNManuConfig(0),
fConfig(1),
fStatusDA(0),
fHistos(0),
fErrorBuspatchTable(0),
fManuBuspatchTable(0),
fManuBPoutofconfigTable(0),
fDate(0),
fFilcout(0),
fHistoFileName(),
fPedestalStore(0),
fIndex(-1),
fPrefixDA(),
fPrefixLDC(),
fHistoFile(0),
fTree(0)
{
/// Root IO constructor
}

//______________________________________________________________________________
AliMUONPedestal::~AliMUONPedestal()
{
/// Destructor
  delete fErrorBuspatchTable;
  delete fManuBuspatchTable;
  delete fPedestalStore;
  delete fManuBPoutofconfigTable;
}

//______________________________________________________________________________
const char* 
AliMUONPedestal::GetHistoFileName() const
{
  /// Return the name of file we use to store histograms
  return fHistoFileName.Data();
}

//______________________________________________________________________________
void AliMUONPedestal::LoadConfig(const char* dbfile)
{
  /// Load MUONTRK configuration from ascii file "dbfile" (in DetDB)

  Int_t manuId;
  Int_t busPatchId;

  ifstream filein(dbfile,ios::in);
  
  while (!filein.eof())
    { 
      filein >> busPatchId >> manuId;

      AliMUONVCalibParam* ped = 
	static_cast<AliMUONVCalibParam*>(fPedestalStore ->FindObject(busPatchId, manuId));

      if (!ped) {
	fNManuConfig++;
	fNChannel+=64;
  ped = new AliMUONCalibParamND(2, AliMpConstants::ManuNofChannels(),busPatchId, manuId, -1.); // put default wise -1, not connected channel
	fPedestalStore ->Add(ped);  

        if ( ! fManuBuspatchTable->FindObject(busPatchId,manuId) )
	  {
	    // New (buspatch,manu)
	    AliMUONErrorCounter* manuCounter = new AliMUONErrorCounter(busPatchId,manuId);
	    fManuBuspatchTable->Add(manuCounter);
	  }
      }
    }
} 
//______________________________________________________________________________
void AliMUONPedestal::MakePed(Int_t busPatchId, Int_t manuId, Int_t channelId, Int_t charge)
{
  static Int_t tree_charge=0;
  static Int_t warn=0;
  Int_t DDL= busPatchId/100+2560;
  /// Compute pedestals values
  AliMUONVCalibParam* ped = 
    static_cast<AliMUONVCalibParam*>(fPedestalStore ->FindObject(busPatchId, manuId));


  if(!tree_charge && fHistos==2)
    {
      fTree = new TTree("tc","Charge tree");
      fTree->Branch("bp",&busPatchId,"bp/I");
      fTree->Branch("manu",&manuId,",manu/I");
      fTree->Branch("channel",&channelId,",channel/I");
      fTree->Branch("DDL",&DDL,",DDL/I");
      fTree->Branch("charge",&charge,"charge/I");
      //      fTree->Branch("Pedestal",&Pedestal,"Pedestal/D");
      //      fTree->Branch("chargetrue",&chargeminusPed,"chargetrue/D");
      //      fTree->Branch("evt",&evt,"evt/I");
      tree_charge=1;
    }


  if (!ped)   
    {
      if(fConfig) 
	{  // Fill out_of_config (buspatch,manu) table
	  if (!(static_cast<AliMUONErrorCounter*>(fManuBPoutofconfigTable->FindObject(busPatchId,manuId))))
	    fManuBPoutofconfigTable->Add(new AliMUONErrorCounter(busPatchId,manuId));
	  if(warn<10) cout << fPrefixLDC.Data() << " : !!! WARNING  : busPatchId = " << busPatchId << " manuId = " << manuId << " not in the Detector configuration " << endl;
	  else if(warn==10) cout << fPrefixLDC.Data() << " : !!! see .log file for an exhaustive list of (busPatchId, manuId) out of Detector configuration \n" << endl; 
	   warn++;
	   (*fFilcout) <<" !!! WARNING  : busPatchId = " << busPatchId << " manuId = " << manuId << " not in the Detector configuration " << endl; 
	}
      else {fNManu++;}
      fNChannel+=64;
      // put default wise -1, not connected channel
      ped = new AliMUONCalibParamND(2, AliMpConstants::ManuNofChannels(),busPatchId, manuId, -1.); 
      fPedestalStore ->Add(ped);  
    }

  // Initialization for the first value
  if (ped->ValueAsDouble(channelId, 0) == -1)  
    { 
      if(fConfig && channelId == 0){fNManu++;}
      ped->SetValueAsDouble(channelId, 0, 0.);
    }
  if (ped->ValueAsDouble(channelId, 1) == -1) ped->SetValueAsDouble(channelId, 1, 0.);

  if(fHistos==2) fTree->Fill();  

  Double_t pedMean  = ped->ValueAsDouble(channelId, 0) + (Double_t) charge;
  Double_t pedSigma = ped->ValueAsDouble(channelId, 1) + (Double_t) charge*charge;

  ped->SetValueAsDouble(channelId, 0, pedMean);
  ped->SetValueAsDouble(channelId, 1, pedSigma);

  AliMUONErrorCounter* manuCounter;
  if (!(manuCounter = static_cast<AliMUONErrorCounter*>(fManuBuspatchTable->FindObject(busPatchId,manuId))))
    {
      // New (buspatch,manu)
      manuCounter = new AliMUONErrorCounter(busPatchId,manuId);
      fManuBuspatchTable->Add(manuCounter);
    }
  else
    {
      // Existing buspatch
      manuCounter->Increment();
    }	
}
//______________________________________________________________________________
void AliMUONPedestal::Finalize()
{
  /// final polishing of the store
  
  Double_t pedMean;
  Double_t pedSigma;
  Double_t pedSigmalimit=0.5;
  Int_t busPatchId;
  Int_t manuId;
  Int_t channelId;
  Int_t status=0;

  // print in logfile
  if (fErrorBuspatchTable->GetSize())
    {
      cout<< "\n" << fPrefixLDC.Data() << " : See list of Buspatches with lower statistics (due to parity errors) in .log or .ped file "<<endl;
      (*fFilcout)<<"\nWarning: Buspatches with less statistics (due to parity errors)"<<endl;
      TIter nextParityError(fErrorBuspatchTable->CreateIterator());
      AliMUONErrorCounter* parityerror;
      while((parityerror = static_cast<AliMUONErrorCounter*>(nextParityError())))
	{
	  //	  cout<<"  bp "<<parityerror->BusPatch()<<": used events = "<<fNEvents-parityerror->Events()<<endl;
	  (*fFilcout)<<"  bp "<<parityerror->BusPatch()<<": used events = "<<fNEvents-parityerror->Events()<<endl;
	}
    }
  
  Int_t nADC4090=0;
  Int_t nADCmax=0;
  // iterator over pedestal
  TIter next(fPedestalStore ->CreateIterator());
  AliMUONVCalibParam* ped;

  while ( ( ped = dynamic_cast<AliMUONVCalibParam*>(next() ) ) )
    {
      busPatchId              = ped->ID0();
      manuId                  = ped->ID1();
      if(manuId==0)
	{
	  cout << fPrefixLDC.Data() << " : Warning: ManuId = " << manuId << " !!! in  BP = " << busPatchId << endl;
	  (*fFilcout) << "Warning: ManuId = " << manuId << " !!! in  BP = " << busPatchId << endl;
	}
      Int_t eventCounter;
      // Correct the number of events for buspatch with errors
      AliMUONErrorCounter* errorCounter;
      if ((errorCounter = (AliMUONErrorCounter*)fErrorBuspatchTable->FindObject(busPatchId)))
	{
	  eventCounter = fNEvents - errorCounter->Events();
	}
      else
	{
	  eventCounter = fNEvents;
	}
      Int_t occupancy=0; // channel missing in raw data or read but rejected (case of parity error)
      // value of (buspatch, manu) occupancy
      AliMUONErrorCounter* manuCounter;
      manuCounter = static_cast<AliMUONErrorCounter*>(fManuBuspatchTable->FindObject(busPatchId,manuId));
      if(eventCounter>0)occupancy = manuCounter->Events()/64/eventCounter;
      if(occupancy>1)
	{
	  cout << fPrefixLDC.Data() << " : Warning: ManuId = " << manuId << " !!! in  BP = " << busPatchId << " occupancy (>1) = " << occupancy << endl;
	  (*fFilcout) << "Warning: ManuId = " << manuId << " !!! in  BP = " << busPatchId << " occupancy (>1) = " << occupancy <<endl;
	}

      for (channelId = 0; channelId < ped->Size() ; ++channelId) 
	{
	  pedMean  = ped->ValueAsDouble(channelId, 0);

	  if (pedMean >= 0) // connected channels
	    {
	      ped->SetValueAsDouble(channelId, 0, pedMean/(Double_t)eventCounter);
	      pedMean  = ped->ValueAsDouble(channelId, 0);
	      pedSigma = ped->ValueAsDouble(channelId, 1);
	      ped->SetValueAsDouble(channelId, 1, TMath::Sqrt(TMath::Abs(pedSigma/(Double_t)eventCounter - pedMean*pedMean)));

	      if(eventCounter < fNEvthreshold )
		{ nADCmax++; ped->SetValueAsDouble(channelId, 0, ADCMax());
		  ped->SetValueAsDouble(channelId, 1, ADCMax());}
	      if( ped->ValueAsDouble(channelId, 1) < pedSigmalimit )
		{ nADC4090++; ped->SetValueAsDouble(channelId, 0, ADCMax()-5);
		  ped->SetValueAsDouble(channelId, 1, ADCMax()-5);}
	      if(manuId == 0 || occupancy>1)
		{ nADCmax++; ped->SetValueAsDouble(channelId, 0, ADCMax());
		  ped->SetValueAsDouble(channelId, 1, ADCMax());
		  if(occupancy>1 && channelId==0)ped->SetValueAsDouble(channelId, 0, ADCMax()+occupancy);}
	    }
	  else
	    { nADCmax++; ped->SetValueAsDouble(channelId, 0, ADCMax());
	      ped->SetValueAsDouble(channelId, 1, ADCMax());}
	}
    }

  float frac1=0. , frac2=0. ;
  float frac_badped = 0.25 ; // maximal acceptable ratio of bad pedestals
  char* detail;
 
  if(fNChannel)
    {
      if(nADCmax>0)
	{ frac1 = float(nADCmax)/float(fNChannel); 
	  detail=Form("%s : Warning: Nb of Channels with bad Pedestal (Ped=4095) = %d over %d (%6.4f)",fPrefixLDC.Data(),nADCmax,fNChannel,frac1);
	  printf("%s\n",detail);
	  (*fFilcout) <<  detail << endl;}

      if(nADC4090>0)
	{ frac2 = 1.*nADC4090/fNChannel; 
	  detail=Form("%s : Warning: Nb of Channels with PedSigma<0.5 (Ped=4090) = %d over %d (%6.4f)",fPrefixLDC.Data(),nADC4090,fNChannel,frac2);
	  printf("%s\n",detail);
	  (*fFilcout) <<  detail << endl; }

      if (frac1+frac2 > frac_badped) { status=-1 ;
	detail=Form("\n%s !!! ERROR : fraction of Channels with Pedestal>=4090 = %6.4f (> %5.3f)  (status= %d) \n",fPrefixLDC.Data(),frac1+frac2,frac_badped,status);
	(*fFilcout) <<  detail << endl; printf("%s",detail) ;}
    }
  else { status= -1;
    detail=Form("\n%s !!! ERROR : Nb good channel = 0 (all pedestals are forced to 4095) !!! (status= %d)\n",fPrefixLDC.Data(),status); 
    cout << detail; (*fFilcout) << detail ;}
   
  SetStatusDA(status);
}
//______________________________________________________________________________
void AliMUONPedestal::MakeASCIIoutput(ostream& out) const
{
/// put pedestal store in the output stream

  out<<"//===========================================================================" << endl;
  out<<"//                 Pedestal file calculated by "<< fPrefixDA.Data() << endl;
  out<<"//===========================================================================" << endl;
  out<<"//     * Run           : " << fRunNumber << endl; 
  out<<"//     * Date          : " << fDate->AsString("l") <<endl;
  out<<"//     * Statictics    : " << fNEvents << endl;
  if(fConfig)
    out<<"//     * Nb of MANUS   : " << fNManuConfig << " read in the Det. config. " << endl;
  out<<"//     * Nb of MANUS   : " << fNManu << " read in raw data " << endl;
  out<<"//     * Nb of MANUS   : " << fNChannel/64 << " written in pedestal file " << endl;
  out<<"//     * Nb of channels: " << fNChannel << endl;
  out<<"//"<<endl;
  out<<"//     * Below " << fNEvthreshold << " events=> Ped.&sig.=4095" << endl;
  out<<"//     * PedSigma < 0.5 => Ped.&sig.=4090" << endl;

  if (fErrorBuspatchTable->GetSize())
    {
      out<<"//"<<endl;
      out<<"//    * Buspatches with less statistics (due to parity errors)"<<endl;
      TIter next(fErrorBuspatchTable->CreateIterator());
      AliMUONErrorCounter* parityerror;
      while((parityerror = static_cast<AliMUONErrorCounter*>(next())))
	{
	  if(fNEvents-parityerror->Events()>fNEvthreshold)
	    { out<<"//      BusPatch = "<<parityerror->BusPatch()<<"\t Nevents used = "<<fNEvents-parityerror->Events()<<endl; }
	  else
	    { out<<"//      BusPatch = "<<parityerror->BusPatch()<<"\t Nevents used = "<<fNEvents-parityerror->Events()<< " (Ped.&sig.=4095)" << endl; }
	}
    }  
  Int_t writitle=0;
  Int_t occupancy=1;
  if(occupancy)
    {
      TIter next(fPedestalStore ->CreateIterator());
      AliMUONVCalibParam* ped;
      while ( ( ped = dynamic_cast<AliMUONVCalibParam*>(next() ) ) )
	{
	  Int_t busPatchId = ped->ID0();
	  Int_t manuId = ped->ID1();
	  Double_t pedMean  = ped->ValueAsDouble(0, 0); // check pedestal value for channelId=0

	  if(pedMean>ADCMax()) 
	    {
	      writitle++;
	      if(writitle==1){ 
		out<<"//"<<endl;
		out<<"//    * Puzzling (Buspatch,Manu) read in raw data ? (Ped.&sig.=4095)"<<endl;}
	      occupancy=TMath::Nint(pedMean-ADCMax());
	      ped->SetValueAsDouble(0, 0, ADCMax());
	      out<<"//      BusPatch = "<< busPatchId <<"\t ManuId =  "<< manuId << "\t occupancy = " << occupancy  << endl;
	    }

	  if (manuId==0 || (fConfig && static_cast<AliMUONErrorCounter*>(fManuBPoutofconfigTable->FindObject(busPatchId,manuId))))
	    {
	      writitle++;
	      if(writitle==1){ 
		out<<"//"<<endl;
		out<<"//    * Puzzling (Buspatch,Manu) read in raw data ? (Ped.&sig.=4095)"<<endl;}
	      out<<"//      BusPatch = "<< busPatchId <<"\t ManuId =  "<< manuId << "\t missing in the mapping" << endl;
	    }
	}
    }
  out<<"//"<<endl;
  out<<"//---------------------------------------------------------------------------" << endl;
  out<<"//---------------------------------------------------------------------------" << endl;
  out<<"//      BP     MANU     CH.      MEAN    SIGMA"<<endl;
  out<<"//---------------------------------------------------------------------------" << endl;

  TIter next(fPedestalStore->CreateIterator());
  AliMUONVCalibParam* ped;  

  // Sorting 
  if  (fSorting)
    {
      printf("%s : ..... sorting pedestal values .....\n",fPrefixLDC.Data());
      THashList pedtable(100,2);
      while ( ( ped = dynamic_cast<AliMUONVCalibParam*>(next() ) ) )
      {
        pedtable.Add(ped);
      }
      pedtable.Sort();
      //      iterator over sorted pedestal
      TIter nextSorted(&pedtable);
      while ( (ped = (AliMUONVCalibParam*)(nextSorted()) ) )
      {
        Int_t busPatchId = ped->ID0();
        Int_t manuId = ped->ID1();
        for ( Int_t channelId = 0; channelId < ped->Size(); ++channelId ) 
        {
          Double_t pedMean  = ped->ValueAsDouble(channelId, 0);
          Double_t pedSigma = ped->ValueAsDouble(channelId, 1);
          out << "\t" << busPatchId << "\t" << manuId <<"\t"<< channelId << "\t" << pedMean <<"\t"<< pedSigma << endl;
        }
      }
    }
  else
    {
      while ( ( ped = dynamic_cast<AliMUONVCalibParam*>(next() ) ) )
	{
	  Int_t busPatchId = ped->ID0();
	  Int_t manuId = ped->ID1();
	  for ( Int_t channelId = 0; channelId < ped->Size(); ++channelId ) 
	    {
	      Double_t pedMean  = ped->ValueAsDouble(channelId, 0);
	      Double_t pedSigma = ped->ValueAsDouble(channelId, 1);
	      out << "\t" << busPatchId << "\t" << manuId <<"\t"<< channelId << "\t" << pedMean <<"\t"<< pedSigma << endl;
	    }
	}
    }
}

//______________________________________________________________________________
void AliMUONPedestal::CreateControlHistos()
{
// Create histo 
  fHistoFileName=Form("%s.root",fPrefixDA.Data());
  fHistoFile = new TFile(fHistoFileName,"RECREATE","MUON Tracking pedestals");
}
//______________________________________________________________________________
void AliMUONPedestal::MakeControlHistos()
{
  /// Create control histograms
  if (fIndex>=0) return; // Pedestal run (fIndex=-1)

  Double_t pedMean;
  Double_t pedSigma;
  Double_t evt;
  Int_t busPatchId;
  Int_t manuId;
  Int_t channelId;
  Int_t DDL;

// histo
//  TFile*  histoFile = 0;
  TTree* tree = 0;
  TH1F* pedMeanHisto = 0;
  TH1F* pedSigmaHisto = 0;
    
  //  fHistoFileName=Form("%s.root",fPrefixDA.Data());
  //  histoFile = new TFile(fHistoFileName,"RECREATE","MUON Tracking pedestals");

  Int_t nx = ADCMax()+1;
  Int_t xmin = 0;
  Int_t xmax = ADCMax(); 
  pedMeanHisto = new TH1F("pedmean_allch","Pedestal mean all channels",nx,xmin,xmax);
  pedMeanHisto->SetDirectory(fHistoFile);

  nx = 201;
  xmin = 0;
  xmax = 200; 
  pedSigmaHisto = new TH1F("pedsigma_allch","Pedestal sigma all channels",nx,xmin,xmax);
  pedSigmaHisto->SetDirectory(fHistoFile);

  tree = new TTree("t","Pedestal tree");
  tree->Branch("DDL",&DDL,",DDL/I");
  tree->Branch("bp",&busPatchId,"bp/I");
  tree->Branch("manu",&manuId,",manu/I");
  tree->Branch("channel",&channelId,",channel/I");
  tree->Branch("pedMean",&pedMean,",pedMean/D");
  tree->Branch("pedSigma",&pedSigma,",pedSigma/D");
  tree->Branch("nevt",&evt,",evt/D");

  // iterator over pedestal
  TIter next(fPedestalStore ->CreateIterator());
  AliMUONVCalibParam* ped;
  AliMUONErrorCounter* manuCounter;
  
  while ( ( ped = dynamic_cast<AliMUONVCalibParam*>(next() ) ) )
  {
    busPatchId = ped->ID0();
    manuId = ped->ID1();
    DDL= busPatchId/100+2560;
    
    for ( channelId = 0; channelId < ped->Size(); ++channelId ) 
    {
      pedMean  = ped->ValueAsDouble(channelId, 0);
      pedSigma = ped->ValueAsDouble(channelId, 1);
      manuCounter = static_cast<AliMUONErrorCounter*>(fManuBuspatchTable->FindObject(busPatchId,manuId));
      evt = manuCounter->Events()/64;
          
      pedMeanHisto->Fill(pedMean);
      pedSigmaHisto->Fill(pedSigma);
      tree->Fill();  
    }
  }
    
  fHistoFile->Write();  
  fHistoFile->Close(); 

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