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$

/// \class AliMUONTrackerDataMaker
/// 
/// Implementation of VTrackerDataMaker to read raw data and 
/// calibrate it (if required)
/// 
/// \author Laurent Aphecetche, Subatech

#include "AliMUONTrackerDataMaker.h"

#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliCodeTimer.h"
#include "AliDAQ.h"
#include "AliLog.h"
#include "AliMUON2DMap.h"
#include "AliMUONCalibParamND.h"
#include "AliMUONCalibrationData.h"
#include "AliMUONDigitCalibrator.h"
#include "AliMUONLogger.h"
#include "AliMUONRawStreamTrackerHP.h"
#include "AliMUONTrackerData.h"
#include "AliMpDDLStore.h"
#include "AliRawEventHeaderBase.h"
#include "AliRawReader.h"
#include "Riostream.h"

using std::endl;
using std::cout;
/// \cond CLASSIMP
ClassImp(AliMUONTrackerDataMaker)
/// \endcond

Int_t AliMUONTrackerDataMaker::fgkCounter(0);

//_____________________________________________________________________________
AliMUONTrackerDataMaker::AliMUONTrackerDataMaker(TRootIOCtor*) 
: 
AliMUONVTrackerDataMaker(),
fRawReader(0x0),
fAccumulatedData(0x0),
fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(0x0),
fDigitCalibrator(0x0),
fCalibrationData(0x0), 
fSource(""),
fOCDBPath(""),
fNumberOfEvents(0),
fRunNumber(0),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kFALSE),
fIsEventByEvent(kFALSE),
fLogger(0x0),
fLastEventWasEmpty(kFALSE),
fNumberOfPhysicsEvents(0),
fNumberOfGoodPhysicsEvents(0),
fTryRecover(kFALSE),
fFirstEvent(-1),
fLastEvent(-1)
{
/// Root IO ctor
}

//_____________________________________________________________________________
AliMUONTrackerDataMaker::AliMUONTrackerDataMaker(const AliMUONRecoParam* recoParam,
                                                 Int_t runNumber,
                                                 AliRawReader* rawReader,
                                                 const char* cdbPath,
                                                 const char* calibMode,
                                                 Bool_t histogram,
                                                 Double_t xmin,
                                                 Double_t xmax)
:
AliMUONVTrackerDataMaker(),
fRawReader(rawReader),
fAccumulatedData(0x0),
fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(new AliMUON2DMap(true)),
fDigitCalibrator(0x0),
fCalibrationData(0x0), 
fSource(""),
fOCDBPath(cdbPath),
fNumberOfEvents(0),
fRunNumber(runNumber),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kFALSE),
fIsEventByEvent(kFALSE),
fLogger(0x0),
fLastEventWasEmpty(kFALSE),
fNumberOfPhysicsEvents(0),
fNumberOfGoodPhysicsEvents(0),
fTryRecover(kFALSE),
fFirstEvent(-1),
fLastEvent(-1)
{
  /// Ctor in which this object will NOT be the owner of the reader
  /// and can NOT apply rewind to it, nor use Next on it. 
  Ctor(recoParam,runNumber,calibMode,histogram,xmin,xmax);
}


//_____________________________________________________________________________
AliMUONTrackerDataMaker::AliMUONTrackerDataMaker(const AliMUONRecoParam* recoParam,
                                                 AliRawReader* rawReader,
                                                 const char* cdbPath,
                                                 const char* calibMode,
                                                 Bool_t histogram,
                                                 Double_t xmin,
                                                 Double_t xmax)
:
AliMUONVTrackerDataMaker(),
fRawReader(rawReader),
fAccumulatedData(0x0),
fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(new AliMUON2DMap(true)),
fDigitCalibrator(0x0),
fCalibrationData(0x0), 
fSource(""),
fOCDBPath(cdbPath),
fNumberOfEvents(0),
fRunNumber(0),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kTRUE),
fIsEventByEvent(kFALSE),
fLogger(0x0),
fLastEventWasEmpty(kFALSE),
fNumberOfPhysicsEvents(0),
fNumberOfGoodPhysicsEvents(0),
fTryRecover(kFALSE),
fFirstEvent(-1),
fLastEvent(-1)
{
  /// Ctor in which we take the ownership of the rawReader, so we can rewind
  /// and advance it as we wish
  
  if ( fRawReader && fRawReader->NextEvent() ) 
  {
    fRunNumber = fRawReader->GetRunNumber();
    fRawReader->RewindEvents();
  }
  
  Ctor(recoParam,fRunNumber,calibMode,histogram,xmin,xmax);
}

