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 purpeateose. It is      *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

//-----------------------------------------------------------------------------
// Class AliMUONv1
// --------------------
// AliDetector class for MUON subsystem which implements
// functions for simulation 
//-----------------------------------------------------------------------------

#include "AliMUONv1.h"
#include "AliMUONConstants.h"
#include "AliMUONResponseFactory.h"
#include "AliMUONHit.h"
#include "AliMUONGeometryBuilder.h"	
#include "AliMUONGeometry.h"	
#include "AliMUONGeometryTransformer.h"	
#include "AliMUONGeometryModule.h"	
#include "AliMUONStringIntMap.h"	
#include "AliMUONGeometryDetElement.h"	

#include "AliMpCDB.h"
#include "AliMpDEManager.h"

#include "AliConst.h" 
#include "AliMagF.h"
#include "AliRun.h"
#include "AliMC.h"
#include "AliTrackReference.h"
#include "AliLog.h"

#include <TClonesArray.h>
#include <TF1.h>
#include <TF2.h>
#include <TGeoGlobalMagField.h>
#include <TGeoMatrix.h>
#include <TRandom.h>
#include <TRandom.h> 
#include <TVirtualMC.h>

#include <string>

#include "AliMUONVHitStore.h"

using std::endl;
using std::cout;
using std::setw;
/// \cond CLASSIMP
ClassImp(AliMUONv1)
/// \endcond
 
//___________________________________________
AliMUONv1::AliMUONv1() 
  : AliMUON(),
    fAngleEffect(kTRUE),
    fMagEffect(kTRUE),
    fStepMaxInActiveGas(0.6),
    fStepSum(0x0),
    fDestepSum(0x0),
    fTrackMomentum(), 
    fTrackPosition(),
    fElossRatio(0x0),
    fAngleEffect10(0x0),
    fAngleEffectNorma(0x0),
    fMagAngleEffectNorma(0x0)
{
/// Default constructor
  
  AliDebug(1,Form("default (empty) ctor this=%p",this));
} 

//___________________________________________
AliMUONv1::AliMUONv1(const char *name, const char* title)
: AliMUON(name, title), 
    fAngleEffect(kTRUE),
    fMagEffect(kTRUE),
    fStepMaxInActiveGas(0.6),
    fStepSum(0x0),
    fDestepSum(0x0),
    fTrackMomentum(), 
    fTrackPosition(),
    fElossRatio(0x0),
    fAngleEffect10(0x0),
    fAngleEffectNorma(0x0),
    fMagAngleEffectNorma(0x0)
{
/// Standard onstructor

    AliDebug(1,Form("ctor this=%p",this));	
	
    // Load mapping
    if ( ! AliMpCDB::LoadMpSegmentation() ) {
      AliFatal("Could not access mapping from OCDB !");
    }
       
    // By default include all stations

    fStepSum   = new Float_t [AliMUONConstants::NCh()];
    fDestepSum = new Float_t [AliMUONConstants::NCh()];
    for (Int_t i=0; i<AliMUONConstants::NCh(); i++) {
      fStepSum[i] =0.0;
      fDestepSum[i]=0.0;
    }
    // Ratio of particle mean eloss with respect MIP's Khalil Boudjemline, sep 2003, PhD.Thesis and Particle Data Book
    fElossRatio = new TF1("ElossRatio","[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x",0.5,5.); 
    fElossRatio->SetParameter(0,1.02138);
    fElossRatio->SetParameter(1,-9.54149e-02);
    fElossRatio->SetParameter(2,+7.83433e-02); 
    fElossRatio->SetParameter(3,-9.98208e-03);
    fElossRatio->SetParameter(4,+3.83279e-04);

    // Angle effect in tracking chambers at theta =10 degres as a function of ElossRatio (Khalil BOUDJEMLINE sep 2003 Ph.D Thesis) (in micrometers)
    fAngleEffect10 = new TF1("AngleEffect10","[0]+[1]*x+[2]*x*x",0.5,3.0);
    fAngleEffect10->SetParameter(0, 1.90691e+02);
    fAngleEffect10->SetParameter(1,-6.62258e+01);
    fAngleEffect10->SetParameter(2,+1.28247e+01);
    // Angle effect: Normalisation form theta=10 degres to theta between 0 and 10 (Khalil BOUDJEMLINE sep 2003 Ph.D Thesis)  
    // Angle with respect to the wires assuming that chambers are perpendicular to the z axis.
    fAngleEffectNorma = new TF1("AngleEffectNorma","[0]+[1]*x+[2]*x*x+[3]*x*x*x",0.0,10.0);
    fAngleEffectNorma->SetParameter(0,4.148);
    fAngleEffectNorma->SetParameter(1,-6.809e-01);
    fAngleEffectNorma->SetParameter(2,5.151e-02);
    fAngleEffectNorma->SetParameter(3,-1.490e-03);

    // Magnetic field effect: Normalisation form theta=16 degres (eq. 10 degrees B=0) to theta between -20 and 20 (Lamia Benhabib jun 2006 )  
    // Angle with respect to the wires assuming that chambers are perpendicular to the z axis.
    fMagAngleEffectNorma = new TF2("MagAngleEffectNorma","121.24/(([1]+[2]*abs(y))+[3]*abs(x-[0]*y)+[4]*abs((x-[0]*y)*(x-[0]*y))+[5]*abs((x-[0]*y)*(x-[0]*y)*(x-[0]*y))+[6]*abs((x-[0]*y)*(x-[0]*y)*(x-[0]*y)*(x-[0]*y)))",-20.0,20.0,-1.,1.);
    fMagAngleEffectNorma->SetParameters(8.6995, 25.4022, 13.8822, 2.4717, 1.1551, -0.0624, 0.0012);
}

