ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *      SigmaEffect_thetadegrees                                          *
 * 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$ */

//-----------------------------------------------------------------------------
// Compact information for the muon generated tracks in the MUON arm 
// useful at the last stage of the analysis chain
// provides a link between the reconstructed track and the generated particle 
// stores kinematical information at gen. and rec. level and 
// the decay history of the muon, allowing the identification of the 
// mother process 
// 
// To be used together with AliMUONPairLight
//
// This class was prepared by INFN Cagliari, July 2006
// (authors: H.Woehri, A.de Falco)
//-----------------------------------------------------------------------------

// 13 Nov 2007:
// Added a temporary fix to FindRefTrack to be able to handle reconstructed tracks
// generated from ESD muon track information. The problem is that the ESD data at
// the moment only contains the first hit on chamber 1. Hopefully in the near future
// this will be fixed and all hit information will be available.
//  - Artur Szostak <artursz@iafrica.com>

#include "AliMUONTrackLight.h"
#include "AliMUONTrack.h"
#include "AliMUONConstants.h"
#include "AliMUONVTrackStore.h"
#include "AliMUONTrackParam.h"

#include "AliESDMuonTrack.h"
#include "AliStack.h"
#include "AliLog.h"

#include "TDatabasePDG.h"
#include "TParticle.h"
#include "TString.h"

#include <cstdio>

ClassImp(AliMUONTrackLight) 

//===================================================================

AliMUONTrackLight::AliMUONTrackLight() 
  : TObject(), 
    fPrec(), 
    fIsTriggered(kFALSE),
    fCharge(-999), 
    fChi2(-1), 
    fCentr(-1),
    fPgen(), 
    fTrackPythiaLine(-999),
    fTrackPDGCode(-999),
    fOscillation(kFALSE), 
    fNParents(0),
    fWeight(1)    
{
  /// default constructor
  fPgen.SetPxPyPzE(0.,0.,0.,0.); 
  fPrec.SetPxPyPzE(0.,0.,0.,0.); 
  for (Int_t i=0; i<3; i++) fXYZ[i]=-999; 
  for (Int_t npar = 0; npar < fgkNParentsMax; npar++){
    fParentPDGCode[npar] = -1; 
    fParentPythiaLine[npar] = -1;
  }
  for (Int_t i = 0; i < 4; i++){
    fQuarkPDGCode[i] = -1; 
    fQuarkPythiaLine[i] = -1; 
  }
}

//============================================
AliMUONTrackLight::AliMUONTrackLight(const AliMUONTrackLight &muonCopy) 
  : TObject(muonCopy), 
    fPrec(muonCopy.fPrec), 
    fIsTriggered(muonCopy.fIsTriggered),
    fCharge(muonCopy.fCharge), 
    fChi2(muonCopy.fChi2), 
    fCentr(muonCopy.fCentr),
    fPgen(muonCopy.fPgen), 
    fTrackPythiaLine(muonCopy.fTrackPythiaLine),
    fTrackPDGCode(muonCopy.fTrackPDGCode),
    fOscillation(muonCopy.fOscillation), 
    fNParents(muonCopy.fNParents),
    fWeight(muonCopy.fWeight)
{
  /// copy constructor
  for (Int_t i=0; i<3; i++) fXYZ[i]=muonCopy.fXYZ[i]; 
  for (Int_t npar = 0; npar < fgkNParentsMax; npar++){
    fParentPDGCode[npar] = muonCopy.fParentPDGCode[npar]; 
    fParentPythiaLine[npar] = muonCopy.fParentPythiaLine[npar];
  }
  for (Int_t i = 0; i < 4; i++){
    fQuarkPDGCode[i] = muonCopy.fQuarkPDGCode[i]; 
    fQuarkPythiaLine[i] = muonCopy.fQuarkPythiaLine[i]; 
  }
}

//============================================
AliMUONTrackLight::AliMUONTrackLight(AliESDMuonTrack* muonTrack)
  : TObject(), 
    fPrec(), 
    fIsTriggered(kFALSE),
    fCharge(-999), 
    fChi2(-1),
    fCentr(-1),
    fPgen(), 
    fTrackPythiaLine(-999),
    fTrackPDGCode(-999),
    fOscillation(kFALSE), 
    fNParents(0),
    fWeight(1)
{ 
  /// constructor
  fPgen.SetPxPyPzE(0.,0.,0.,0.); 
  for (Int_t npar = 0; npar < fgkNParentsMax; npar++){
    fParentPDGCode[npar] = -1; 
    fParentPythiaLine[npar] = -1;
  }
  for (Int_t i = 0; i < 4; i++){
    fQuarkPDGCode[i] = -1; 
    fQuarkPythiaLine[i] = -1; 
  }
  FillFromESD(muonTrack);
}