//_____________________________________________________________________________
AliMUONTrackerDataMaker::AliMUONTrackerDataMaker(AliRawReader* rawReader, Bool_t histogram)
:
AliMUONVTrackerDataMaker(),
fRawReader(rawReader),
fAccumulatedData(0x0),
fIsOwnerOfAccumulatedData(kTRUE),
fOneEventData(new AliMUON2DMap(true)),
fDigitCalibrator(0x0),
fCalibrationData(0x0), 
fSource(""),
fOCDBPath(""),
fNumberOfEvents(0),
fRunNumber(0),
fIsRunning(kFALSE),
fIsOwnerOfRawReader(kTRUE),
fIsEventByEvent(kFALSE),
fLogger(0x0),
fLastEventWasEmpty(kFALSE),
fNumberOfPhysicsEvents(0),
fNumberOfGoodPhysicsEvents(0),
fTryRecover(kFALSE),
fFirstEvent(-1),
fLastEvent(-1)
{
  /// Ctor from raw data reader
  if ( fRawReader && fRawReader->NextEvent() ) 
  {
    fRunNumber = fRawReader->GetRunNumber();
    fRawReader->RewindEvents();
  }
  
  Ctor(0x0,fRunNumber,"",histogram);
  
}

//_____________________________________________________________________________
void 
AliMUONTrackerDataMaker::Ctor(const AliMUONRecoParam* recoParam,
                              Int_t runNumber,
                              const char* calibMode,
                              Bool_t histogram,
                              Double_t xmin, Double_t xmax)
{
  /// "designated constructor"

  Bool_t calibrate = ( strlen(calibMode) > 0 );
  
  TString name;
  TString type("RAW");
  
  if ( calibrate ) 
  {
    TString scalib(calibMode);
    scalib.ToUpper();
    if ( scalib == "GAIN" ) type = "CALC";
    if ( scalib == "NOGAIN" ) type = "CALZ";
    if ( scalib == "GAINCONSTANTCAPA") type = "CALG";
    if ( scalib == "INJECTIONGAIN" ) type = "CALE";
  }
  
  if ( !fRunNumber ) 
  {
    ++fgkCounter;
    name = Form("%s%s_%d",(histogram?"H":""),type.Data(),fgkCounter);
  }
  else
  {
    name = Form("%s%s%d",(histogram?"H":""),type.Data(),fRunNumber);
  }
  
  fAccumulatedData = new AliMUONTrackerData(name.Data(),"charge values",1);
  fAccumulatedData->SetDimensionName(0,(calibrate ? "Calibrated charge" : "Raw charge"));
  if (histogram)
  {
    fAccumulatedData->MakeHistogramForDimension(0,kTRUE,xmin,xmax);
  }
  
  if ( calibrate ) 
  {
    fCalibrationData = new AliMUONCalibrationData(runNumber);
    
    // force the reading of calibration NOW
    // FIXME: not really elegant and error prone (as we have the list of calib data twice, 
    // once here and once in the digitcalibrator class, hence the change of them getting
    // out of sync)
    // But with the current CDBManager implementation, I don't know how to solve
    // this better (e.g. to avoid clearing cache messages and so on).

    AliCDBStorage* storage(0x0);
    
    if ( fOCDBPath.Length() > 0 )
    {
      storage = AliCDBManager::Instance()->GetDefaultStorage();

      if ( storage && ( storage->GetURI() != fOCDBPath.Data() ) )
      {
        AliCDBManager::Instance()->SetDefaultStorage(fOCDBPath.Data());
      }
    }
    
    fCalibrationData->Pedestals();
    fCalibrationData->Gains();
    fCalibrationData->Neighbours();
    fCalibrationData->HV();
    fCalibrationData->Capacitances();
    
    if ( storage && ( storage->GetURI() != fOCDBPath.Data() ) )
    {
      AliCDBManager::Instance()->SetDefaultStorage(storage);
    }
    
    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParam);
    //FIXME: get the reco param from GUI and/or from OCDB if not used from the QA code ?
  }
}

