ROOT logo
// AliAODDimuon: a class for AODs for the MUON Arm of the ALICE Experiment
// Author: P. Cortese, Universita' del Piemonte Orientale in Alessandria and
// INFN of Torino - Italy
//
// The class defines a dimuon pair object from two AliAODTrack objects.
// AliAODDimuon objects are supposed to be added to the AliAODEvent structure
// during analysis. They would then allow to calculate the dimuon-related
// kinematic variables with a minimal disk occupancy.
// The payload of the class has been reduced to two pointers to the two
// tracks. An instance of this class has also to be added to the AliAODEvent 
// structure to provide additional information that is specific to MUON and 
// therefore has not been included into the AOD header.
// Two transient data members are not stored on file as they can be recomputed
// at runtime.
//

#include "AliAODDimuon.h"
#include "TLorentzVector.h"
#define AliAODDimuon_CXX

ClassImp(AliAODDimuon)

//______________________________________________________________________________
AliAODDimuon::AliAODDimuon():AliVParticle(),fP(0),fMProton(0.93827231)
{
  // default constructor
  fMu[0]=0;
  fMu[1]=0;
}

//______________________________________________________________________________
AliAODDimuon::AliAODDimuon(const AliAODDimuon& dimu):
  AliVParticle(dimu),
  fP(0),fMProton(0.93827231)
{
  // copy constructor
  fMu[0]=dimu.Mu(0);
  fMu[1]=dimu.Mu(1);
}

//______________________________________________________________________________
AliAODDimuon &AliAODDimuon::operator=(const AliAODDimuon& dimu)
{
  // assignment operator
  if(&dimu != this){
    delete fP;
    fP=0;
    fMProton=0.93827231;
    fMu[0]=dimu.Mu(0);
    fMu[1]=dimu.Mu(1);
  }
  return *this;
}

//______________________________________________________________________________
AliAODDimuon::AliAODDimuon(TObject *mu0, TObject *mu1):
  fP(0),fMProton(0.93827231)
{
  // Creates a dimuon pair from two tracks

  fMu[0]=mu0;
  fMu[1]=mu1;
}

//______________________________________________________________________________
AliAODDimuon::~AliAODDimuon()
{
  // destructor
  delete fP;
}

//______________________________________________________________________________
Double_t AliAODDimuon::Px() const {
  // Px of the dimuon
  if(CheckPointers())return -999999999;
  return ((AliAODTrack*)fMu[0].GetObject())->Px()+
         ((AliAODTrack*)fMu[1].GetObject())->Px();
}

//______________________________________________________________________________
Double_t AliAODDimuon::Py() const {
  // Py of the dimuon
  if(CheckPointers())return -999999999;
  return ((AliAODTrack*)fMu[0].GetObject())->Py()+
         ((AliAODTrack*)fMu[1].GetObject())->Py();
}

//______________________________________________________________________________
Double_t AliAODDimuon::Pz() const {
  // Pz of the dimuon
  if(CheckPointers())return -999999999;
  return ((AliAODTrack*)fMu[0].GetObject())->Pz()+
         ((AliAODTrack*)fMu[1].GetObject())->Pz();
}

//______________________________________________________________________________
Double_t AliAODDimuon::Pt() const {
  // Pt of the dimuon
  if(CheckPointers())return -999999999;
  Double_t px=Px();
  Double_t py=Py();
  return TMath::Sqrt(px*px+py*py);
}

//______________________________________________________________________________
Double_t AliAODDimuon::E() const 
{
    // Dimuon energy
  
  if(CheckPointers())return -999999999;

  return ((AliAODTrack*)fMu[0].GetObject())->E()+ ((AliAODTrack*)fMu[1].GetObject())->E();
}

//______________________________________________________________________________
Double_t AliAODDimuon::P() const {
  // Dimuon momentum
  if(CheckPointers())return -999999999;
  return TLV()->P();
}

//______________________________________________________________________________
Double_t AliAODDimuon::M() const {
  // Dimuon invariant mass
  if(CheckPointers())return -999999999;
  return TLV()->M();
}

//______________________________________________________________________________
Double_t AliAODDimuon::Eta() const {
  // Dimuon pseudorapidity
  if(CheckPointers())return -999999999;
  return TLV()->Eta();
}

