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 AliMUON
// ------------------
// AliDetector class for MUON subsystem 
// providing simulation data management 
//-----------------------------------------------------------------------------

#include <TTree.h>
#include "AliMUON.h"

#include "AliMUONSDigitizerV2.h"
#include "AliMUONDigitizerV3.h"
#include "AliMUONDigitMaker.h"
#include "AliMUONDigit.h"
#include "AliMUONCalibrationData.h"

#include "AliMUONDigitStoreV1.h"
#include "AliMUONTriggerStoreV1.h"
#include "AliMUONHitStoreV1.h"

#include "AliMUONChamberTrigger.h"
#include "AliMUONConstants.h"
#include "AliMUONGeometry.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONGeometryBuilder.h"
#include "AliMUONVGeometryBuilder.h"	
#include "AliMUONCommonGeometryBuilder.h"
#include "AliMUONSt1GeometryBuilderV2.h"
#include "AliMUONSt2GeometryBuilderV2.h"
#include "AliMUONSlatGeometryBuilder.h"
#include "AliMUONTriggerGeometryBuilder.h"
#include "AliMUONDigitCalibrator.h"
#include "AliMUONRecoParam.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"

#include "AliMUONRawWriter.h"

#include "AliLoader.h"
#include "AliCDBManager.h"
#include "AliDigitizationInput.h"
#include "AliMC.h"
#include "AliRun.h"
#include "AliRawDataHeaderSim.h"
#include "AliLog.h"

#include <TObjArray.h>

// Defaults parameters for Z positions of chambers
// taken from values for "stations" in AliMUON::AliMUON
//     const Float_t zch[7]={528, 690., 975., 1249., 1449., 1610, 1710.};
// and from array "dstation" in AliMUONv1::CreateGeometry
//          Float_t dstation[5]={20., 20., 20, 20., 20.};
//     for tracking chambers,
//          according to (Z1 = zch - dstation) and  (Z2 = zch + dstation)
//          for the first and second chambers in the station, respectively,
// and from "DTPLANES" in AliMUONv1::CreateGeometry
//           const Float_t DTPLANES = 15.;
//     for trigger chambers,
//          according to (Z1 = zch) and  (Z2 = zch + DTPLANES)
//          for the first and second chambers in the station, respectively

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

//__________________________________________________________________
AliMUON::AliMUON()
  : AliDetector(),
    fNCh(0),
    fNTrackingCh(0),
    fSplitLevel(0),
    fChambers(0),
    fGeometryBuilder(0),
    fAccCut(kFALSE),
    fAccMin(0.),
    fAccMax(0.),   
    fMaxStepGas(0.),
    fMaxStepAlu(0.),
    fMaxDestepGas(0.),
    fMaxDestepAlu(0.),
    fMaxIterPad(0),
    fCurIterPad(0),
    fIsMaxStep(kTRUE),
    fTriggerScalerEvent(kFALSE),
    fTriggerResponseV1(0),
    fTriggerCoinc44(0),
    fTriggerEffCells(kTRUE),
    fDigitizerWithNoise(1),
    fDigitizerNSigmas(4.0),
    fIsTailEffect(kTRUE),
    fConvertTrigger(kFALSE),
    fRawWriter(0x0),
    fDigitMaker(0x0),
    fHitStore(0x0),
    fDigitStoreConcreteClassName(),
    fCalibrationData(0x0),
    fDigitCalibrator(0x0)
{
/// Default Constructor
    
    AliDebug(1,Form("default (empty) ctor this=%p",this));
    fIshunt          = 0;
}