//_____________________________________________________________________________
AliMUONTrackerDataMaker::~AliMUONTrackerDataMaker()
{
/// dtor

  delete fOneEventData;
  if ( fIsOwnerOfAccumulatedData ) delete fAccumulatedData;
  if ( fIsOwnerOfRawReader ) delete fRawReader;
  delete fCalibrationData;
  delete fDigitCalibrator;
}

//_____________________________________________________________________________
Bool_t 
AliMUONTrackerDataMaker::Add(const AliMUONTrackerDataMaker& other)
{
  /// Adds other to this
    
  if (!fAccumulatedData) return kFALSE;
  
  if ( fIsEventByEvent )
  {
    AliError("Cannot add event by event objects !");
    return kFALSE;
  }
  
  if ( fRunNumber != other.fRunNumber ) fRunNumber = -1;
  
  fSource += "\n";
  fSource += other.fSource;
  
  fNumberOfEvents += other.fNumberOfEvents;
  fNumberOfPhysicsEvents += other.fNumberOfPhysicsEvents;
  fNumberOfGoodPhysicsEvents += other.fNumberOfGoodPhysicsEvents;

  TList list;
  list.Add(other.fAccumulatedData);
  
  fAccumulatedData->Merge(&list);
  
  return kTRUE;
}

//_____________________________________________________________________________
Bool_t 
AliMUONTrackerDataMaker::NextEvent()
{
  /// Read and process next event
  
  if ( !fIsOwnerOfRawReader ) 
  {
    AliError("I'm not the owner of the raw reader. Cannot use NextEvent");
    return kFALSE;
  }
  
  AliCodeTimerAuto("",0);
  
  if ( !IsRunning() ) return kTRUE;
  
  Bool_t ok(kTRUE);
  
  if ( fLastEvent >= fFirstEvent && fLastEvent > 0 ) // do we have an event range to consider ?
  {
    // skip up to first event
    
    while ( (fNumberOfEvents-1) < fFirstEvent && ( ok = fRawReader->NextEvent() ) ) 
    {
      ++fNumberOfEvents; 
    }
    
    if ( ok && (fNumberOfEvents-1) <= fLastEvent ) 
    {
      ok = fRawReader->NextEvent();
    }
    else
    {
      fNumberOfEvents=fLastEvent+1;
      return kFALSE;
    }
  }
  else
  {
    // no event range, just proceed...
    ok = fRawReader->NextEvent();
  }
  
  if (!ok) 
  {
    return kFALSE;
  }
  
	ProcessEvent();
	
	return kTRUE;  
}