//______________________________________________________________________________
Double_t AliAODDimuon::Phi() const {
  // Dimuon asimuthal angle
  if(CheckPointers())return -999999999;
  return TLV()->Phi();
}


//______________________________________________________________________________
Double_t AliAODDimuon::Theta() const {
  // Dimuon polar angle
  if(CheckPointers())return -999999999;
  return TLV()->Theta();
}

//______________________________________________________________________________
Double_t AliAODDimuon::Y() const {
  // Dimuon rapidity
  if(CheckPointers())return -999999999;
  return TLV()->Rapidity();
}

//______________________________________________________________________________
Short_t AliAODDimuon::Charge() const {
  // Dimuon charge
  if(CheckPointers())return -999;
  return ((AliAODTrack*)fMu[0].GetObject())->Charge()+
         ((AliAODTrack*)fMu[1].GetObject())->Charge();
}

//______________________________________________________________________________
Int_t AliAODDimuon::CheckPointers() const{
  // Checks if the track pointers have been initialized
  if(fMu[0]==0||fMu[1]==0){
    printf("Dimuon not initialized\n");
    return -999;
  }
  if((fMu[0].GetObject())==0||(fMu[1].GetObject())==0){
    printf("Can not get objects\n");
    return -999;
  }
  return 0;
}

//______________________________________________________________________________
void AliAODDimuon::SetMu(Int_t imu, AliAODTrack *mu){
  // Assign a track pointer
  if (imu==0||imu==1){
    delete fP;
    fP=0;
    fMu[imu]=mu;
  }
}

//______________________________________________________________________________
void AliAODDimuon::SetMuons(AliAODTrack *mu0, AliAODTrack *mu1){
  // Assign the track pointers
  fMu[0]=mu0;
  fMu[1]=mu1;
  delete fP;
  fP=0;
}

//______________________________________________________________________________
Double_t AliAODDimuon::XF() {
  // Dimuon Feynman x

  if(CheckPointers())return -999999999;

  //Double_t ebeam=((AliAODEventInfo*)fEi.GetObject())->EBeam();
  Double_t ebeam = 3500.; // temporary
  if(ebeam<=0){
    printf("AliAODDimuon::xf: can not compute xf with EBeam=%f\n",ebeam);
    return -999999999;
  }
  Double_t mDimu=M();
  Double_t pMax=TMath::Sqrt(ebeam*ebeam-mDimu*mDimu);
  return Pz()/pMax;
}

//______________________________________________________________________________
Double_t AliAODDimuon::CostCS(){
  // Calculation the Collins-Soper angle (adapted from code by R. Arnaldi)
  if(CheckPointers())return -999999999;
  Double_t ebeam=3500.;  //temporary
  if(ebeam<=0){
    printf("Can not compute costCS with EBeam=%f\n",ebeam);
    return -999999999;
  }
  Double_t mp=fMProton;
  Double_t pbeam=TMath::Sqrt(ebeam*ebeam-mp*mp);
  Double_t pla10=((AliAODTrack*)fMu[0].GetObject())->Px();
  Double_t pla11=((AliAODTrack*)fMu[0].GetObject())->Py();
  Double_t pla12=((AliAODTrack*)fMu[0].GetObject())->Pz();
  Double_t e1=((AliAODTrack*)fMu[0].GetObject())->E();
  Double_t mu1Charge=((AliAODTrack*)fMu[0].GetObject())->Charge();
  Double_t pla20=((AliAODTrack*)fMu[1].GetObject())->Px();
  Double_t pla21=((AliAODTrack*)fMu[1].GetObject())->Py();
  Double_t pla22=((AliAODTrack*)fMu[1].GetObject())->Pz();
  Double_t e2=((AliAODTrack*)fMu[1].GetObject())->E();
  Double_t mu2Charge=((AliAODTrack*)fMu[1].GetObject())->Charge();

  // Fill the Lorentz vector for projectile and target
  // For the moment we do not consider the crossing angle
  // Projectile runs towards the MUON arm
  TLorentzVector pProjCM(0.,0.,-pbeam,ebeam); // projectile
  TLorentzVector pTargCM(0.,0., pbeam,ebeam); // target
  //
  // --- Get the muons parameters in the CM frame
  //
  TLorentzVector pMu1CM(pla10,pla11,pla12,e1);
  TLorentzVector pMu2CM(pla20,pla21,pla22,e2);
  //
  // --- Obtain the dimuon parameters in the CM frame
  //
  TLorentzVector pDimuCM=pMu1CM+pMu2CM;
  //
  // --- Translate the dimuon parameters in the dimuon rest frame
  //
  TVector3 beta=(-1./pDimuCM.E())*pDimuCM.Vect();
  TLorentzVector pMu1Dimu=pMu1CM;
  TLorentzVector pMu2Dimu=pMu2CM;
  TLorentzVector pProjDimu=pProjCM;
  TLorentzVector pTargDimu=pTargCM;
  pMu1Dimu.Boost(beta);
  pMu2Dimu.Boost(beta);
  pProjDimu.Boost(beta);
  pTargDimu.Boost(beta);
  //
  // --- Determine the z axis for the CS angle 
  //
  TVector3 zaxisCS=(((pProjDimu.Vect()).Unit())-((pTargDimu.Vect()).Unit())).Unit();
  //
  // --- Determine the CS angle (angle between mu+ and the z axis defined above)
  //
  Double_t cost;
  if(mu1Charge > 0) {
    cost = zaxisCS.Dot((pMu1Dimu.Vect()).Unit());
    // Theta CS is not properly defined for Like-Sign muons
    if(mu2Charge > 0 && cost<0) cost=-cost;
  } else { 
    // Theta CS is not properly defined for Like-Sign muons
    cost = zaxisCS.Dot((pMu2Dimu.Vect()).Unit());
    if(mu2Charge < 0 && cost<0) cost=-cost;
  }
  return cost;
}