//__________________________________________________________________
AliMUON::AliMUON(const char *name, const char* title)
  : AliDetector(name, title),
    fNCh(AliMUONConstants::NCh()),
    fNTrackingCh(AliMUONConstants::NTrackingCh()),
    fSplitLevel(0),
    fChambers(0),
    fGeometryBuilder(0),
    fAccCut(kFALSE),
    fAccMin(0.),
    fAccMax(0.),   
    fMaxStepGas(0.1),
    fMaxStepAlu(0.1),
    fMaxDestepGas(-1), // Negatives values are ignored by geant3 CONS200 
    fMaxDestepAlu(-1), // in the calculation of the tracking parameters
    fMaxIterPad(0),
    fCurIterPad(0),
    fIsMaxStep(kTRUE),
    fTriggerScalerEvent(kFALSE),
    fTriggerResponseV1(0),
    fTriggerCoinc44(0),
    fTriggerEffCells(kTRUE),
    fDigitizerWithNoise(1),
    fDigitizerNSigmas(4.0),
    fIsTailEffect(kTRUE),
    fConvertTrigger(kFALSE),
    fRawWriter(0x0),
    fDigitMaker(new AliMUONDigitMaker),
    fHitStore(0x0),
    fDigitStoreConcreteClassName("AliMUONDigitStoreV2S"),
    fCalibrationData(),
    fDigitCalibrator(0x0)
{
  /// Standard constructor  
  
  AliDebug(1,Form("ctor this=%p",this));
  fIshunt =  0;
  
  //PH SetMarkerColor(kRed);//
    
  // Geometry builder
  fGeometryBuilder = new AliMUONGeometryBuilder(this);
  
  // Common geometry definitions
  fGeometryBuilder
    ->AddBuilder(new AliMUONCommonGeometryBuilder(this));
  
  // By default, add also all the needed geometry builders.
  // If you want to change this from outside, please use ResetGeometryBuilder
  // method, followed by AddGeometryBuilder ones.
  
  AddGeometryBuilder(new AliMUONSt1GeometryBuilderV2(this));
  AddGeometryBuilder(new AliMUONSt2GeometryBuilderV2(this));
  AddGeometryBuilder(new AliMUONSlatGeometryBuilder(this));
  AddGeometryBuilder(new AliMUONTriggerGeometryBuilder(this));
  
  //
  // Creating List of Chambers
    Int_t ch;
    fChambers = new TObjArray(AliMUONConstants::NCh());
    fChambers->SetOwner(kTRUE);
    
    // Loop over stations
    for (Int_t st = 0; st < AliMUONConstants::NCh() / 2; st++) {
      // Loop over 2 chambers in the station
      for (Int_t stCH = 0; stCH < 2; stCH++) {
	//
	//    
	//    Default Parameters for Muon Tracking Stations
	ch = 2 * st + stCH;
	if (ch < AliMUONConstants::NTrackingCh()) {
	  fChambers->AddAt(new AliMUONChamber(ch),ch);
	} else {
	  fChambers->AddAt(new AliMUONChamberTrigger(ch, GetGeometryTransformer()),ch);
	}
      } // Chamber stCH (0, 1) in 
    }     // Station st (0...)
  
  Int_t runnumber = AliCDBManager::Instance()->GetRun();
  
  fCalibrationData = new AliMUONCalibrationData(runnumber);
}

//____________________________________________________________________
AliMUON::~AliMUON()
{
/// Destructor

  AliDebug(1,Form("dtor this=%p",this));
  delete fChambers;
  delete fGeometryBuilder;
  delete fRawWriter;
  delete fDigitMaker;
  delete fHitStore;
  delete fCalibrationData;
  delete fDigitCalibrator;
}

//_____________________________________________________________________________
void AliMUON::AddGeometryBuilder(AliMUONVGeometryBuilder* geomBuilder)
{
/// Add the geometry builder to the list

  fGeometryBuilder->AddBuilder(geomBuilder);
}

//____________________________________________________________________
const AliMUONGeometry*  AliMUON::GetGeometry() const
{
/// Return geometry parametrisation

  if ( !fGeometryBuilder) {
    AliWarningStream() << "GeometryBuilder not defined." << std::endl;
    return 0;
  }
  
  return fGeometryBuilder->GetGeometry();
}   

//____________________________________________________________________
const AliMUONGeometryTransformer*  AliMUON::GetGeometryTransformer() const
{
/// Return geometry parametrisation

  const AliMUONGeometry* kGeometry = GetGeometry();
  
  if ( !kGeometry) return 0;

  return kGeometry->GetTransformer();
}   