//_____________________________________________________________________________
Bool_t AliMUONTrackerDataMaker::ProcessEvent()
{
  /// Process current event 
  /// 
  /// Note that in case of calibration, we do not simply reuse the 
  /// AliMUONDigitCalibrator::Calibrate(AliMUONVDigitStore&) method, 
  /// as this would require filling first a digitStore, and then calibrate it,
  /// and then convert it into a VStore, all this taking too much time.
  /// But we *do* reuse the AliMUONDigitCalibrator::CalibrateDigit in order not to 
  /// duplicate this critical piece of calibration code !
  ///
  
  ++fNumberOfEvents;
  
  Int_t eventType = fRawReader->GetType();
  
  if (eventType != AliRawEventHeaderBase::kPhysicsEvent ) 
  {
    return kTRUE; // for the moment
  }
  
  ++fNumberOfPhysicsEvents;
  
  fLastEventWasEmpty = kFALSE;
  
  AliCodeTimerAuto("",0);
  
  AliMUONRawStreamTrackerHP stream(fRawReader);

  stream.DisableWarnings();
  stream.DisableRawReaderErrorLogger();
  stream.DisableMUONErrorLogger();

  if ( fTryRecover ) 
  {
    stream.TryRecover(kTRUE);
  }
  else
  {
    stream.TryRecover(kFALSE);
  }
  
  if (fLogger)
  {
    stream.EnableMUONErrorLogger();  
    stream.SetMUONErrorLogger(fLogger);    
    stream.SetLoggingDetailLevel(AliMUONRawStreamTrackerHP::kMediumErrorDetail);
  }
  
  const Int_t nddls = AliDAQ::NumberOfDdls("MUONTRK");
  TArrayI nevents(nddls);
  
  for ( Int_t i = 0; i < nddls; ++i ) 
  {
    nevents[i] = 0;
  }
  
  fOneEventData->Clear();
  
  Int_t buspatchId;
  UShort_t  manuId;
  UChar_t manuChannel;
  UShort_t adc;
  
  stream.First();
  
  while ( stream.Next(buspatchId,manuId,manuChannel,adc,kTRUE) )
  {    
    Int_t detElemId = AliMpDDLStore::Instance()->GetDEfromBus(buspatchId);
    
    Int_t ddl = AliMpDDLStore::Instance()->GetDDLfromBus(buspatchId);
    
    nevents[ddl] = 1;
    
    AliMUONVCalibParam* param = static_cast<AliMUONVCalibParam*>(fOneEventData->FindObject(detElemId,manuId));
    if (!param)
    {
      param = new AliMUONCalibParamND(1,64,detElemId,manuId,
                                      AliMUONVCalibParam::InvalidFloatValue());
      fOneEventData->Add(param);
    }
    
    Double_t charge(adc);
    
    if ( fDigitCalibrator ) 
    {
      if ( fDigitCalibrator->IsValidDigit(detElemId, manuId, manuChannel) )
      {
        charge = fDigitCalibrator->CalibrateDigit(detElemId, manuId, manuChannel,adc);
      }
      else
      {
        charge = 0.0;
      }
    }
    
    if (charge > 0.0 ) 
    {
      param->SetValueAsDouble(manuChannel,0,charge);
    }
  }
  
	Bool_t badEvent = stream.HasPaddingError() || stream.HasGlitchError();

	if (!badEvent)
  {
    fAccumulatedData->Add(*fOneEventData,&nevents);  
    if ( fOneEventData->GetSize() == 0 ) fLastEventWasEmpty = kTRUE;
    ++fNumberOfGoodPhysicsEvents;
  }
    
  AliDebug(1,Form("n %10d nphysics %10d ngood %10d",fNumberOfEvents,fNumberOfPhysicsEvents,fNumberOfGoodPhysicsEvents));
	
  return !badEvent;
}


//_____________________________________________________________________________
void 
AliMUONTrackerDataMaker::Print(Option_t*) const
{
  /// Printout
  
  cout << "Source=" << Source() << " Running=" << ( IsRunning() ? "YES" : "NO")
  << endl;
}

//_____________________________________________________________________________
void AliMUONTrackerDataMaker::Rewind()
{
  /// Rewind events
  if ( fIsOwnerOfRawReader ) 
  {
    fRawReader->RewindEvents();
    fNumberOfEvents=0;  
    fNumberOfPhysicsEvents=0;
    fNumberOfGoodPhysicsEvents=0;
  }
  else
  {
    AliError("Wrong usage of this class : cannot rewind as I am not owner of the raw reader !");
  }
}

//_____________________________________________________________________________
Long64_t AliMUONTrackerDataMaker::Merge(TCollection* list)
{
  /// Merge objects in collection
  
  if (!list) return 0;
  
  if ( list->IsEmpty() ) return NumberOfEvents();
  
  TIter next(list);
  const TObject* o(0x0);
  
  while ( ( o = next() ) )
  {
    const AliMUONTrackerDataMaker* data = dynamic_cast<const AliMUONTrackerDataMaker*>(o);
    if (!data)
    {
      AliError(Form("Object named %s is not an AliMUONTrackerDataMaker ! Skipping it",
                    o->GetName()));
    }
    else
    {
      Bool_t ok = Add(*data);
      if (!ok)
      {
        AliError("Got incompatible objects");
      }
    }
  }
  
  return NumberOfEvents();
}

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