//============================================
AliMUONTrackLight::~AliMUONTrackLight()
{
/// Destructor
} 

//============================================
AliMUONTrackLight& AliMUONTrackLight::operator=(const AliMUONTrackLight& muonCopy)
{
  // check assignment to self
  if (this == &muonCopy) return *this;

  // base class assignment
  TObject::operator=(muonCopy);

  // assignment operator
  fPrec = muonCopy.fPrec; 
  fIsTriggered = muonCopy.fIsTriggered;
  fCharge = muonCopy.fCharge; 
  fChi2 = muonCopy.fChi2; 
  fCentr = muonCopy.fCentr;
  fPgen = muonCopy.fPgen; 
  fTrackPythiaLine = muonCopy.fTrackPythiaLine;
  fTrackPDGCode = muonCopy.fTrackPDGCode;
  fOscillation = muonCopy.fOscillation; 
  fNParents = muonCopy.fNParents;
  fWeight = muonCopy.fWeight;
  
  for (Int_t i=0; i<3; i++) fXYZ[i]=muonCopy.fXYZ[i]; 
  for (Int_t npar = 0; npar < fgkNParentsMax; npar++){
    fParentPDGCode[npar] = muonCopy.fParentPDGCode[npar]; 
    fParentPythiaLine[npar] = muonCopy.fParentPythiaLine[npar];
  }
  for (Int_t i = 0; i < 4; i++){
    fQuarkPDGCode[i] = muonCopy.fQuarkPDGCode[i]; 
    fQuarkPythiaLine[i] = muonCopy.fQuarkPythiaLine[i]; 
  }

  return *this;
}    

//============================================

void AliMUONTrackLight::FillFromAliMUONTrack(AliMUONTrack *trackReco,Double_t zvert){
  /// this method sets the muon reconstructed momentum according to the value given by AliMUONTrack
  AliMUONTrackParam* trPar = trackReco->GetTrackParamAtVertex();
  if (!trPar) {
    AliError("The track must contain the parameters at vertex");
    return;
  }
  this->SetCharge(Int_t(TMath::Sign(1.,trPar->GetInverseBendingMomentum())));
  this->SetPxPyPz(trPar->Px(),trPar->Py(), trPar->Pz()); 
  this->SetTriggered(trackReco->GetMatchTrigger()); 
  
  Double_t xyz[3] = { trPar->GetNonBendingCoor(), 
		      trPar->GetBendingCoor(),
		      trPar->GetZ()};
  if (zvert!=-9999) xyz[2] = zvert;
  this->SetVertex(xyz); 
}

//============================================
void AliMUONTrackLight::FillFromESD(AliESDMuonTrack* muonTrack,Double_t zvert){
  /// computes prec and charge from ESD track
  Double_t mumass = TDatabasePDG::Instance()->GetParticle(13)->Mass(); 
  Double_t thetaX = muonTrack->GetThetaX();
  Double_t thetaY = muonTrack->GetThetaY();
  Double_t tanthx = TMath::Tan(thetaX);
  Double_t tanthy = TMath::Tan(thetaY);
  Double_t pYZ    =  1./TMath::Abs(muonTrack->GetInverseBendingMomentum());
  Double_t pz     = - pYZ / TMath::Sqrt(1.0 + tanthy * tanthy);
  Double_t px     = pz * tanthx;
  Double_t py     = pz * tanthy;
  fCharge   = Int_t(TMath::Sign(1.,muonTrack->GetInverseBendingMomentum()));
  Double_t energy = TMath::Sqrt(mumass * mumass + px*px + py*py + pz*pz);
  fPrec.SetPxPyPzE(px,py,pz,energy);
  // get the position
  fXYZ[0] = muonTrack->GetNonBendingCoor();
  fXYZ[1] = muonTrack->GetBendingCoor();
  if (zvert==-9999) fXYZ[2] = muonTrack->GetZ();
  else fXYZ[2] = zvert;
  // get the chi2 per d.o.f.
  fChi2 = muonTrack->GetChi2()/ (2.0 * muonTrack->GetNHit() - 5);
  fIsTriggered = muonTrack->GetMatchTrigger();
}

//============================================
void AliMUONTrackLight::SetPxPyPz(Double_t px, Double_t py, Double_t pz){ 
  /// set the reconstructed 4-momentum, assuming the particle is a muon
  Double_t mumass = TDatabasePDG::Instance()->GetParticle(13)->Mass(); 
  Double_t energy = TMath::Sqrt(mumass * mumass + px*px + py*py + pz*pz);
  fPrec.SetPxPyPzE(px,py,pz,energy);
}