//______________________________________________________________________________
Double_t AliAODDimuon::CostHe(){
  // Calculation the Helicity polarization angle (adapted from code by R. Arnaldi)
  if(CheckPointers())return -999999999;
  Double_t ebeam=3500; //temporary
  if(ebeam<=0){
    printf("Can not compute costCS with EBeam=%f\n",ebeam);
    return -999999999;
  }
  Double_t pla10=((AliAODTrack*)fMu[0].GetObject())->Px();
  Double_t pla11=((AliAODTrack*)fMu[0].GetObject())->Py();
  Double_t pla12=((AliAODTrack*)fMu[0].GetObject())->Pz();
  Double_t e1=((AliAODTrack*)fMu[0].GetObject())->E();
  Double_t mu1Charge=((AliAODTrack*)fMu[0].GetObject())->Charge();
  Double_t pla20=((AliAODTrack*)fMu[1].GetObject())->Px();
  Double_t pla21=((AliAODTrack*)fMu[1].GetObject())->Py();
  Double_t pla22=((AliAODTrack*)fMu[1].GetObject())->Pz();
  Double_t e2=((AliAODTrack*)fMu[1].GetObject())->E();
  Double_t mu2Charge=((AliAODTrack*)fMu[1].GetObject())->Charge();
  //
  // --- Get the muons parameters in the CM frame
  //
  TLorentzVector pMu1CM(pla10,pla11,pla12,e1);
  TLorentzVector pMu2CM(pla20,pla21,pla22,e2);
  //
  // --- Obtain the dimuon parameters in the CM frame
  //
  TLorentzVector pDimuCM=pMu1CM+pMu2CM;
  //
  // --- Translate the dimuon parameters in the dimuon rest frame
  //
  TVector3 beta=(-1./pDimuCM.E())*pDimuCM.Vect();
  TLorentzVector pMu1Dimu=pMu1CM;
  TLorentzVector pMu2Dimu=pMu2CM;
  pMu1Dimu.Boost(beta);
  pMu2Dimu.Boost(beta);
  //
  // --- Determine the z axis for the calculation of the polarization angle
  // (i.e. the direction of the dimuon in the CM system)
  //
  TVector3 zaxis;
  zaxis=(pDimuCM.Vect()).Unit();
  //
  // --- Calculation of the polarization angle (Helicity)
  // (angle between mu+ and the z axis defined above)
  //
  Double_t cost;
  if(mu1Charge > 0) {
    cost = zaxis.Dot((pMu1Dimu.Vect()).Unit());
    // Theta Helicity is not properly defined for Like-Sign muons
    if(mu2Charge > 0 && cost<0) cost=-cost;
  } else { 
    cost = zaxis.Dot((pMu2Dimu.Vect()).Unit());
    // Theta Helicity is not properly defined for Like-Sign muons
    if(mu2Charge < 0 && cost<0) cost=-cost;
  }  
  return cost;
}