//__________________________________________________________________
void 
AliMUON::MakeBranch(Option_t* opt)
{
  /// Create branche(s) to hold MUON hits
  AliDebug(1,"");
  
  TString sopt(opt);
  if ( sopt != "H" ) return;
    
  if (!fHitStore)
  {
    fHitStore = new AliMUONHitStoreV1;
    if ( gAlice->GetMCApp() )
    {
      if ( gAlice->GetMCApp()->GetHitLists() ) 
      {
        // AliStack::PurifyKine needs to be able to loop on our hits
        // to remap the track numbers.
        gAlice->GetMCApp()->AddHitList(fHitStore->Collection()); 
      }  
    }
  }

  TTree* treeH = fLoader->TreeH();
  
  if (!treeH)
  {
    AliFatal("No TreeH");
  }
  
  fHitStore->Connect(*treeH);
}

//__________________________________________________________________
void  
AliMUON::SetTreeAddress()
{
  /// Set Hits tree address  
 
//  if ( gAlice->GetMCApp() && fHitStore )
//  {
//    TList* l = gAlice->GetMCApp()->GetHitLists();
//    if ( l )
//    {
//      TObject* o = l->First();
//      if (o!=fHitStore->HitCollection())
//      {
//        AliError(Form("Something is strange hitcollection=%x",fHitStore->HitCollection()));
//        l->Print();        
//      }
//    }  
//  }  
}

//_________________________________________________________________
void
AliMUON::ResetHits()
{
  /// Reset hits
  
  AliDebug(1,"");
  if (fHitStore) fHitStore->Clear();
}

//_________________________________________________________________
void AliMUON::SetChargeSlope(Int_t id, Float_t p1)
{
/// Set the inverse charge slope for chamber id

    Int_t i=2*(id-1);    //PH    ((AliMUONChamber*) (*fChambers)[i])->SetSigmaIntegration(p1);
    //PH    ((AliMUONChamber*) (*fChambers)[i+1])->SetSigmaIntegration(p1);
    ((AliMUONChamber*) fChambers->At(i))->SetChargeSlope(p1);
    ((AliMUONChamber*) fChambers->At(i+1))->SetChargeSlope(p1);
}
//__________________________________________________________________
void AliMUON::SetChargeSpread(Int_t id, Float_t p1, Float_t p2)
{
/// Set sigma of charge spread for chamber id

    Int_t i=2*(id-1);
    ((AliMUONChamber*) fChambers->At(i))->SetChargeSpread(p1,p2);
    ((AliMUONChamber*) fChambers->At(i+1))->SetChargeSpread(p1,p2);
}
//___________________________________________________________________
void AliMUON::SetSigmaIntegration(Int_t id, Float_t p1)
{
/// Set integration limits for charge spread
    Int_t i=2*(id-1);
    ((AliMUONChamber*) fChambers->At(i))->SetSigmaIntegration(p1);
    ((AliMUONChamber*) fChambers->At(i+1))->SetSigmaIntegration(p1);
}

//__________________________________________________________________
void AliMUON::SetMaxAdc(Int_t id, Int_t p1)
{
/// Set maximum number for ADCcounts (saturation)

    Int_t i=2*(id-1);
    ((AliMUONChamber*) fChambers->At(i))->SetMaxAdc(p1);
    ((AliMUONChamber*) fChambers->At(i+1))->SetMaxAdc(p1);
}

//__________________________________________________________________
void AliMUON::SetMaxStepGas(Float_t p1)
{
/// Set stepsize in gas

  fMaxStepGas=p1;
}
//__________________________________________________________________
void AliMUON::SetMaxStepAlu(Float_t p1)
{
/// Set step size in Alu

    fMaxStepAlu=p1;
}
//__________________________________________________________________
void AliMUON::SetMaxDestepGas(Float_t p1)
{
/// Set maximum step size in Gas

    fMaxDestepGas=p1;
}
//__________________________________________________________________
void AliMUON::SetMaxDestepAlu(Float_t p1)
{
/// Set maximum step size in Alu

  fMaxDestepAlu=p1;
}

//____________________________________________________________________
Float_t  AliMUON::GetMaxStepGas() const
{
/// Return stepsize in gas
  
  return fMaxStepGas;
}  