//============================================
void AliMUONTrackLight::FillMuonHistory(AliStack *stack, TParticle *part){
  /// scans the muon history to determine parents pdg code and pythia line
  Int_t countP = -1;
  Int_t parents[10], parLine[10];
  Int_t lineM = part->GetFirstMother();//line in the Pythia output of the particle's mother

  TParticle *mother;
  Int_t status=-1, pdg=-1;
  while(lineM >= 0){
    
    mother = stack->Particle(lineM); //direct mother of rec. track
    pdg = mother->GetPdgCode();//store PDG code of first mother
    // break if a string, gluon, quark or diquark is found 
    if(pdg == 92 || pdg == 21 || TMath::Abs(pdg) < 10 || IsDiquark(pdg)) break;
    parents[++countP] = pdg;
    parLine[countP] = lineM;
    status = mother->GetStatusCode();//get its status code to check if oscillation occured
    if(IsB0(parents[countP]) && status == 12) this->SetOscillation(kTRUE);
    lineM = mother->GetFirstMother();
  }
  //store all the fragmented parents in an array:
  for(int i = 0; i <= countP; i++){
    this->SetParentPDGCode(i,parents[countP-i]);
    this->SetParentPythiaLine(i,parLine[countP-i]);
  }
  fNParents = countP+1;
  countP = -1;

  //and store the lines of the string and further quarks in another array:
  while(lineM >= 0){
    mother = stack->Particle(lineM);
    pdg = mother->GetPdgCode();
    //now, get information before the fragmentation
    this->SetQuarkPythiaLine(++countP, lineM);//store the line of the string in index 0
    this->SetQuarkPDGCode(countP, pdg);//store the pdg of the quarks in index 1,2
    lineM = mother->GetFirstMother();
  }
  
  //check if in case of HF production, the string points to the correct end
  //and correct it in case of need:
  countP = 1;
  for(int par = 0; par < 4; par++){
    if(TMath::Abs(this->GetQuarkPDGCode(par)) < 6){
      countP = par; //get the quark just before hadronisation
      break;
    }
  }
  if(this->GetQuarkPythiaLine(countP) > -1 && (this->GetParentFlavour(0)==4 || this->GetParentFlavour(0)==5)){
    if(this->GetParentFlavour(0) != TMath::Abs(this->GetQuarkPDGCode(countP))){

      AliWarning(Form("quark flavour of parent and that of quark do not correspond: %d %d --> correcting\n",
          this->GetParentFlavour(0), TMath::Abs(this->GetQuarkPDGCode(countP)))
        );
      
      pdg = this->GetQuarkPDGCode(countP);
      Int_t line = this->GetQuarkPythiaLine(countP);
      this->ResetQuarkInfo();
      while(TMath::Abs(pdg) != this->GetParentFlavour(0)){//pdg of q,g in Pythia listing following the wrong string end
                                                        //must coincide with the flavour of the last fragmented mother

	pdg = stack->Particle(++line)->GetPdgCode();    
      }
      //now, we have the correct string end and the correct line
      //continue to fill again all parents and corresponding lines
      while(line >= 0){
	mother = stack->Particle(line);//get again the mother
	pdg = mother->GetPdgCode();
	this->SetQuarkPythiaLine(countP, line);
	this->SetQuarkPDGCode(countP++, pdg);
	line = mother->GetFirstMother();
      }
      this->PrintInfo("h");
    }//mismatch
  }
}

//====================================
void AliMUONTrackLight::ResetQuarkInfo(){
  /// resets parton information
  for(int pos = 1; pos < 4; pos++){//[0] is the string
    this->SetQuarkPDGCode(pos,-1);
    this->SetQuarkPythiaLine(pos,-1);
  }
}

//====================================
Bool_t AliMUONTrackLight::IsB0(Int_t intTest) const {
  /// checks if the particle is a B0 
  Int_t bMes0[2] = {511,531};//flavour code of B0d and B0s
  Bool_t answer = kFALSE;
  for(int i = 0; i < 2; i++){
    if(TMath::Abs(intTest) == bMes0[i]){
      answer = kTRUE;
      break;
    }
  }
  return answer;
}
//====================================
Bool_t AliMUONTrackLight::IsMotherAResonance(Int_t index) const {
  /// checks if mother is a resonance
  Int_t intTest = GetParentPDGCode(index); 
  // the resonance pdg code is built this way
  // x00ffn where x=0,1,.. (1S,2S... states), f=quark flavour 
  Int_t id=intTest%100000; 
  return (!((id-id%10)%110));
}
//====================================
Int_t AliMUONTrackLight::GetParentFlavour(Int_t idParent) const {
  /// returns the flavour of parent idParent (idParent=0 is the oldest 
  /// hadronized parent)
  Int_t pdg = GetParentPDGCode(idParent); 
  Int_t quark = TMath::Abs(pdg/100);
  if(quark > 9) quark = quark/10;
  return quark;
}