//___________________________________________
AliMUONv1::~AliMUONv1()
{
/// Destructor
  
  AliDebug(1,Form("dtor this=%p",this));
  delete [] fStepSum;
  delete [] fDestepSum;
  delete fElossRatio;
  delete fAngleEffect10;
  delete fAngleEffectNorma; 
  delete fMagAngleEffectNorma;
}

//__________________________________________________
void AliMUONv1::CreateGeometry()
{
/// Construct geometry using geometry builder

  fGeometryBuilder->CreateGeometry();
}

//________________________________________________________________
void AliMUONv1::CreateMaterials()
{
/// Construct materials using geometry builder

  fGeometryBuilder->CreateMaterials();
}

//________________________________________________________________
void AliMUONv1::UpdateInternalGeometry()
{
/// Update geometry after applying mis-alignment

  // Load mapping
  if ( ! AliMpCDB::LoadMpSegmentation() ) {
    AliFatal("Could not access mapping from OCDB !");
  }

  fGeometryBuilder->UpdateInternalGeometry();
}

//________________________________________________________________
void AliMUONv1::AddAlignableVolumes() const
{
/// Construct materials using geometry builder

  GetGeometryTransformer()->AddAlignableVolumes();
}


//___________________________________________
void AliMUONv1::Init()
{ 
/// Initialize geometry

  AliDebug(1,"Start Init for version 1 - CPC chamber type");
   
  fGeometryBuilder->InitGeometry();
  AliDebug(1,"Finished Init for version 1 - CPC chamber type");   
 

  // Build segmentation
  // using geometry parametrisation
  //
  // Build response
  //
  AliMUONResponseFactory respFactory("default", fIsTailEffect);
  respFactory.Build(this);
  
}

//__________________________________________________________________
Int_t  AliMUONv1::GetGeomModuleId(Int_t volId) const
{
/// Check if the volume with specified  volId is a sensitive volume (gas) 
/// of some chamber and return the chamber number;
/// if not sensitive volume - return 0.

  for (Int_t i = 0; i < AliMUONConstants::NGeomModules(); i++) {
    if ( GetGeometry()->GetModule(i)->IsSensitiveVolume(volId) )
      return i;
  }    

  return -1;
}

//_______________________________________________________________________________
TString  AliMUONv1::CurrentVolumePath() const
{
/// Return current volume path
/// (Could be removed when this function is available via TVirtualMC::GetMC())

  TString path = "";
  TString name;
  Int_t copyNo;
  Int_t imother = 0;
  do {
    name = TVirtualMC::GetMC()->CurrentVolOffName(imother);
    TVirtualMC::GetMC()->CurrentVolOffID(imother++, copyNo);
    TString add = "/";
    add += name;
    add += "_";
    add += copyNo;
    path.Insert(0,add); 
  }
  while ( name != TString("ALIC") );
  
  return path;  
}