//____________________________________________________________________
Float_t  AliMUON::GetMaxStepAlu() const
{
/// Return step size in Alu
  
  return fMaxStepAlu;
}
  
//____________________________________________________________________
Float_t  AliMUON::GetMaxDestepGas() const
{
/// Return maximum step size in Gas
  
  return fMaxDestepGas;
}
  
//____________________________________________________________________
Float_t  AliMUON::GetMaxDestepAlu() const
{
/// Return maximum step size in Gas
  
  return fMaxDestepAlu;
}

//____________________________________________________________________
 void  AliMUON::SetAlign(Bool_t align)
{
/// Set option for alignement to geometry builder
 
   fGeometryBuilder->SetAlign(align);
}   

//____________________________________________________________________
 void  AliMUON::SetAlign(const TString& fileName, Bool_t align)
{
/// Set option for alignement to geometry builder
 
   fGeometryBuilder->SetAlign(fileName, align);
}   

//____________________________________________________________________
void   AliMUON::SetResponseModel(Int_t id, const AliMUONResponse& response)
{
/// Set the response for chamber id
    ((AliMUONChamber*) fChambers->At(id))->SetResponseModel(response);
}

//____________________________________________________________________
AliDigitizer* AliMUON::CreateDigitizer(AliDigitizationInput* digInput) const
{
/// Return digitizer
  
  AliMUONDigitizerV3* digitizer = new AliMUONDigitizerV3(digInput, fDigitizerWithNoise);
  AliMUONDigitizerV3::SetNSigmas(fDigitizerNSigmas);
  digitizer->SetCalibrationData(fCalibrationData,GetRecoParam());
  return digitizer;
}

//_____________________________________________________________________
void AliMUON::SDigits2Digits()
{
/// Write TreeD here only 

    char hname[30];
    //    sprintf(hname,"TreeD%d",fLoader->GetHeader()->GetEvent());
    fLoader->TreeD()->Write(hname,TObject::kOverwrite);
    fLoader->TreeD()->Reset();
}

//_____________________________________________________________________
void AliMUON::Hits2SDigits()
{
/// Perform Hits2Digits using SDigitizerV2
  
  AliMUONSDigitizerV2 sdigitizer;
  sdigitizer.Digitize();
}

//_____________________________________________________________________
void AliMUON::Digits2Raw()
{
/// Convert digits of the current event to raw data

  AliRawDataHeaderSim header;

  if (!fRawWriter)
  {
    fRawWriter = new AliMUONRawWriter;
    AliDebug(1,Form("Creating %s",fRawWriter->ClassName()));
    if (fTriggerScalerEvent == kTRUE) 
    {
      fRawWriter->SetScalersNumbers();
    }
  }
  
  fLoader->LoadDigits("READ");
  
  TTree* treeD = fLoader->TreeD();
  
  if (!treeD)
  {
    AliError("Could not get TreeD");
    return;
  }
  
  AliMUONVTriggerStore*  triggerStore = AliMUONVTriggerStore::Create(*treeD);
  AliMUONVDigitStore* digitStore = AliMUONVDigitStore::Create(*treeD);

  triggerStore->Connect(*treeD,kFALSE);
  digitStore->Connect(*treeD,kFALSE);
  
  treeD->GetEvent(0);
  
  fRawWriter->SetHeader(header);
  if (!fRawWriter->Digits2Raw(digitStore,triggerStore))
  {
    AliError("pb writting raw data");
  }
  
  delete triggerStore;
  delete digitStore;
  
  fLoader->UnloadDigits();
}