//====================================
void AliMUONTrackLight::PrintInfo(const Option_t* opt){
  /// prints information about the track: 
  /// - "H" muon's decay history
  /// - "K" muon kinematics
  /// - "A" all variables
  TString options(opt);
  options.ToUpper();

  if(options.Contains("H") || options.Contains("A")){ //muon decay history
    char *name= new char[100];
    TString pdg = "", line = "";
    for(int i = 3; i >= 0; i--){
      if(this->GetQuarkPythiaLine(i)>= 0){
	snprintf(name, 100, "%4d --> ", this->GetQuarkPythiaLine(i));
	line += name;
	snprintf(name, 100, "%4d --> ", this->GetQuarkPDGCode(i));
	pdg += name;
      }
    }
    for(int i = 0; i < fNParents; i++){ 
      if(this->GetParentPythiaLine(i)>= 0){
	snprintf(name, 100, "%7d --> ", this->GetParentPythiaLine(i));
	line += name;
	snprintf(name, 100, "%7d --> ", this->GetParentPDGCode(i));
	pdg += name;
      }
    }
    snprintf(name, 100, "%4d", this->GetTrackPythiaLine()); line += name;
    snprintf(name, 100, "%4d", this->GetTrackPDGCode()); pdg += name;

    printf("\nmuon's decay history:\n");
    printf(" PDG: %s\n", pdg.Data());
    printf("line: %s\n", line.Data());
  }
  if(options.Contains("K") || options.Contains("A")){ //muon kinematic

    Int_t charge = this->GetCharge();
    Double_t *vtx = this->GetVertex();
    TLorentzVector momRec = this->GetPRec();
    TLorentzVector momGen = this->GetPGen();
    printf("the track's charge is %d\n", charge);
    printf("Primary vertex: Vx = %1.3f, Vy = %1.3f, Vz = %1.3f\n", vtx[0], vtx[1], vtx[2]);
    printf("Generated:     Px = %1.3f, Py = %1.3f, Pz = %1.3f\n", momGen.Px(), momGen.Py(), momGen.Pz());
    printf("Reconstructed: Px = %1.3f, Py = %1.3f, Pz = %1.3f\n", momRec.Px(), momRec.Py(), momRec.Pz());
    printf("Rec. variables: pT %1.3f, pseudo-rapidity %1.3f, theta %1.3f (%1.3f degree), phi %1.3f (%1.3f degree)\n", 
	   momRec.Pt(), momRec.Eta(), momRec.Theta(), 180./TMath::Pi() * momRec.Theta(), 
	   momRec.Phi(), 180./TMath::Pi() * momRec.Phi());
  }
}
//====================================
Bool_t AliMUONTrackLight::IsParentPionOrKaon(Int_t idparent){
  /// checks if a muon comes from a pion or kaon or a particle that decays into one of these two
  Int_t pdg = this->GetParentPDGCode(idparent); 
  if (TMath::Abs(pdg)==211 || //pi+
      TMath::Abs(pdg)==321 || //K+
      TMath::Abs(pdg)==213 || //rho+
      TMath::Abs(pdg)==311 || //K0
      TMath::Abs(pdg)==313 || //K*0
      TMath::Abs(pdg)==323    //K*+
      ) { 
    return kTRUE;
  }
  else return kFALSE;
}
//====================================
Bool_t AliMUONTrackLight::IsDiquark(Int_t pdg) const{
  /// check if the provided pdg code corresponds to a diquark 
  pdg = TMath::Abs(pdg);
  if((pdg > 1000) && (pdg%100 < 10)) return kTRUE;
  else return kFALSE;
}
 AliMUONTrackLight.cxx:1
 AliMUONTrackLight.cxx:2
 AliMUONTrackLight.cxx:3
 AliMUONTrackLight.cxx:4
 AliMUONTrackLight.cxx:5
 AliMUONTrackLight.cxx:6
 AliMUONTrackLight.cxx:7
 AliMUONTrackLight.cxx:8
 AliMUONTrackLight.cxx:9
 AliMUONTrackLight.cxx:10
 AliMUONTrackLight.cxx:11
 AliMUONTrackLight.cxx:12
 AliMUONTrackLight.cxx:13
 AliMUONTrackLight.cxx:14
 AliMUONTrackLight.cxx:15
 AliMUONTrackLight.cxx:16
 AliMUONTrackLight.cxx:17
 AliMUONTrackLight.cxx:18
 AliMUONTrackLight.cxx:19
 AliMUONTrackLight.cxx:20
 AliMUONTrackLight.cxx:21
 AliMUONTrackLight.cxx:22
 AliMUONTrackLight.cxx:23
 AliMUONTrackLight.cxx:24
 AliMUONTrackLight.cxx:25
 AliMUONTrackLight.cxx:26
 AliMUONTrackLight.cxx:27
 AliMUONTrackLight.cxx:28
 AliMUONTrackLight.cxx:29
 AliMUONTrackLight.cxx:30
 AliMUONTrackLight.cxx:31
 AliMUONTrackLight.cxx:32
 AliMUONTrackLight.cxx:33
 AliMUONTrackLight.cxx:34
 AliMUONTrackLight.cxx:35
 AliMUONTrackLight.cxx:36
 AliMUONTrackLight.cxx:37
 AliMUONTrackLight.cxx:38
 AliMUONTrackLight.cxx:39
 AliMUONTrackLight.cxx:40
 AliMUONTrackLight.cxx:41
 AliMUONTrackLight.cxx:42
 AliMUONTrackLight.cxx:43
 AliMUONTrackLight.cxx:44
 AliMUONTrackLight.cxx:45
 AliMUONTrackLight.cxx:46
 AliMUONTrackLight.cxx:47
 AliMUONTrackLight.cxx:48
 AliMUONTrackLight.cxx:49
 AliMUONTrackLight.cxx:50
 AliMUONTrackLight.cxx:51
 AliMUONTrackLight.cxx:52
 AliMUONTrackLight.cxx:53
 AliMUONTrackLight.cxx:54
 AliMUONTrackLight.cxx:55
 AliMUONTrackLight.cxx:56
 AliMUONTrackLight.cxx:57
 AliMUONTrackLight.cxx:58
 AliMUONTrackLight.cxx:59
 AliMUONTrackLight.cxx:60
 AliMUONTrackLight.cxx:61
 AliMUONTrackLight.cxx:62
 AliMUONTrackLight.cxx:63
 AliMUONTrackLight.cxx:64
 AliMUONTrackLight.cxx:65
 AliMUONTrackLight.cxx:66
 AliMUONTrackLight.cxx:67
 AliMUONTrackLight.cxx:68
 AliMUONTrackLight.cxx:69
 AliMUONTrackLight.cxx:70
 AliMUONTrackLight.cxx:71
 AliMUONTrackLight.cxx:72
 AliMUONTrackLight.cxx:73
 AliMUONTrackLight.cxx:74
 AliMUONTrackLight.cxx:75
 AliMUONTrackLight.cxx:76
 AliMUONTrackLight.cxx:77
 AliMUONTrackLight.cxx:78
 AliMUONTrackLight.cxx:79
 AliMUONTrackLight.cxx:80
 AliMUONTrackLight.cxx:81
 AliMUONTrackLight.cxx:82
 AliMUONTrackLight.cxx:83
 AliMUONTrackLight.cxx:84
 AliMUONTrackLight.cxx:85
 AliMUONTrackLight.cxx:86
 AliMUONTrackLight.cxx:87
 AliMUONTrackLight.cxx:88
 AliMUONTrackLight.cxx:89
 AliMUONTrackLight.cxx:90
 AliMUONTrackLight.cxx:91
 AliMUONTrackLight.cxx:92
 AliMUONTrackLight.cxx:93
 AliMUONTrackLight.cxx:94
 AliMUONTrackLight.cxx:95
 AliMUONTrackLight.cxx:96
 AliMUONTrackLight.cxx:97
 AliMUONTrackLight.cxx:98
 AliMUONTrackLight.cxx:99
 AliMUONTrackLight.cxx:100
 AliMUONTrackLight.cxx:101
 AliMUONTrackLight.cxx:102
 AliMUONTrackLight.cxx:103
 AliMUONTrackLight.cxx:104
 AliMUONTrackLight.cxx:105
 AliMUONTrackLight.cxx:106
 AliMUONTrackLight.cxx:107
 AliMUONTrackLight.cxx:108
 AliMUONTrackLight.cxx:109
 AliMUONTrackLight.cxx:110
 AliMUONTrackLight.cxx:111
 AliMUONTrackLight.cxx:112
 AliMUONTrackLight.cxx:113
 AliMUONTrackLight.cxx:114
 AliMUONTrackLight.cxx:115
 AliMUONTrackLight.cxx:116
 AliMUONTrackLight.cxx:117
 AliMUONTrackLight.cxx:118
 AliMUONTrackLight.cxx:119
 AliMUONTrackLight.cxx:120
 AliMUONTrackLight.cxx:121
 AliMUONTrackLight.cxx:122
 AliMUONTrackLight.cxx:123
 AliMUONTrackLight.cxx:124
 AliMUONTrackLight.cxx:125
 AliMUONTrackLight.cxx:126
 AliMUONTrackLight.cxx:127
 AliMUONTrackLight.cxx:128
 AliMUONTrackLight.cxx:129
 AliMUONTrackLight.cxx:130
 AliMUONTrackLight.cxx:131
 AliMUONTrackLight.cxx:132
 AliMUONTrackLight.cxx:133
 AliMUONTrackLight.cxx:134
 AliMUONTrackLight.cxx:135
 AliMUONTrackLight.cxx:136
 AliMUONTrackLight.cxx:137
 AliMUONTrackLight.cxx:138
 AliMUONTrackLight.cxx:139
 AliMUONTrackLight.cxx:140
 AliMUONTrackLight.cxx:141
 AliMUONTrackLight.cxx:142
 AliMUONTrackLight.cxx:143
 AliMUONTrackLight.cxx:144
 AliMUONTrackLight.cxx:145
 AliMUONTrackLight.cxx:146
 AliMUONTrackLight.cxx:147
 AliMUONTrackLight.cxx:148
 AliMUONTrackLight.cxx:149
 AliMUONTrackLight.cxx:150
 AliMUONTrackLight.cxx:151
 AliMUONTrackLight.cxx:152
 AliMUONTrackLight.cxx:153
 AliMUONTrackLight.cxx:154
 AliMUONTrackLight.cxx:155
 AliMUONTrackLight.cxx:156
 AliMUONTrackLight.cxx:157
 AliMUONTrackLight.cxx:158
 AliMUONTrackLight.cxx:159
 AliMUONTrackLight.cxx:160
 AliMUONTrackLight.cxx:161
 AliMUONTrackLight.cxx:162
 AliMUONTrackLight.cxx:163
 AliMUONTrackLight.cxx:164
 AliMUONTrackLight.cxx:165
 AliMUONTrackLight.cxx:166
 AliMUONTrackLight.cxx:167
 AliMUONTrackLight.cxx:168
 AliMUONTrackLight.cxx:169
 AliMUONTrackLight.cxx:170
 AliMUONTrackLight.cxx:171
 AliMUONTrackLight.cxx:172
 AliMUONTrackLight.cxx:173
 AliMUONTrackLight.cxx:174
 AliMUONTrackLight.cxx:175
 AliMUONTrackLight.cxx:176
 AliMUONTrackLight.cxx:177
 AliMUONTrackLight.cxx:178
 AliMUONTrackLight.cxx:179
 AliMUONTrackLight.cxx:180
 AliMUONTrackLight.cxx:181
 AliMUONTrackLight.cxx:182
 AliMUONTrackLight.cxx:183
 AliMUONTrackLight.cxx:184
 AliMUONTrackLight.cxx:185
 AliMUONTrackLight.cxx:186
 AliMUONTrackLight.cxx:187
 AliMUONTrackLight.cxx:188
 AliMUONTrackLight.cxx:189
 AliMUONTrackLight.cxx:190
 AliMUONTrackLight.cxx:191
 AliMUONTrackLight.cxx:192
 AliMUONTrackLight.cxx:193
 AliMUONTrackLight.cxx:194
 AliMUONTrackLight.cxx:195
 AliMUONTrackLight.cxx:196
 AliMUONTrackLight.cxx:197
 AliMUONTrackLight.cxx:198
 AliMUONTrackLight.cxx:199
 AliMUONTrackLight.cxx:200
 AliMUONTrackLight.cxx:201
 AliMUONTrackLight.cxx:202
 AliMUONTrackLight.cxx:203
 AliMUONTrackLight.cxx:204
 AliMUONTrackLight.cxx:205
 AliMUONTrackLight.cxx:206
 AliMUONTrackLight.cxx:207
 AliMUONTrackLight.cxx:208
 AliMUONTrackLight.cxx:209
 AliMUONTrackLight.cxx:210
 AliMUONTrackLight.cxx:211
 AliMUONTrackLight.cxx:212
 AliMUONTrackLight.cxx:213
 AliMUONTrackLight.cxx:214
 AliMUONTrackLight.cxx:215
 AliMUONTrackLight.cxx:216
 AliMUONTrackLight.cxx:217
 AliMUONTrackLight.cxx:218
 AliMUONTrackLight.cxx:219
 AliMUONTrackLight.cxx:220
 AliMUONTrackLight.cxx:221
 AliMUONTrackLight.cxx:222
 AliMUONTrackLight.cxx:223
 AliMUONTrackLight.cxx:224
 AliMUONTrackLight.cxx:225
 AliMUONTrackLight.cxx:226
 AliMUONTrackLight.cxx:227
 AliMUONTrackLight.cxx:228
 AliMUONTrackLight.cxx:229
 AliMUONTrackLight.cxx:230
 AliMUONTrackLight.cxx:231
 AliMUONTrackLight.cxx:232
 AliMUONTrackLight.cxx:233
 AliMUONTrackLight.cxx:234
 AliMUONTrackLight.cxx:235
 AliMUONTrackLight.cxx:236
 AliMUONTrackLight.cxx:237
 AliMUONTrackLight.cxx:238
 AliMUONTrackLight.cxx:239
 AliMUONTrackLight.cxx:240
 AliMUONTrackLight.cxx:241
 AliMUONTrackLight.cxx:242
 AliMUONTrackLight.cxx:243
 AliMUONTrackLight.cxx:244
 AliMUONTrackLight.cxx:245
 AliMUONTrackLight.cxx:246
 AliMUONTrackLight.cxx:247
 AliMUONTrackLight.cxx:248
 AliMUONTrackLight.cxx:249
 AliMUONTrackLight.cxx:250
 AliMUONTrackLight.cxx:251
 AliMUONTrackLight.cxx:252
 AliMUONTrackLight.cxx:253
 AliMUONTrackLight.cxx:254
 AliMUONTrackLight.cxx:255
 AliMUONTrackLight.cxx:256
 AliMUONTrackLight.cxx:257
 AliMUONTrackLight.cxx:258
 AliMUONTrackLight.cxx:259
 AliMUONTrackLight.cxx:260
 AliMUONTrackLight.cxx:261
 AliMUONTrackLight.cxx:262
 AliMUONTrackLight.cxx:263
 AliMUONTrackLight.cxx:264
 AliMUONTrackLight.cxx:265
 AliMUONTrackLight.cxx:266
 AliMUONTrackLight.cxx:267
 AliMUONTrackLight.cxx:268
 AliMUONTrackLight.cxx:269
 AliMUONTrackLight.cxx:270
 AliMUONTrackLight.cxx:271
 AliMUONTrackLight.cxx:272
 AliMUONTrackLight.cxx:273
 AliMUONTrackLight.cxx:274
 AliMUONTrackLight.cxx:275
 AliMUONTrackLight.cxx:276
 AliMUONTrackLight.cxx:277
 AliMUONTrackLight.cxx:278
 AliMUONTrackLight.cxx:279
 AliMUONTrackLight.cxx:280
 AliMUONTrackLight.cxx:281
 AliMUONTrackLight.cxx:282
 AliMUONTrackLight.cxx:283
 AliMUONTrackLight.cxx:284
 AliMUONTrackLight.cxx:285
 AliMUONTrackLight.cxx:286
 AliMUONTrackLight.cxx:287
 AliMUONTrackLight.cxx:288
 AliMUONTrackLight.cxx:289
 AliMUONTrackLight.cxx:290
 AliMUONTrackLight.cxx:291
 AliMUONTrackLight.cxx:292
 AliMUONTrackLight.cxx:293
 AliMUONTrackLight.cxx:294
 AliMUONTrackLight.cxx:295
 AliMUONTrackLight.cxx:296
 AliMUONTrackLight.cxx:297
 AliMUONTrackLight.cxx:298
 AliMUONTrackLight.cxx:299
 AliMUONTrackLight.cxx:300
 AliMUONTrackLight.cxx:301
 AliMUONTrackLight.cxx:302
 AliMUONTrackLight.cxx:303
 AliMUONTrackLight.cxx:304
 AliMUONTrackLight.cxx:305
 AliMUONTrackLight.cxx:306
 AliMUONTrackLight.cxx:307
 AliMUONTrackLight.cxx:308
 AliMUONTrackLight.cxx:309
 AliMUONTrackLight.cxx:310
 AliMUONTrackLight.cxx:311
 AliMUONTrackLight.cxx:312
 AliMUONTrackLight.cxx:313
 AliMUONTrackLight.cxx:314
 AliMUONTrackLight.cxx:315
 AliMUONTrackLight.cxx:316
 AliMUONTrackLight.cxx:317
 AliMUONTrackLight.cxx:318
 AliMUONTrackLight.cxx:319
 AliMUONTrackLight.cxx:320
 AliMUONTrackLight.cxx:321
 AliMUONTrackLight.cxx:322
 AliMUONTrackLight.cxx:323
 AliMUONTrackLight.cxx:324
 AliMUONTrackLight.cxx:325
 AliMUONTrackLight.cxx:326
 AliMUONTrackLight.cxx:327
 AliMUONTrackLight.cxx:328
 AliMUONTrackLight.cxx:329
 AliMUONTrackLight.cxx:330
 AliMUONTrackLight.cxx:331
 AliMUONTrackLight.cxx:332
 AliMUONTrackLight.cxx:333
 AliMUONTrackLight.cxx:334
 AliMUONTrackLight.cxx:335
 AliMUONTrackLight.cxx:336
 AliMUONTrackLight.cxx:337
 AliMUONTrackLight.cxx:338
 AliMUONTrackLight.cxx:339
 AliMUONTrackLight.cxx:340
 AliMUONTrackLight.cxx:341
 AliMUONTrackLight.cxx:342
 AliMUONTrackLight.cxx:343
 AliMUONTrackLight.cxx:344
 AliMUONTrackLight.cxx:345
 AliMUONTrackLight.cxx:346
 AliMUONTrackLight.cxx:347
 AliMUONTrackLight.cxx:348
 AliMUONTrackLight.cxx:349
 AliMUONTrackLight.cxx:350
 AliMUONTrackLight.cxx:351
 AliMUONTrackLight.cxx:352
 AliMUONTrackLight.cxx:353
 AliMUONTrackLight.cxx:354
 AliMUONTrackLight.cxx:355
 AliMUONTrackLight.cxx:356
 AliMUONTrackLight.cxx:357
 AliMUONTrackLight.cxx:358
 AliMUONTrackLight.cxx:359
 AliMUONTrackLight.cxx:360
 AliMUONTrackLight.cxx:361
 AliMUONTrackLight.cxx:362
 AliMUONTrackLight.cxx:363
 AliMUONTrackLight.cxx:364
 AliMUONTrackLight.cxx:365
 AliMUONTrackLight.cxx:366
 AliMUONTrackLight.cxx:367
 AliMUONTrackLight.cxx:368
 AliMUONTrackLight.cxx:369
 AliMUONTrackLight.cxx:370
 AliMUONTrackLight.cxx:371
 AliMUONTrackLight.cxx:372
 AliMUONTrackLight.cxx:373
 AliMUONTrackLight.cxx:374
 AliMUONTrackLight.cxx:375
 AliMUONTrackLight.cxx:376
 AliMUONTrackLight.cxx:377
 AliMUONTrackLight.cxx:378
 AliMUONTrackLight.cxx:379
 AliMUONTrackLight.cxx:380
 AliMUONTrackLight.cxx:381
 AliMUONTrackLight.cxx:382
 AliMUONTrackLight.cxx:383
 AliMUONTrackLight.cxx:384
 AliMUONTrackLight.cxx:385
 AliMUONTrackLight.cxx:386
 AliMUONTrackLight.cxx:387
 AliMUONTrackLight.cxx:388
 AliMUONTrackLight.cxx:389
 AliMUONTrackLight.cxx:390
 AliMUONTrackLight.cxx:391
 AliMUONTrackLight.cxx:392
 AliMUONTrackLight.cxx:393
 AliMUONTrackLight.cxx:394
 AliMUONTrackLight.cxx:395
 AliMUONTrackLight.cxx:396
 AliMUONTrackLight.cxx:397
 AliMUONTrackLight.cxx:398
 AliMUONTrackLight.cxx:399
 AliMUONTrackLight.cxx:400
 AliMUONTrackLight.cxx:401
 AliMUONTrackLight.cxx:402
 AliMUONTrackLight.cxx:403
 AliMUONTrackLight.cxx:404
 AliMUONTrackLight.cxx:405
 AliMUONTrackLight.cxx:406
 AliMUONTrackLight.cxx:407
 AliMUONTrackLight.cxx:408
 AliMUONTrackLight.cxx:409
 AliMUONTrackLight.cxx:410
 AliMUONTrackLight.cxx:411
 AliMUONTrackLight.cxx:412
 AliMUONTrackLight.cxx:413
 AliMUONTrackLight.cxx:414
 AliMUONTrackLight.cxx:415
 AliMUONTrackLight.cxx:416
 AliMUONTrackLight.cxx:417
 AliMUONTrackLight.cxx:418
 AliMUONTrackLight.cxx:419
 AliMUONTrackLight.cxx:420
 AliMUONTrackLight.cxx:421
 AliMUONTrackLight.cxx:422
 AliMUONTrackLight.cxx:423
 AliMUONTrackLight.cxx:424
 AliMUONTrackLight.cxx:425