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 for dimuon analysis and fast dimuon simulation.
// It provides single and dimuon iterators, cuts, weighting, kinematic
// It uses the AliRun particle tree.
// Comments and suggestions to 
// andreas.morsch@cern.ch


#include <TClonesArray.h>
#include <TParticle.h>
#include <TPDGCode.h> 
#include <TRandom.h>
#include <TTree.h>

#include "AliDimuCombinator.h" 
#include "AliRun.h" 
#include "AliMC.h"

//
ClassImp(AliDimuCombinator)

AliDimuCombinator::AliDimuCombinator():
    fNParticle((Int_t) (AliRunLoader::Instance()->TreeK())->GetEntries()),
    fImuon1(0),
    fImuon2(0),
    fImin1(0),
    fImin2(0),
    fImax1(fNParticle),
    fImax2(fNParticle),
    fRate1(1.),
    fRate2(1.),
    fMuon1(0),
    fMuon2(0),
    fPtMin(0.),
    fEtaMin(-10.),
    fEtaMax(10.)
{
// Constructor
    fNParticle = (Int_t) (AliRunLoader::Instance()->TreeK())->GetEntries();
}

AliDimuCombinator::AliDimuCombinator(const AliDimuCombinator & combinator)
    :TObject(combinator),
     fNParticle(0),
     fImuon1(0),
     fImuon2(0),
     fImin1(0),
     fImin2(0),
     fImax1(0),
     fImax2(0),
     fRate1(0),
     fRate2(0),
     fMuon1(0),
     fMuon2(0),
     fPtMin(0.),
     fEtaMin(0.),
     fEtaMax(0.)
{
// Dummy copy constructor
    combinator.Copy(*this);
}


//
//                       Iterators
// 
TParticle* AliDimuCombinator::Particle(Int_t i) const
{
//  Return next particle
//
    return gAlice->GetMCApp()->Particle(i);
}

TParticle* AliDimuCombinator::FirstMuon()
{
// Single muon iterator: initialisation
    fImuon1 = fImin1;
    fMuon1  = Particle(fImuon1);
    while(Type(fMuon1) != kMuonPlus && Type(fMuon1) != kMuonMinus) {
	fImuon1++;
	if (fImuon1 >= fImax1) {fMuon1 = 0; break;}
	fMuon1 = Particle(fImuon1);
    }
    return fMuon1;
}

TParticle* AliDimuCombinator::FirstMuonSelected()
{
// Single selected muon iterator: initialisation
    TParticle* muon = FirstMuon();
    while(muon != 0 && !Selected(muon)) {muon = NextMuon();}
    return muon;
}


TParticle* AliDimuCombinator::NextMuon()
{
// Single muon iterator: increment
    fImuon1++;
    if (fImuon1 >= fNParticle) {fMuon1 = 0; return fMuon1;}
    
    fMuon1 = Particle(fImuon1);
    while(Type(fMuon1) != kMuonPlus && Type(fMuon1) != kMuonMinus) {
	fImuon1++;
	if (fImuon1 >= fImax1) {fMuon1 = 0; break;}
	fMuon1 = Particle(fImuon1);
    }
    return fMuon1;
}

TParticle* AliDimuCombinator::NextMuonSelected()
{
// Single selected muon iterator: increment
    TParticle * muon = NextMuon();
    while(muon !=0 && !Selected(muon)) {muon = NextMuon();}
    return muon;
}


void AliDimuCombinator::FirstPartner()
{
// Helper for  dimuon iterator: initialisation
    if (fImin1 == fImin2) {
	fImuon2 = fImuon1+1;
    } else {
	fImuon2 = fImin2;
    }
    if (fImuon2 >= fImax2) {fMuon2 = 0; return;}
    fMuon2 = Particle(fImuon2);
    while(Type(fMuon2) != kMuonPlus && Type(fMuon2) != kMuonMinus) {
	fImuon2++;
	if (fImuon2 >= fImax2) {fMuon2 = 0; break;}
	fMuon2 = Particle(fImuon2);
    }
}

void AliDimuCombinator::FirstPartnerSelected()
{
// Helper for selected dimuon iterator: initialisation
    FirstPartner();
    while(fMuon2 !=0 && !Selected(fMuon2)) {NextPartner();}
}


void AliDimuCombinator::NextPartner()
{
// Helper for dimuon iterator: increment    
    fImuon2++;
    if (fImuon2 >= fImax2) {fMuon2 = 0; return;}
    
    
    fMuon2 = Particle(fImuon2);
    
    while(Type(fMuon2) != kMuonPlus && Type(fMuon2) != kMuonMinus) {
	fImuon2++;
	if (fImuon2 >= fImax2) {fMuon2 = 0; break;}
	fMuon2 = Particle(fImuon2);
    }
}

void AliDimuCombinator::NextPartnerSelected()
{
// Helper for selected dimuon iterator: increment    
    NextPartner();
    while(fMuon2 !=0 && !Selected(fMuon2)) {NextPartner();}
}