//_____________________________________________________________________
Bool_t AliMUON::Raw2SDigits(AliRawReader* rawReader)
{
  /// Convert raw data to SDigit
  
  if (!fLoader->TreeS()) fLoader->MakeSDigitsContainer();
  
  TTree* treeS = fLoader->TreeS();
  
  AliMUONVDigitStore* sDigitStore = AliMUONVDigitStore::Create(DigitStoreClassName());
	AliMUONVTriggerStore* triggerStore = 0x0;
	
  sDigitStore->Connect(*treeS);
  	
  if (!fDigitMaker) fDigitMaker = new AliMUONDigitMaker;
	
	if (fConvertTrigger) {
		triggerStore = new AliMUONTriggerStoreV1;
		triggerStore->Connect(*treeS,true);
		fDigitMaker->SetMakeTriggerDigits(true);
	}
	
  if (!fDigitCalibrator)
  {
    AliMUONRecoParam* recoParam = GetRecoParam();
    
    if (!recoParam)
    {
      AliFatal("Cannot work without recoparams !");
    }
    
    fDigitCalibrator = new AliMUONDigitCalibrator(*fCalibrationData,recoParam);
  }
  
	fDigitMaker->Raw2Digits(rawReader,sDigitStore,triggerStore);
  
  fDigitCalibrator->Calibrate(*sDigitStore);

  TIter next(sDigitStore->CreateIterator());
  AliMUONDigit* sdigit;
  
  // now tweak the digits to make them "as fresh as possible", i.e.
  // reset their calibrated status, as they'll be calibrated again
  // once embedded.
  while ( ( sdigit = static_cast<AliMUONDigit*>(next()) ) )
  {
    sdigit->Calibrated(kFALSE);
  }
  
  treeS->Fill();
  
  fLoader->WriteSDigits("OVERWRITE");
  
  fLoader->UnloadSDigits();
  
  delete sDigitStore;
	
	delete triggerStore;
  
  return kTRUE;
}

//_______________________________________________________________________
AliLoader* AliMUON::MakeLoader(const char* topfoldername)
{ 
/// Build standard getter (AliLoader type);
/// if detector wants to use castomized getter, it must overload this method
 
 AliDebug(1,Form("Creating standard getter for detector %s. Top folder is %s.",
         GetName(),topfoldername));
 fLoader   = new AliLoader(GetName(),topfoldername);

 return fLoader;
}

//________________________________________________________________________
void
AliMUON::ResetGeometryBuilder()
{
/// Only to be used by "experts" wanting to change the geometry builders
/// to be used. 
/// As the ctor of AliMUON now defines a default geometrybuilder, this
/// ResetGeometryBuilder() must be called prior to call the 
/// AddGeometryBuilder()

  delete fGeometryBuilder;
  fGeometryBuilder = new AliMUONGeometryBuilder(this);
  fGeometryBuilder
    ->AddBuilder(new AliMUONCommonGeometryBuilder(this));
}

//____________________________________________________________________
Int_t  AliMUON::GetTriggerResponseV1() const
{
///
/// Returns fTriggerResponseV1
///  
    return fTriggerResponseV1;
    
}  

//____________________________________________________________________
Int_t  AliMUON::GetTriggerCoinc44() const
{
///
/// Returns fTriggerCoinc44
///  
    return fTriggerCoinc44;
    
}

//____________________________________________________________________
Bool_t  AliMUON::GetTriggerEffCells() const
{
///
/// Returns fTriggerEffCells
///  
    return fTriggerEffCells;
    
}  

//____________________________________________________________________
Int_t  AliMUON::GetDigitizerWithNoise() const
{
///
/// Returns fDigitizerWithNoise
///  
    return fDigitizerWithNoise;
    
}  

//____________________________________________________________________
AliMUONRecoParam* AliMUON::GetRecoParam() const
{
  AliMUONRecoParam* recoParam = 0x0;

  AliCDBEntry* entry = AliCDBManager::Instance()->Get("MUON/Calib/RecoParam");

  if (entry) 
  {      
    // load recoParam according OCDB content (single or array)
    if (!(recoParam = dynamic_cast<AliMUONRecoParam*>(entry->GetObject()))) 
    {        
      TObjArray* recoParamArray = static_cast<TObjArray*>(entry->GetObject());
      
      for(Int_t i = 0; i < recoParamArray->GetEntriesFast(); ++i)
      {
        recoParam = static_cast<AliMUONRecoParam*>(recoParamArray->UncheckedAt(i));
        if (recoParam && recoParam->IsDefault()) break;
        recoParam = 0x0;
      }        
    }      
  }
  return recoParam;
}


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