//_______________________________________________________________________________
void AliMUONv1::StepManager()
{
/// Step manager for the chambers

  // Only charged tracks
  if( !(TVirtualMC::GetMC()->TrackCharge()) ) return; 
  // Only charged tracks
  
  // Only gas gap inside chamber
  // Tag chambers and record hits when track enters 
  static Int_t   idvol=-1, iEnter = 0;
  Int_t   copy;
  const  Float_t kBig = 1.e10;
  static Double_t xyzEnter[3];

  //
  // Only gas gap inside chamber
  // Tag chambers and record hits when track enters 
  Int_t id=TVirtualMC::GetMC()->CurrentVolID(copy);
  Int_t iGeomModule = GetGeomModuleId(id);
  if (iGeomModule == -1) return;

  // Detection elements id
  const AliMUONGeometryModule* kGeometryModule
    = GetGeometry()->GetModule(iGeomModule);
  AliMUONGeometryDetElement* detElement
    = kGeometryModule->FindBySensitiveVolume(CurrentVolumePath());
    
  if (!detElement && iGeomModule < AliMUONConstants::NGeomModules()-2) {
    iGeomModule++;
    const AliMUONGeometryModule* kGeometryModule2
      = GetGeometry()->GetModule(iGeomModule);
    detElement 
      = kGeometryModule2->FindBySensitiveVolume(CurrentVolumePath());
  }    

  Int_t detElemId = 0;
  if (detElement) detElemId = detElement->GetUniqueID(); 
 
  if (!detElemId) {
    AliErrorStream() 
         << "Geometry module id: "
  	 << setw(3) << iGeomModule << "  "
  	 << "Current SV: " 
  	 <<  CurrentVolumePath() 
         << "  detElemId: "
  	 << setw(5) << detElemId 
         << endl;
    Double_t x, y, z;
    TVirtualMC::GetMC()->TrackPosition(x, y, z);	 
    AliErrorStream() 
         << "	global position: "
  	 << x << ", " << y << ", " << z
  	 << endl;
    AliErrorStream() << "DetElemId not identified." << endl;
  } 
  
  Int_t iChamber = AliMpDEManager::GetChamberId(detElemId) + 1; 
  idvol = iChamber -1;
    
  // Filling TrackRefs file for MUON. Our Track references are the active volume of the chambers
  if ( (TVirtualMC::GetMC()->IsTrackEntering() || TVirtualMC::GetMC()->IsTrackExiting() ) ) {
    AliTrackReference* trackReference    
      = AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kMUON);
    trackReference->SetUserId(detElemId);
  }  
  
  if( TVirtualMC::GetMC()->IsTrackEntering() ) {
     Float_t theta = fTrackMomentum.Theta();
     if ( fIsMaxStep && (TMath::Pi()-theta)*kRaddeg>=15. ) {
       TVirtualMC::GetMC()->SetMaxStep(fStepMaxInActiveGas); // We use Pi-theta because z is negative
     }  
     iEnter = 1;
     TVirtualMC::GetMC()->TrackPosition(xyzEnter[0], xyzEnter[1], xyzEnter[2]); // save coordinates of entrance point
  }

   //   AliDebug(1,
   //	    Form("Active volume found %d chamber %d Z chamber is %f ",idvol,iChamber,
   //		 ( (AliMUONChamber*)(*fChambers)[idvol])->Z())) ;
  // Particule id and mass, 
  Int_t     ipart = TVirtualMC::GetMC()->TrackPid();
  Float_t   mass  = TVirtualMC::GetMC()->TrackMass();

  fDestepSum[idvol]+=TVirtualMC::GetMC()->Edep();
  // Get current particle id (ipart), track position (pos)  and momentum (mom)
  if ( fStepSum[idvol]==0.0 )  TVirtualMC::GetMC()->TrackMomentum(fTrackMomentum);
  fStepSum[idvol]+=TVirtualMC::GetMC()->TrackStep();
  
  //  if (AliDebugLevel()) {
  //   AliDebug(1,Form("Step, iChamber %d, Particle %d, theta %f phi %f mass %f StepSum %f eloss %g",
  //		     iChamber,ipart, fTrackMomentum.Theta()*kRaddeg, fTrackMomentum.Phi()*kRaddeg,
  //	     mass, fStepSum[idvol], TVirtualMC::GetMC()->Edep()));
  // AliDebug(1,Form("Step:Track Momentum %f %f %f", fTrackMomentum.X(), fTrackMomentum.Y(), 
  //	     fTrackMomentum.Z()));
  // TVirtualMC::GetMC()->TrackPosition(fTrackPosition);
  // AliDebug(1,Form("Step: Track Position %f %f %f",fTrackPosition.X(),
  //	     fTrackPosition.Y(),fTrackPosition.Z())) ;
  //}

  // Track left chamber or StepSum larger than fStepMaxInActiveGas
  if ( TVirtualMC::GetMC()->IsTrackExiting() || 
       TVirtualMC::GetMC()->IsTrackStop() || 
       TVirtualMC::GetMC()->IsTrackDisappeared()||
       (fStepSum[idvol]>fStepMaxInActiveGas) ) {
    
    if   ( fIsMaxStep && 
           ( TVirtualMC::GetMC()->IsTrackExiting() || 
             TVirtualMC::GetMC()->IsTrackStop() || 
             TVirtualMC::GetMC()->IsTrackDisappeared() ) ) TVirtualMC::GetMC()->SetMaxStep(kBig);
    if (fDestepSum[idvol] == 0) {
      // AZ - no energy release
      fStepSum[idvol] = 0; // Reset for the next event
      iEnter = 0;
      return; 
    }

    TVirtualMC::GetMC()->TrackPosition(fTrackPosition);
    Float_t theta = fTrackMomentum.Theta();
    Float_t phi   = fTrackMomentum.Phi();
    
    Int_t merge = 0;
    Double_t xyz0[3]={0}, xyz1[3]={0}, tmp[3]={0};
    if (TVirtualMC::GetMC()->IsTrackExiting() && iEnter != 0) {
      // AZ - this code is to avoid artificial hit splitting at the
      // "fake" boundary inside the same chamber. It will still produce 
      // 2 hits but with the same coordinates (at the wire) to allow 
      // their merging at the digitization level.

      // Only for a track going from the entrance to the exit from the volume
      // Get local coordinates
      TVirtualMC::GetMC()->Gmtod(xyzEnter, xyz0, 1); // local coord. at the entrance

      fTrackPosition.Vect().GetXYZ(tmp);
      TVirtualMC::GetMC()->Gmtod(tmp, xyz1, 1); // local coord. at the exit
      Float_t dx = xyz0[0] - xyz1[0];
      Float_t dy = xyz0[1] - xyz1[1];
      Float_t thLoc = TMath::ATan2 (TMath::Sqrt(dx*dx+dy*dy), TMath::Abs(xyz0[2]-xyz1[2]));
      if (thLoc * TMath::RadToDeg() < 15) merge = 1; 
    }

    if (merge) {
      Double_t dz = -0.5;
      if (xyz1[2] != xyz0[2]) dz = xyz0[2] / (xyz1[2] - xyz0[2]);
      tmp[0] = xyz0[0] - (xyz1[0] - xyz0[0]) * dz; // local coord. at the wire
      tmp[1] = xyz0[1] - (xyz1[1] - xyz0[1]) * dz;
      tmp[2] = xyz0[2] - (xyz1[2] - xyz0[2]) * dz;
      TVirtualMC::GetMC()->Gdtom(tmp, xyz1, 1); // global coord. at the wire
      fTrackPosition.SetXYZT(xyz1[0], xyz1[1], xyz1[2], fTrackPosition.T());
    } else {
      TLorentzVector backToWire( fStepSum[idvol]/2.*sin(theta)*cos(phi),
				 fStepSum[idvol]/2.*sin(theta)*sin(phi),
				 fStepSum[idvol]/2.*cos(theta),0.0       );
      fTrackPosition-=backToWire;
      //printf(" %d %d %d %f %d \n", TVirtualMC::GetMC()->IsTrackExiting(), TVirtualMC::GetMC()->IsTrackStop(), TVirtualMC::GetMC()->IsTrackDisappeared(), fStepSum[idvol], iEnter);
      //    AliDebug(1,
      //     Form("Track Position %f %f %f",fTrackPosition.X(),fTrackPosition.Y(),fTrackPosition.Z()));
      // AliDebug(1,
      //     Form("Exit: Track backToWire %f %f %f",backToWire.X(),backToWire.Y(),backToWire.Z())) ;
    }
    
    //-------------- Angle effect 
    // Ratio between energy loss of particle and Mip as a function of BetaGamma of particle (Energy/Mass)
    
    Float_t betaxGamma    = fTrackMomentum.P()/mass;//  pc/mc2
    Float_t sigmaEffect10degrees;
    Float_t sigmaEffectThetadegrees;
    Float_t eLossParticleELossMip;
    Float_t yAngleEffect=0.;
    Float_t thetawires      =  TMath::ASin( TMath::Sin(TMath::Pi()-theta) * TMath::Sin(phi) ) ;// We use Pi-theta because z is negative
    Double_t bField[3] = {0};
    fTrackPosition.Vect().GetXYZ(tmp);
    TGeoGlobalMagField::Instance()->Field(tmp,bField);

    if (fAngleEffect && !fMagEffect){
      thetawires = TMath::Abs(thetawires);
    if ( (betaxGamma >3.2)   &&  (thetawires*kRaddeg<=15.) ) {
      betaxGamma=TMath::Log(betaxGamma);
      eLossParticleELossMip = fElossRatio->Eval(betaxGamma);
      // 10 degrees is a reference for a model (arbitrary)
      sigmaEffect10degrees=fAngleEffect10->Eval(eLossParticleELossMip);// in micrometers
      // Angle with respect to the wires assuming that chambers are perpendicular to the z axis.
      sigmaEffectThetadegrees =  sigmaEffect10degrees/fAngleEffectNorma->Eval(thetawires*kRaddeg);  // For 5mm gap  
      if ( (iChamber==1)  ||  (iChamber==2) )  
        sigmaEffectThetadegrees/=(1.09833e+00+1.70000e-02*(thetawires*kRaddeg)); // The gap is different (4mm)
      yAngleEffect=1.e-04*gRandom->Gaus(0,sigmaEffectThetadegrees); // Error due to the angle effect in cm
    }
    }
    else if (fAngleEffect && fMagEffect) {
      if ( (betaxGamma >3.2)   &&  (TMath::Abs(thetawires*kRaddeg)<=15.) ) {
	betaxGamma=TMath::Log(betaxGamma);
	eLossParticleELossMip = fElossRatio->Eval(betaxGamma);
	// 10 degrees is a reference for a model (arbitrary)
	sigmaEffect10degrees=fAngleEffect10->Eval(eLossParticleELossMip);// in micrometers
	// Angle with respect to the wires assuming that chambers are perpendicular to the z axis.
	sigmaEffectThetadegrees =  sigmaEffect10degrees/fMagAngleEffectNorma->Eval(thetawires*kRaddeg,bField[0]/10.);  // For 5mm gap  
      if ( (iChamber==1)  ||  (iChamber==2) )  
        sigmaEffectThetadegrees/=(1.09833e+00+1.70000e-02*(thetawires*kRaddeg)); // The gap is different (4mm)
	yAngleEffect=1.e-04*gRandom->Gaus(0,sigmaEffectThetadegrees); // Error due to the angle effect in cm
      }
    }

    AliMUONHit hit(fIshunt, 
		   gAlice->GetMCApp()->GetCurrentTrackNumber(), 
		   detElemId, ipart,
		   fTrackPosition.X(), 
		   fTrackPosition.Y()+yAngleEffect, 
		   fTrackPosition.Z(), 
		   TVirtualMC::GetMC()->TrackTime(),
		   fTrackMomentum.P(),
		   theta, 
		   phi, 
		   fStepSum[idvol], 
		   fDestepSum[idvol],                        
		   fTrackPosition.X(),
		   fTrackPosition.Y(),
		   fTrackPosition.Z());
    
    fHitStore->Add(hit);

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