//________________________________________________________________________
Double_t AliAODDimuon::PhiCS(){
  // Cosinus of the Collins-Soper polar decay angle
  if(CheckPointers())return -999999999;
  Double_t ebeam=3500.;  //temporary
  if(ebeam<=0){
    printf("Can not compute phiCS with EBeam=%f\n",ebeam);
    return -999999999;
  }
  Double_t mp=fMProton;
  Double_t pbeam=TMath::Sqrt(ebeam*ebeam-mp*mp);
  Double_t pla10=((AliAODTrack*)fMu[0].GetObject())->Px();
  Double_t pla11=((AliAODTrack*)fMu[0].GetObject())->Py();
  Double_t pla12=((AliAODTrack*)fMu[0].GetObject())->Pz();
  Double_t e1=((AliAODTrack*)fMu[0].GetObject())->E();
  Double_t mu1Charge=((AliAODTrack*)fMu[0].GetObject())->Charge();
  Double_t pla20=((AliAODTrack*)fMu[1].GetObject())->Px();
  Double_t pla21=((AliAODTrack*)fMu[1].GetObject())->Py();
  Double_t pla22=((AliAODTrack*)fMu[1].GetObject())->Pz();
  Double_t e2=((AliAODTrack*)fMu[1].GetObject())->E();

  // Fill the Lorentz vector for projectile and target
  // For the moment we do not consider the crossing angle
  // Projectile runs towards the MUON arm
  TLorentzVector pProjCM(0.,0.,-pbeam,ebeam); // projectile
  TLorentzVector pTargCM(0.,0., pbeam,ebeam); // target
  //
  // --- Get the muons parameters in the CM frame
  //
  TLorentzVector pMu1CM(pla10,pla11,pla12,e1);
  TLorentzVector pMu2CM(pla20,pla21,pla22,e2);
  //
  // --- Obtain the dimuon parameters in the CM frame
  //
  TLorentzVector pDimuCM=pMu1CM+pMu2CM;
  //
  // --- Translate the dimuon parameters in the dimuon rest frame
  //
  TVector3 beta=(-1./pDimuCM.E())*pDimuCM.Vect();
  TLorentzVector pMu1Dimu=pMu1CM;
  TLorentzVector pMu2Dimu=pMu2CM;
  TLorentzVector pProjDimu=pProjCM;
  TLorentzVector pTargDimu=pTargCM;
  pMu1Dimu.Boost(beta);
  pMu2Dimu.Boost(beta);
  pProjDimu.Boost(beta);
  pTargDimu.Boost(beta);
  //
  // --- Determine the z axis for the CS angle 
  //
  TVector3 zaxisCS=(((pProjDimu.Vect()).Unit())-((pTargDimu.Vect()).Unit())).Unit();
  //
  // --- Determine the CS angle (angle between mu+ and the z axis defined above)
  //
   TVector3 yaxisCS=(((pProjDimu.Vect()).Unit()).Cross((pTargDimu.Vect()).Unit())).Unit();
   TVector3 xaxisCS=(yaxisCS.Cross(zaxisCS)).Unit();
 
   Double_t phi;
   if(mu1Charge>0) phi = TMath::ATan2((pMu1Dimu.Vect()).Dot(yaxisCS),((pMu1Dimu.Vect()).Dot(xaxisCS)));
   else phi = TMath::ATan2((pMu2Dimu.Vect()).Dot(yaxisCS),((pMu2Dimu.Vect()).Dot(xaxisCS)));
     
   return phi;
}