TParticle*  AliDimuCombinator::Partner() const
{
// Returns current partner for muon to form a dimuon
    return fMuon2;
}

void AliDimuCombinator::FirstMuonPair(TParticle* & muon1, TParticle* & muon2)
{
// Dimuon iterator: initialisation
    FirstMuon();
    FirstPartner();
    muon1 = fMuon1;
    muon2 = fMuon2;	 
}

void AliDimuCombinator::NextMuonPair(TParticle* & muon1, TParticle* & muon2)
{
// Dimuon iterator: increment    
    NextPartner();
    if (!Partner()) {
	NextMuon();
	FirstPartner();
    }
    muon1 = fMuon1;
    muon2 = fMuon2;	 
}
void AliDimuCombinator::FirstMuonPairSelected(TParticle* & muon1, 
					      TParticle* & muon2)
{
// Selected dimuon iterator: initialisation    
    FirstMuonSelected();
    FirstPartnerSelected();
    muon1 = fMuon1;
    muon2 = fMuon2;	 
}

void AliDimuCombinator::NextMuonPairSelected(TParticle* & muon1, 
					     TParticle* & muon2)
{
// Selected dimuon iterator: increment    
    NextPartnerSelected();
    if (!Partner()) {
	NextMuonSelected();
	FirstPartnerSelected();
    }
    muon1 = fMuon1;
    muon2 = fMuon2;	 
}

void AliDimuCombinator::ResetRange()
{
// Reset index ranges for single muons
    fImin1 = fImin2 = 0;
    fImax1 = fImax2 = fNParticle;
}

void AliDimuCombinator::SetFirstRange(Int_t from, Int_t to)
{
// Reset index range for first muon
    fImin1 = from;
    fImax1 = to;
    if (fImax1 > fNParticle) fImax1 = fNParticle;
}

void AliDimuCombinator::SetSecondRange(Int_t from, Int_t to)
{
// Reset index range for second muon
    fImin2 = from;
    fImax2 = to;
    if (fImax2 > fNParticle) fImax2 = fNParticle;
}
//
//                       Selection
//

Bool_t AliDimuCombinator::Selected(const TParticle* part) const
{
// Selection cut for single muon 
//
    if (part == 0) {return 0;}
    
    if (part->Pt() > fPtMin && part->Eta() > fEtaMin && part->Eta() < fEtaMax) {
	return 1;
    } else {
	return 0;
    }
}

Bool_t AliDimuCombinator::Selected(const TParticle* part1, const TParticle* part2) const
{
// Selection cut for dimuons
//
     return Selected(part1)*Selected(part2);
}
//
//                       Kinematics
//
Float_t AliDimuCombinator::Mass(const TParticle* part1, const TParticle* part2) const
{
// Invariant mass
//
    Float_t px,py,pz,e;
    px = part1->Px()+part2->Px();
    py = part1->Py()+part2->Py();
    pz = part1->Pz()+part2->Pz();    
    e  = part1->Energy()+part2->Energy();
    Float_t p = px*px+py*py+pz*pz;
    if (e*e < p) {
	return -1; 
    } else {
	return TMath::Sqrt(e*e-p);
    }
}

Float_t AliDimuCombinator::PT(const TParticle* part1, const TParticle* part2) const
{
// Transverse momentum of dimuons
//
    Float_t px,py;
    px = part1->Px()+part2->Px();
    py = part1->Py()+part2->Py();
    return TMath::Sqrt(px*px+py*py);
}

Float_t AliDimuCombinator::Pz(const TParticle* part1, const TParticle* part2) const
{
// Pz of dimuon system
//
    return part1->Pz()+part2->Pz();
}

Float_t AliDimuCombinator::Y(const TParticle* part1, const TParticle* part2) const
{
// Rapidity of dimuon system
//
    Float_t pz,e;
    pz = part1->Pz()+part2->Pz();
    e  = part1->Energy()+part2->Energy();
    return 0.5*TMath::Log((e+pz)/(e-pz));
}
//                  Response
//
void AliDimuCombinator::SmearGauss(Float_t width, Float_t & value) const
{
// Apply gaussian smearing
//
    value+=gRandom->Gaus(0, width);
}
//              Weighting
// 

Float_t AliDimuCombinator::DecayProbability(const TParticle* part) const
{
// Calculate decay probability for muons from pion and kaon decays
// 

    Float_t d, h, theta, cTau;
    TParticle* parent = Parent(part);
    Int_t ipar = Type(parent);
    if (ipar == kPiPlus || ipar == kPiMinus) {
	cTau=780.4;
    } else if (ipar == kKPlus || ipar == kKMinus) {
	cTau = 370.9;
    } else {
	cTau = 0;
    }
    
    
    Float_t gammaBeta=(parent->P())/(parent->GetMass());
//
// this part is still very ALICE muon-arm specific
//


    theta = parent->Theta();
    h = 90*TMath::Tan(theta);
    
    if (h<4) {
	d=4/TMath::Sin(theta);
    } else {
	d=90/TMath::Cos(theta);
    }
    
    if (cTau > 0) {
	return 1-TMath::Exp(-d/cTau/gammaBeta);
    } else {
	return 1;
    }
}