//______________________________________________________________________________
Double_t AliAODDimuon::PhiHe(){
  // Calculation the Helicity aimuthal angle (adapted from code by R. Arnaldi)
  if(CheckPointers())return -999999999;
  Double_t ebeam=3500; //temporary
  if(ebeam<=0){
    printf("Can not compute phiHE with EBeam=%f\n",ebeam);
    return -999999999;
  }
  Double_t pbeam=TMath::Sqrt(ebeam*ebeam-fMProton*fMProton);
  Double_t pla10=((AliAODTrack*)fMu[0].GetObject())->Px();
  Double_t pla11=((AliAODTrack*)fMu[0].GetObject())->Py();
  Double_t pla12=((AliAODTrack*)fMu[0].GetObject())->Pz();
  Double_t e1=((AliAODTrack*)fMu[0].GetObject())->E();
  Double_t mu1Charge=((AliAODTrack*)fMu[0].GetObject())->Charge();
  Double_t pla20=((AliAODTrack*)fMu[1].GetObject())->Px();
  Double_t pla21=((AliAODTrack*)fMu[1].GetObject())->Py();
  Double_t pla22=((AliAODTrack*)fMu[1].GetObject())->Pz();
  Double_t e2=((AliAODTrack*)fMu[1].GetObject())->E();

  // Fill the Lorentz vector for projectile and target
  // For the moment we consider no crossing angle
  // Projectile runs towards the MUON arm
  TLorentzVector pProjCM(0.,0.,-pbeam,ebeam); // projectile
  TLorentzVector pTargCM(0.,0., pbeam,ebeam); // target
  //
  // --- Get the muons parameters in the CM frame
  //
  TLorentzVector pMu1CM(pla10,pla11,pla12,e1);
  TLorentzVector pMu2CM(pla20,pla21,pla22,e2);
  //
  // --- Obtain the dimuon parameters in the CM frame
  //
  TLorentzVector pDimuCM=pMu1CM+pMu2CM;
  //
  // --- Translate the muon parameters in the dimuon rest frame
  // 
  TVector3 zaxis=(pDimuCM.Vect()).Unit(); 
  //
  // --- Translate the dimuon parameters in the dimuon rest frame
  //
  TVector3 beta=(-1./pDimuCM.E())*pDimuCM.Vect();
  TLorentzVector pMu1Dimu=pMu1CM;
  TLorentzVector pMu2Dimu=pMu2CM;
  pMu1Dimu.Boost(beta);
  pMu2Dimu.Boost(beta);
  
  TLorentzVector pProjDimu=pProjCM;
  TLorentzVector pTargDimu=pTargCM; 
  pProjDimu.Boost(beta);
  pTargDimu.Boost(beta);

  TVector3 yaxis=((pProjDimu.Vect()).Cross(pTargDimu.Vect())).Unit();
  TVector3 xaxis=(yaxis.Cross(zaxis)).Unit();
  //
  // --- Calculation of the azimuthal angle (Helicity)
  //
   Double_t phi;
   if(mu1Charge>0) phi = TMath::ATan2((pMu1Dimu.Vect()).Dot(yaxis),(pMu1Dimu.Vect()).Dot(xaxis));
   else phi = TMath::ATan2((pMu2Dimu.Vect()).Dot(yaxis),(pMu2Dimu.Vect()).Dot(xaxis));
   
   return phi;
}

//______________________________________________________________________________
Int_t AliAODDimuon::AnyPt(){
  // Test if the two muons match two trigger tracks
  if(CheckPointers())return 0;
  return (((AliAODTrack*)fMu[0].GetObject())->MatchTrigger())&&
         (((AliAODTrack*)fMu[1].GetObject())->MatchTrigger());
}

//______________________________________________________________________________
Int_t AliAODDimuon::LowPt(){
  // Test if the two muons match two trigger tracks with a "Low Pt" cut
  if(CheckPointers())return 0;
  return (((AliAODTrack*)fMu[0].GetObject())->MatchTriggerLowPt())&&
         (((AliAODTrack*)fMu[1].GetObject())->MatchTriggerLowPt());
}

//______________________________________________________________________________
Int_t AliAODDimuon::HighPt(){
  // Test if the two muons match two trigger tracks with a "High Pt" cut
  if(CheckPointers())return 0;
  return (((AliAODTrack*)fMu[0].GetObject())->MatchTriggerHighPt())&&
         (((AliAODTrack*)fMu[1].GetObject())->MatchTriggerHighPt());
}

//______________________________________________________________________________
Double_t AliAODDimuon::MaxChi2Match(){
  // Maximum matching Chi2 between track and trigger track
  if(CheckPointers())return -999999999;
  return TMath::Max((((AliAODTrack*)fMu[0].GetObject())->GetChi2MatchTrigger()),
                    (((AliAODTrack*)fMu[1].GetObject())->GetChi2MatchTrigger()));
}

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