//Begin_Html
/*
<p> In the the code above :
<P>If h is less than 4 cm, pions or kaons go in the beam pipe and can have a long way
<BR>If h is greater than 4 cm, pions or kaons crash into the front absorber
<P><IMG SRC="absorbeur.jpg" HEIGHT=292 WIDTH=819>
*/
//End_Html


Float_t AliDimuCombinator::Weight(const TParticle* part1, const TParticle* part2) const
{
// Dimuon weight

    Float_t wgt = (part1->GetWeight())*(part2->GetWeight());
    
    if (Correlated(part1, part2)) {
	if ( part1->GetFirstMother() == part2->GetFirstMother()) {
	    return part1->GetWeight()*fRate1;
	} else {
	    return wgt/(Parent(part1)->GetWeight())*fRate1;
	}
    } else {
	return wgt*fRate1*fRate2;
    }
} 

//Begin_Html
/*
<p>Some clarifications on the calculation of the dimuons weight :
<P>We must keep in mind that if we force the meson decay in muons and we put
lot of mesons (J/psi, upsilon, ...) to have a good statistic we are
obliged to calculate different weights to correct the number
of muons
<BR>&nbsp;
<P>First -->
<BR>The particle weight is given by w=R*M*Br
<BR>&nbsp;with&nbsp; :
<UL>R&nbsp;&nbsp; =&nbsp; the rate by event. This number gives the number
of produced J/psi, upsilon, pion ... in a collision.
<BR>It corresponds of the weight 0.06 given for example in&nbsp; gener->AddGenerator(jpsi,"J/Psi",
0.06); from the config.C macro.
<BR>In this example R=0.06

<P>M&nbsp; = the rate of the mother production. This number depend on :
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - the number of generated events --> fParentWeight=1./Float_t(fNpart) in AliGenPythia.cxx . This
is a normalization to 1 of the number of generated particles.
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - the kinematic bias coming
from the y and Pt cuts.&nbsp; Method&nbsp; AliGenPythia::AdjustWeights() in AliGenPythia.cxx
<BR>(in AliGenParam.cxx this 2 things are taken into account in fParentWeight
= fYWgt*fPtWgt*phiWgt/fNpart )

<P>Br = the branching ratio in muon from the mother decay</UL>

<P><BR>In this method, part->GetWeight() = M*Br
<UL>&nbsp;</UL>
Next -->
<BR>The weight of the dimuon depends on the correlation between muons
<BR>&nbsp;
<UL>If the muons are correlated and come from a resonance (for example
J/psi -> mu+ mu-) , the weight of the dimuon is the weight of one muon then
<BR>w12= R*M*Br = w1* R1 (in this method this gives part1->GetWeight()*fRate1)

<P>If the muons are correlated and come from a charm or a bottom pair then
w12 = M*R*Br1*Br2 = w1*w2*R1/M1
<BR>(in this method this gives wgt/(Parent(part1)->GetWeight())*fRate1).
Indeed the 2 muons come from the same mother so the
<BR>weight of a DD~ or BB~ is M*Br and they are no correlation in the decay
(Br1*Br2)

<P>If the muons are not correlated w12 = M1*M2*R1*R2*Br1*Br2 = w1*w2*R1*R2
(in this method this gives wgt*fRate1*fRate2)
<BR>&nbsp;</UL>
*/
//End_Html


Float_t AliDimuCombinator::Weight(const TParticle* part) const
{
// Single muon weight
    return (part->GetWeight())*(Parent(part)->GetWeight())*fRate1;
}

Bool_t  AliDimuCombinator::Correlated(const TParticle* part1, const TParticle* part2) const
{
// Check if muons are correlated
//
    if ((Origin(part1) >= 0) && Origin(part1) == Origin(part2)) {

	return kTRUE;
    } else {
	return kFALSE;
    }
}

TParticle* AliDimuCombinator::Parent(const TParticle* part) const
{
// Return pointer to parent
//
    return Particle(part->GetFirstMother());
}

Int_t AliDimuCombinator::Origin(const TParticle* part) const
{
// Return pointer to primary particle
//
    Int_t iparent= part->GetFirstMother();
    if (iparent < 0) return iparent;
    Int_t ip;
    while(1) {
	ip = (Particle(iparent))->GetFirstMother();
	if (ip < 0) {
	    break;
	} else {
	    iparent = ip;
	}
    }
    return iparent;
}

Int_t AliDimuCombinator::Type(const TParticle *part)  const
{
// Return particle type for 
return part->GetPdgCode();
}

AliDimuCombinator& AliDimuCombinator::operator=(const  AliDimuCombinator& rhs)
{
// Assignment operator
    rhs.Copy(*this);
    return *this;
}


void AliDimuCombinator::Copy(TObject&) const
{
  //
  // Copy 
  //
  Fatal("Copy","Not implemented!\n");
}





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