#include <TClonesArray.h>
#include <TDatabasePDG.h>
#include <TParticle.h>
#include <TPDGCode.h>
#include <TSystem.h>
#include <TTree.h>
#include "AliConst.h"
#include "AliDecayerPythia.h"
#include "AliGenPythiaPlus.h"
#include "AliHeader.h"
#include "AliGenPythiaEventHeader.h"
#include "AliPythiaBase.h"
#include "AliPythiaRndm.h"
#include "AliRun.h"
#include "AliStack.h"
#include "AliRunLoader.h"
#include "AliMC.h"
#include "PyquenCommon.h"
ClassImp(AliGenPythiaPlus)
AliGenPythiaPlus::AliGenPythiaPlus():
AliGenMC(),
fPythia(0),
fProcess(kPyCharm),
fStrucFunc(kCTEQ5L),
fKineBias(0.),
fTrials(0),
fTrialsRun(0),
fQ(0.),
fX1(0.),
fX2(0.),
fEventTime(0.),
fInteractionRate(0.),
fTimeWindow(0.),
fCurSubEvent(0),
fEventsTime(0),
fNev(0),
fFlavorSelect(0),
fXsection(0.),
fPtHardMin(0.),
fPtHardMax(1.e4),
fYHardMin(-1.e10),
fYHardMax(1.e10),
fGinit(1),
fGfinal(1),
fHadronisation(1),
fNpartons(0),
fReadFromFile(0),
fQuench(0),
fPtKick(1.),
fFullEvent(kTRUE),
fDecayer(new AliDecayerPythia()),
fDebugEventFirst(-1),
fDebugEventLast(-1),
fEtMinJet(0.),
fEtMaxJet(1.e4),
fEtaMinJet(-20.),
fEtaMaxJet(20.),
fPhiMinJet(0.),
fPhiMaxJet(2.* TMath::Pi()),
fJetReconstruction(kCell),
fEtaMinGamma(-20.),
fEtaMaxGamma(20.),
fPhiMinGamma(0.),
fPhiMaxGamma(2. * TMath::Pi()),
fUseYCutHQ(kFALSE),
fYMinHQ(-20.),
fYMaxHQ(20.),
fPycellEtaMax(2.),
fPycellNEta(274),
fPycellNPhi(432),
fPycellThreshold(0.),
fPycellEtSeed(4.),
fPycellMinEtJet(10.),
fPycellMaxRadius(1.),
fStackFillOpt(kFlavorSelection),
fFeedDownOpt(kTRUE),
fFragmentation(kTRUE),
fSetNuclei(kFALSE),
fNewMIS(kFALSE),
fHFoff(kFALSE),
fTriggerParticle(0),
fTriggerEta(0.9),
fCountMode(kCountAll),
fHeader(0),
fRL(0),
fFileName(0),
fFragPhotonInCalo(kFALSE),
fPi0InCalo(kFALSE) ,
fPhotonInCalo(kFALSE),
fCheckEMCAL(kFALSE),
fCheckPHOS(kFALSE),
fCheckPHOSeta(kFALSE),
fFragPhotonOrPi0MinPt(0),
fPhotonMinPt(0),
fPHOSMinPhi(219.),
fPHOSMaxPhi(321.),
fPHOSEta(0.13),
fEMCALMinPhi(79.),
fEMCALMaxPhi(191.),
fEMCALEta(0.71),
fItune(-1),
fInfo(1)
{
fEnergyCMS = 5500.;
SetNuclei(0,0);
if (!AliPythiaRndm::GetPythiaRandom())
AliPythiaRndm::SetPythiaRandom(GetRandom());
}
AliGenPythiaPlus::AliGenPythiaPlus(AliPythiaBase* pythia)
:AliGenMC(-1),
fPythia(pythia),
fProcess(kPyCharm),
fStrucFunc(kCTEQ5L),
fKineBias(0.),
fTrials(0),
fTrialsRun(0),
fQ(0.),
fX1(0.),
fX2(0.),
fEventTime(0.),
fInteractionRate(0.),
fTimeWindow(0.),
fCurSubEvent(0),
fEventsTime(0),
fNev(0),
fFlavorSelect(0),
fXsection(0.),
fPtHardMin(0.),
fPtHardMax(1.e4),
fYHardMin(-1.e10),
fYHardMax(1.e10),
fGinit(kTRUE),
fGfinal(kTRUE),
fHadronisation(kTRUE),
fNpartons(0),
fReadFromFile(kFALSE),
fQuench(kFALSE),
fPtKick(1.),
fFullEvent(kTRUE),
fDecayer(new AliDecayerPythia()),
fDebugEventFirst(-1),
fDebugEventLast(-1),
fEtMinJet(0.),
fEtMaxJet(1.e4),
fEtaMinJet(-20.),
fEtaMaxJet(20.),
fPhiMinJet(0.),
fPhiMaxJet(2.* TMath::Pi()),
fJetReconstruction(kCell),
fEtaMinGamma(-20.),
fEtaMaxGamma(20.),
fPhiMinGamma(0.),
fPhiMaxGamma(2. * TMath::Pi()),
fUseYCutHQ(kFALSE),
fYMinHQ(-20.),
fYMaxHQ(20.),
fPycellEtaMax(2.),
fPycellNEta(274),
fPycellNPhi(432),
fPycellThreshold(0.),
fPycellEtSeed(4.),
fPycellMinEtJet(10.),
fPycellMaxRadius(1.),
fStackFillOpt(kFlavorSelection),
fFeedDownOpt(kTRUE),
fFragmentation(kTRUE),
fSetNuclei(kFALSE),
fNewMIS(kFALSE),
fHFoff(kFALSE),
fTriggerParticle(0),
fTriggerEta(0.9),
fCountMode(kCountAll),
fHeader(0),
fRL(0),
fFileName(0),
fFragPhotonInCalo(kFALSE),
fPi0InCalo(kFALSE) ,
fPhotonInCalo(kFALSE),
fCheckEMCAL(kFALSE),
fCheckPHOS(kFALSE),
fCheckPHOSeta(kFALSE),
fFragPhotonOrPi0MinPt(0),
fPhotonMinPt(0),
fPHOSMinPhi(219.),
fPHOSMaxPhi(321.),
fPHOSEta(0.13),
fEMCALMinPhi(79.),
fEMCALMaxPhi(191.),
fEMCALEta(0.71),
fItune(-1),
fInfo(1)
{
fEnergyCMS = 5500.;
fName = "Pythia";
fTitle= "Particle Generator using PYTHIA";
SetForceDecay();
if (!AliPythiaRndm::GetPythiaRandom())
AliPythiaRndm::SetPythiaRandom(GetRandom());
SetNuclei(0,0);
}
AliGenPythiaPlus::~AliGenPythiaPlus()
{
if(fEventsTime) delete fEventsTime;
}
void AliGenPythiaPlus::SetInteractionRate(Float_t rate,Float_t timewindow)
{
fInteractionRate = rate;
fTimeWindow = timewindow;
GeneratePileup();
}
void AliGenPythiaPlus::GeneratePileup()
{
fEventsTime = 0;
if(fInteractionRate == 0.) {
Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
return;
}
Int_t npart = NumberParticles();
if(npart < 0) {
Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
return;
}
if(fEventsTime) delete fEventsTime;
fEventsTime = new TArrayF(npart);
TArrayF &array = *fEventsTime;
for(Int_t ipart = 0; ipart < npart; ipart++)
array[ipart] = 0.;
Float_t eventtime = 0.;
while(1)
{
eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
if(eventtime > fTimeWindow) break;
array.Set(array.GetSize()+1);
array[array.GetSize()-1] = eventtime;
}
eventtime = 0.;
while(1)
{
eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
if(TMath::Abs(eventtime) > fTimeWindow) break;
array.Set(array.GetSize()+1);
array[array.GetSize()-1] = eventtime;
}
SetNumberParticles(fEventsTime->GetSize());
}
void AliGenPythiaPlus::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
{
fPycellEtaMax = etamax;
fPycellNEta = neta;
fPycellNPhi = nphi;
fPycellThreshold = thresh;
fPycellEtSeed = etseed;
fPycellMinEtJet = minet;
fPycellMaxRadius = r;
}
void AliGenPythiaPlus::SetEventListRange(Int_t eventFirst, Int_t eventLast)
{
fDebugEventFirst = eventFirst;
fDebugEventLast = eventLast;
if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
}
void AliGenPythiaPlus::Init()
{
fParentWeight=1./Float_t(fNpart);
fPythia->SetPtHardRange(fPtHardMin, fPtHardMax);
fPythia->SetYHardRange(fYHardMin, fYHardMax);
if (fAProjectile > 0 && fATarget > 0) fPythia->SetNuclei(fAProjectile, fATarget);
if (fFragmentation) {
fPythia->SetFragmentation(1);
} else {
fPythia->SetFragmentation(0);
}
fPythia->SetInitialAndFinalStateRadiation(fGinit, fGfinal);
fPythia->SetIntrinsicKt(fPtKick);
if (fReadFromFile) {
fRL = AliRunLoader::Open(fFileName, "Partons");
fRL->LoadKinematics();
fRL->LoadHeader();
} else {
fRL = 0x0;
}
fPythia->ProcInit(fProcess, fEnergyCMS, fStrucFunc, fItune);
fDecayer->SetForceDecay(fForceDecay);
if (fHFoff) {
fPythia->SwitchHFOff();
((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
}
fDecayer->Init();
switch (fProcess)
{
case kPyOldUEQ2ordered:
case kPyOldUEQ2ordered2:
case kPyOldPopcorn:
break;
case kPyCharm:
case kPyCharmUnforced:
case kPyCharmPbPbMNR:
case kPyCharmpPbMNR:
case kPyCharmppMNR:
case kPyCharmppMNRwmi:
case kPyCharmPWHG:
fParentSelect[0] = 411;
fParentSelect[1] = 421;
fParentSelect[2] = 431;
fParentSelect[3] = 4122;
fParentSelect[4] = 4232;
fParentSelect[5] = 4132;
fParentSelect[6] = 4332;
fFlavorSelect = 4;
break;
case kPyD0PbPbMNR:
case kPyD0pPbMNR:
case kPyD0ppMNR:
fParentSelect[0] = 421;
fFlavorSelect = 4;
break;
case kPyDPlusPbPbMNR:
case kPyDPluspPbMNR:
case kPyDPlusppMNR:
fParentSelect[0] = 411;
fFlavorSelect = 4;
break;
case kPyDPlusStrangePbPbMNR:
case kPyDPlusStrangepPbMNR:
case kPyDPlusStrangeppMNR:
fParentSelect[0] = 431;
fFlavorSelect = 4;
break;
case kPyLambdacppMNR:
fParentSelect[0] = 4122;
fFlavorSelect = 4;
break;
case kPyBeauty:
case kPyBeautyJets:
case kPyBeautyPbPbMNR:
case kPyBeautypPbMNR:
case kPyBeautyppMNR:
case kPyBeautyppMNRwmi:
case kPyBeautyPWHG:
fParentSelect[0]= 511;
fParentSelect[1]= 521;
fParentSelect[2]= 531;
fParentSelect[3]= 5122;
fParentSelect[4]= 5132;
fParentSelect[5]= 5232;
fParentSelect[6]= 5332;
fFlavorSelect = 5;
break;
case kPyBeautyUnforced:
fParentSelect[0] = 511;
fParentSelect[1] = 521;
fParentSelect[2] = 531;
fParentSelect[3] = 5122;
fParentSelect[4] = 5132;
fParentSelect[5] = 5232;
fParentSelect[6] = 5332;
fFlavorSelect = 5;
break;
case kPyJpsiChi:
case kPyJpsi:
fParentSelect[0] = 443;
break;
case kPyMbAtlasTuneMC09:
case kPyMbDefault:
case kPyMb:
case kPyMbWithDirectPhoton:
case kPyMbNonDiffr:
case kPyMbMSEL1:
case kPyJets:
case kPyJetsPWHG:
case kPyDirectGamma:
case kPyLhwgMb:
break;
case kPyWPWHG:
case kPyW:
case kPyZ:
case kPyZgamma:
case kPyMBRSingleDiffraction:
case kPyMBRDoubleDiffraction:
case kPyMBRCentralDiffraction:
break;
}
fPythia->SetPycellParameters(fPycellEtaMax,fPycellNEta, fPycellNPhi,
fPycellThreshold, fPycellEtSeed,
fPycellMinEtJet, fPycellMaxRadius);
fTrialsRun = 0;
fQ = 0.;
fX1 = 0.;
fX2 = 0.;
fNev = 0 ;
AliGenMC::Init();
if (fSetNuclei) {
fDyBoost = 0;
Warning("Init","SetNuclei used. Use SetProjectile + SetTarget instead. fDyBoost has been reset to 0\n");
}
if (fQuench) {
fPythia->InitQuenching(0., 0.1, 0.6e6, 0, 0.97, 30);
}
}
void AliGenPythiaPlus::SetSeed(UInt_t seed)
{
fPythia->SetSeed(seed);
}
void AliGenPythiaPlus::Generate()
{
fDecayer->ForceDecay();
Double_t polar[3] = {0,0,0};
Double_t origin[3] = {0,0,0};
Double_t p[4];
const Float_t kconv=0.001/2.999792458e8;
Int_t nt=0;
Int_t jev=0;
Int_t j, kf;
fTrials=0;
fEventTime = 0.;
if (fVertexSmear == kPerEvent) Vertex();
while(1)
{
if (!fReadFromFile) {
if (!fNewMIS) {
fPythia->GenerateEvent();
} else {
fPythia->GenerateMIEvent();
}
fNpartons = fPythia->GetNumberOfParticles();
} else {
printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
fPythia->SetNumberOfParticles(0);
fPythia->LoadEvent(fRL->Stack(), 0 , 1);
fPythia->EditEventList(21);
}
if (fQuench == 1) {
fPythia->Quench();
} else if (fQuench == 2){
fPythia->Pyquen(208., 0, 0.);
} else if (fQuench == 3) {
}
fTrials++;
fPythia->GetParticles(&fParticles);
Boost();
Int_t i;
fNprimaries = 0;
Int_t np = fParticles.GetEntriesFast();
if (np == 0) continue;
Int_t* pParent = new Int_t[np];
Int_t* pSelected = new Int_t[np];
Int_t* trackIt = new Int_t[np];
for (i = 0; i < np; i++) {
pParent[i] = -1;
pSelected[i] = 0;
trackIt[i] = 0;
}
Int_t nc = 0;
Int_t nParents = 0;
Int_t nTkbles = 0;
if (fProcess != kPyMbDefault &&
fProcess != kPyMb &&
fProcess != kPyMbWithDirectPhoton &&
fProcess != kPyJets &&
fProcess != kPyDirectGamma &&
fProcess != kPyMbNonDiffr &&
fProcess != kPyMbMSEL1 &&
fProcess != kPyW &&
fProcess != kPyZ &&
fProcess != kPyZgamma &&
fProcess != kPyCharmppMNRwmi &&
fProcess != kPyBeautyppMNRwmi &&
fProcess != kPyWPWHG &&
fProcess != kPyJetsPWHG &&
fProcess != kPyCharmPWHG &&
fProcess != kPyBeautyPWHG) {
for (i = 0; i < np; i++) {
TParticle* iparticle = (TParticle *) fParticles.At(i);
Int_t ks = iparticle->GetStatusCode();
kf = CheckPDGCode(iparticle->GetPdgCode());
if (ks==21) continue;
kf = TMath::Abs(kf);
Int_t kfl = kf;
if (kfl > 100000) kfl %= 100000;
if (kfl > 10000) kfl %= 10000;
if (kfl > 10) kfl/=100;
if (kfl > 10) kfl/=10;
Int_t ipa = (fPythia->Version() == 6) ? (iparticle->GetFirstMother() - 1) :(iparticle->GetFirstMother()) ;
Int_t kfMo = 0;
if (kf >= fFlavorSelect && kf <= 6) {
Int_t idau = (fPythia->Version() == 6) ? (iparticle->GetFirstDaughter() - 1) :(iparticle->GetFirstDaughter());
if (idau > -1) {
TParticle* daughter = (TParticle *) fParticles.At(idau);
Int_t pdgD = daughter->GetPdgCode();
if (pdgD == 91 || pdgD == 92) {
Int_t jmin = (fPythia->Version() == 6) ? (daughter->GetFirstDaughter() - 1) : (daughter->GetFirstDaughter());
Int_t jmax = (fPythia->Version() == 6) ? (daughter->GetLastDaughter() - 1) : (daughter->GetLastDaughter());
for (Int_t jp = jmin; jp <= jmax; jp++)
((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
}
}
}
if (ipa > -1) {
TParticle * mother = (TParticle *) fParticles.At(ipa);
kfMo = TMath::Abs(mother->GetPdgCode());
}
Bool_t flavorOK = kFALSE;
Bool_t selectOK = kFALSE;
if (fFeedDownOpt) {
if (kfl >= fFlavorSelect) flavorOK = kTRUE;
} else {
if (kfl > fFlavorSelect) {
nc = -1;
break;
}
if (kfl == fFlavorSelect) flavorOK = kTRUE;
}
switch (fStackFillOpt) {
case kFlavorSelection:
selectOK = kTRUE;
break;
case kParentSelection:
if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
break;
}
if (flavorOK && selectOK) {
if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
{
continue;
}
pSelected[i] = 1;
if (ParentSelected(kf)) ++nParents;
} else {
if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
&& !KinematicSelection(iparticle, 1))
{
continue;
}
if (pSelected[ipa] &&
!trackIt[ipa] &&
kfMo != 5 &&
kfMo != 4 &&
kf != 92)
{
if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
{
Int_t ipF = iparticle->GetFirstDaughter();
Int_t ipL = iparticle->GetLastDaughter();
if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
}
pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
}
}
if (pSelected[i] == -1) pSelected[i] = 0;
if (!pSelected[i]) continue;
if (fFragmentation && kf <= 10) continue;
nc++;
trackIt[i] = 0;
if (ks == 1) trackIt[i] = 1;
if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
if (fForceDecay == kNoDecay) {
if (ParentSelected(kf)) trackIt[i] = 1;
} else {
if (ParentSelected(kf)) trackIt[i] = 0;
}
if (trackIt[i] == 1) ++nTkbles;
}
if (nc > 0) {
for (i = 0; i < np; i++) {
if (!pSelected[i]) continue;
TParticle * iparticle = (TParticle *) fParticles.At(i);
kf = CheckPDGCode(iparticle->GetPdgCode());
Int_t ks = iparticle->GetStatusCode();
p[0] = iparticle->Px();
p[1] = iparticle->Py();
p[2] = iparticle->Pz();
p[3] = iparticle->Energy();
origin[0] = fVertex[0]+iparticle->Vx()/10;
origin[1] = fVertex[1]+iparticle->Vy()/10;
origin[2] = fVertex[2]+iparticle->Vz()/10;
Float_t tof = fTime + kconv*iparticle->T();
Int_t ipa = (fPythia->Version() == 6) ? (iparticle->GetFirstMother() - 1) :(iparticle->GetFirstMother()) ;
Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
PushTrack(fTrackIt*trackIt[i], iparent, kf,
p[0], p[1], p[2], p[3],
origin[0], origin[1], origin[2], tof,
polar[0], polar[1], polar[2],
kPPrimary, nt, 1., ks);
pParent[i] = nt;
KeepTrack(nt);
fNprimaries++;
}
}
} else {
nc = GenerateMB();
}
GetSubEventTime();
delete[] pParent;
delete[] pSelected;
delete[] trackIt;
if (nc > 0) {
switch (fCountMode) {
case kCountAll:
jev += nc;
break;
case kCountParents:
jev += nParents;
break;
case kCountTrackables:
jev += nTkbles;
break;
}
if (jev >= fNpart || fNpart == -1) {
fKineBias=Float_t(fNpart)/Float_t(fTrials);
if (fInfo) fPythia->GetXandQ(fX1, fX2, fQ);
fTrialsRun += fTrials;
fNev++;
MakeHeader();
break;
}
}
}
SetHighWaterMark(nt);
fXsection = fPythia->GetXSection();
}
Int_t AliGenPythiaPlus::GenerateMB()
{
Int_t i, kf, nt, iparent;
Int_t nc = 0;
Float_t p[4];
Float_t polar[3] = {0,0,0};
Float_t origin[3] = {0,0,0};
const Float_t kconv = 0.001 / 2.999792458e8;
Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
Int_t* pParent = new Int_t[np];
for (i=0; i< np; i++) pParent[i] = -1;
if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG ) {
TParticle* jet1 = (TParticle *) fParticles.At(6);
TParticle* jet2 = (TParticle *) fParticles.At(7);
if (!CheckTrigger(jet1, jet2)) {
delete [] pParent;
return 0;
}
}
if ((fProcess == kPyJets || fProcess == kPyJetsPWHG) && (fFragPhotonInCalo || fPi0InCalo) ) {
Bool_t ok = kFALSE;
Int_t pdg = 0;
if (fFragPhotonInCalo) pdg = 22 ;
else if (fPi0InCalo) pdg = 111 ;
for (i=0; i< np; i++) {
TParticle* iparticle = (TParticle *) fParticles.At(i);
if(iparticle->GetStatusCode()==1 && iparticle->GetPdgCode()==pdg &&
iparticle->Pt() > fFragPhotonOrPi0MinPt){
Int_t imother = (fPythia->Version() == 6) ? (iparticle->GetFirstMother() - 1) :(iparticle->GetFirstMother()) ;
TParticle* pmother = (TParticle *) fParticles.At(imother);
if(pdg == 111 ||
(pdg == 22 && pmother->GetStatusCode() != 11))
{
Float_t phi = iparticle->Phi()*180./TMath::Pi();
Float_t eta =TMath::Abs(iparticle->Eta());
if((fCheckEMCAL && IsInEMCAL(phi,eta)) ||
(fCheckPHOS && IsInPHOS(phi,eta)) )
ok =kTRUE;
}
}
}
if(!ok){
delete [] pParent;
return 0;
}
}
if ((fProcess == kPyJets || fProcess == kPyJetsPWHG || fProcess == kPyDirectGamma) && fPhotonInCalo && (fCheckPHOSeta || fCheckPHOS)){
Bool_t okd = kFALSE;
Int_t pdg = 22;
Int_t iphcand = -1;
for (i=0; i< np; i++) {
TParticle* iparticle = (TParticle *) fParticles.At(i);
Float_t phi = iparticle->Phi()*180./TMath::Pi();
Float_t eta =TMath::Abs(iparticle->Eta());
if(iparticle->GetStatusCode() == 1
&& iparticle->GetPdgCode() == pdg
&& iparticle->Pt() > fPhotonMinPt
&& eta < fPHOSEta){
if(IsInPHOS(phi,eta)){
okd = kTRUE;
break;
}
if(fCheckPHOSeta) iphcand = i;
}
}
if(!okd && iphcand != -1)
RotatePhi(iphcand,okd);
if(!okd) {
delete[] pParent;
return 0;
}
}
if (fTriggerParticle) {
Bool_t triggered = kFALSE;
for (i = 0; i < np; i++) {
TParticle * iparticle = (TParticle *) fParticles.At(i);
kf = CheckPDGCode(iparticle->GetPdgCode());
if (kf != fTriggerParticle) continue;
if (iparticle->Pt() == 0.) continue;
if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
triggered = kTRUE;
break;
}
if (!triggered) {
delete [] pParent;
return 0;
}
}
if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi) {
TParticle *partCheck;
TParticle *mother;
Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
Bool_t theChild=kFALSE;
Float_t y;
Int_t pdg,mpdg,mpdgUpperFamily;
for(i=0; i<np; i++) {
partCheck = (TParticle*)fParticles.At(i);
pdg = partCheck->GetPdgCode();
if(TMath::Abs(pdg) == fFlavorSelect) {
if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
(partCheck->Energy()-partCheck->Pz()+1.e-13));
if(fUseYCutHQ && y>fYMinHQ && y<fYMaxHQ) inYcut=kTRUE;
if(!fUseYCutHQ && y>fYMin && y<fYMax) inYcut=kTRUE;
}
if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
Int_t mi = partCheck->GetFirstMother() - 1;
if(mi<0) continue;
mother = (TParticle*)fParticles.At(mi);
mpdg=TMath::Abs(mother->GetPdgCode());
mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100);
if ( ParentSelected(mpdg) ||
(fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
if (KinematicSelection(partCheck,1)) {
theChild=kTRUE;
}
}
}
}
if (!theQ || !theQbar || !inYcut) {
delete[] pParent;
return 0;
}
if (fCutOnChild && !theChild) {
delete[] pParent;
return 0;
}
}
if ( (
fProcess == kPyWPWHG ||
fProcess == kPyW ||
fProcess == kPyZ ||
fProcess == kPyZgamma ||
fProcess == kPyMbDefault ||
fProcess == kPyMb ||
fProcess == kPyMbWithDirectPhoton ||
fProcess == kPyMbNonDiffr)
&& (fCutOnChild == 1) ) {
if ( !CheckKinematicsOnChild() ) {
delete[] pParent;
return 0;
}
}
for (i = 0; i < np; i++) {
Int_t trackIt = 0;
TParticle * iparticle = (TParticle *) fParticles.At(i);
kf = CheckPDGCode(iparticle->GetPdgCode());
Int_t ks = iparticle->GetStatusCode();
Int_t km = iparticle->GetFirstMother();
if ((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) ||
(ks != 1) ||
((fProcess == kPyJets || fProcess == kPyJetsPWHG) && ks == 21 && km == 0 && i>1)) {
nc++;
if (ks == 1) trackIt = 1;
Int_t ipa = (fPythia->Version() == 6) ? (iparticle->GetFirstMother() - 1) :(iparticle->GetFirstMother()) ;
iparent = (ipa > -1) ? pParent[ipa] : -1;
if (ipa >= np) fPythia->EventListing();
p[0] = iparticle->Px();
p[1] = iparticle->Py();
p[2] = iparticle->Pz();
p[3] = iparticle->Energy();
origin[0] = fVertex[0]+iparticle->Vx()/10;
origin[1] = fVertex[1]+iparticle->Vy()/10;
origin[2] = fVertex[2]+iparticle->Vz()/10;
Float_t tof = fTime + fEventTime + kconv * iparticle->T();
PushTrack(fTrackIt*trackIt, iparent, kf,
p[0], p[1], p[2], p[3],
origin[0], origin[1], origin[2], tof,
polar[0], polar[1], polar[2],
kPPrimary, nt, 1., ks);
fNprimaries++;
KeepTrack(nt);
pParent[i] = nt;
SetHighWaterMark(nt);
}
}
delete[] pParent;
return 1;
}
void AliGenPythiaPlus::FinishRun()
{
fPythia->PrintStatistics();
if (fNev > 0.) {
fQ /= fNev;
fX1 /= fNev;
fX2 /= fNev;
}
printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
}
void AliGenPythiaPlus::AdjustWeights() const
{
if (gAlice) {
TParticle *part;
Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
for (Int_t i=0; i<ntrack; i++) {
part= gAlice->GetMCApp()->Particle(i);
part->SetWeight(part->GetWeight()*fKineBias);
}
}
}
void AliGenPythiaPlus::SetNuclei(Int_t a1, Int_t a2)
{
fAProjectile = a1;
fATarget = a2;
fSetNuclei = kTRUE;
}
void AliGenPythiaPlus::MakeHeader()
{
if (gAlice) {
if (gAlice->GetEvNumber()>=fDebugEventFirst &&
gAlice->GetEvNumber()<=fDebugEventLast) fPythia->EventListing();
}
if (fHeader) delete fHeader;
fHeader = new AliGenPythiaEventHeader("Pythia");
fHeader->SetTitle(GetTitle());
((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->ProcessCode());
((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
fHeader->SetPrimaryVertex(fVertex);
fHeader->SetInteractionTime(fTime+fEventTime);
fHeader->SetNProduced(fNprimaries);
if (fProcess == kPyJets || fProcess == kPyJetsPWHG)
{
Int_t ntrig, njet;
Float_t jets[4][10];
GetJets(njet, ntrig, jets);
for (Int_t i = 0; i < ntrig; i++) {
((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
jets[3][i]);
}
}
Float_t uqJet[4];
if (fRL) {
AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
{
printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
exHeader->TriggerJet(i, uqJet);
((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
}
}
if (fQuench){
Double_t z[4] = {0.};
Double_t xp = 0.;
Double_t yp = 0.;
if (fQuench == 1) {
fPythia->GetQuenchingParameters(xp, yp, z);
} else {
Double_t r1 = PARIMP.rb1;
Double_t r2 = PARIMP.rb2;
Double_t b = PARIMP.b1;
Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
Double_t phi = PARIMP.psib1;
xp = r * TMath::Cos(phi);
yp = r * TMath::Sin(phi);
}
((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
}
((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetPtHard());
AddHeader(fHeader);
fHeader = 0x0;
}
Bool_t AliGenPythiaPlus::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
{
Double_t eta[2];
eta[0] = jet1->Eta();
eta[1] = jet2->Eta();
Double_t phi[2];
phi[0] = jet1->Phi();
phi[1] = jet2->Phi();
Int_t pdg[2];
pdg[0] = jet1->GetPdgCode();
pdg[1] = jet2->GetPdgCode();
Bool_t triggered = kFALSE;
if (fProcess == kPyJets || fProcess == kPyJetsPWHG) {
Int_t njets = 0;
Int_t ntrig = 0;
Float_t jets[4][10];
GetJets(njets, ntrig, jets);
if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
} else {
Int_t ij = 0;
Int_t ig = 1;
if (pdg[0] == kGamma) {
ij = 1;
ig = 0;
}
if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
(eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
{
if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
(phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
{
triggered = kTRUE;
}
}
}
return triggered;
}
Bool_t AliGenPythiaPlus::CheckKinematicsOnChild(){
Bool_t checking = kFALSE;
Int_t j, kcode, ks, km;
Int_t nPartAcc = 0;
Int_t numberOfAcceptedParticles = 1;
if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
Int_t npart = fParticles.GetEntriesFast();
for (j = 0; j<npart; j++) {
TParticle * jparticle = (TParticle *) fParticles.At(j);
kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
ks = jparticle->GetStatusCode();
km = jparticle->GetFirstMother();
if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
nPartAcc++;
}
if( numberOfAcceptedParticles <= nPartAcc){
checking = kTRUE;
break;
}
}
return checking;
}
void AliGenPythiaPlus::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
{
fPythia->Pycell(njets);
Int_t i;
for (i = 0; i < njets; i++) {
Float_t px, py, pz, e;
fPythia->GetJet(i, px, py, pz, e);
jets[0][i] = px;
jets[1][i] = py;
jets[2][i] = pz;
jets[3][i] = e;
}
}
void AliGenPythiaPlus::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
{
nJets = 0;
nJetsTrig = 0;
if (fJetReconstruction == kCluster) {
fPythia->Pyclus(nJets);
} else {
fPythia->Pycell(nJets);
}
Int_t i;
for (i = 0; i < nJets; i++) {
Float_t px, py, pz, e;
fPythia->GetJet(i, px, py, pz, e);
Float_t pt = TMath::Sqrt(px * px + py * py);
Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
Float_t theta = TMath::ATan2(pt,pz);
Float_t et = e * TMath::Sin(theta);
Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
if (
eta > fEtaMinJet && eta < fEtaMaxJet &&
phi > fPhiMinJet && phi < fPhiMaxJet &&
et > fEtMinJet && et < fEtMaxJet
)
{
jets[0][nJetsTrig] = px;
jets[1][nJetsTrig] = py;
jets[2][nJetsTrig] = pz;
jets[3][nJetsTrig] = e;
nJetsTrig++;
} else {
}
}
}
void AliGenPythiaPlus::GetSubEventTime()
{
fEventTime = 0.;
if (fEventsTime) {
TArrayF &array = *fEventsTime;
fEventTime = array[fCurSubEvent++];
}
return;
}
Bool_t AliGenPythiaPlus::IsInEMCAL(Float_t phi, Float_t eta) const
{
if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
eta < fEMCALEta )
return kTRUE;
else
return kFALSE;
}
Bool_t AliGenPythiaPlus::IsInPHOS(Float_t phi, Float_t eta) const
{
if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
eta < fPHOSEta )
return kTRUE;
else
return kFALSE;
}
void AliGenPythiaPlus::RotatePhi(Int_t iphcand, Bool_t& okdd)
{
Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
Double_t phiPHOS = gRandom->Uniform(phiPHOSmin,phiPHOSmax);
TParticle* ph = (TParticle *) fParticles.At(iphcand);
Double_t phphi = ph->Phi();
Double_t deltaphi = phiPHOS - phphi;
Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
Double_t oldphi, newphi;
Double_t newVx, newVy, R, Vz, time;
Double_t newPx, newPy, pt, Pz, e;
for(Int_t i=0; i< np; i++) {
TParticle* iparticle = (TParticle *) fParticles.At(i);
oldphi = iparticle->Phi();
newphi = oldphi + deltaphi;
if(newphi < 0) newphi = 2*TMath::Pi() + newphi;
if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi();
R = iparticle->R();
newVx = R*TMath::Cos(newphi);
newVy = R*TMath::Sin(newphi);
Vz = iparticle->Vz();
time = iparticle->T();
pt = iparticle->Pt();
newPx = pt*TMath::Cos(newphi);
newPy = pt*TMath::Sin(newphi);
Pz = iparticle->Pz();
e = iparticle->Energy();
iparticle->SetProductionVertex(newVx, newVy, Vz, time);
iparticle->SetMomentum(newPx, newPy, Pz, e);
}
Float_t phi = ph->Phi()*180./TMath::Pi();
Float_t eta =TMath::Abs(ph->Eta());
if(IsInPHOS(phi,eta))
okdd = kTRUE;
}
#ifdef never
void AliGenPythiaPlus::Streamer(TBuffer &R__b)
{
if (R__b.IsReading()) {
Version_t R__v = R__b.ReadVersion(); if (R__v) { }
AliGenerator::Streamer(R__b);
R__b >> (Int_t&)fProcess;
R__b >> (Int_t&)fStrucFunc;
R__b >> (Int_t&)fForceDecay;
R__b >> fEnergyCMS;
R__b >> fKineBias;
R__b >> fTrials;
fParentSelect.Streamer(R__b);
fChildSelect.Streamer(R__b);
R__b >> fXsection;
R__b >> fPtHardMin;
R__b >> fPtHardMax;
} else {
R__b.WriteVersion(AliGenPythiaPlus::IsA());
AliGenerator::Streamer(R__b);
R__b << (Int_t)fProcess;
R__b << (Int_t)fStrucFunc;
R__b << (Int_t)fForceDecay;
R__b << fEnergyCMS;
R__b << fKineBias;
R__b << fTrials;
fParentSelect.Streamer(R__b);
fChildSelect.Streamer(R__b);
R__b << fXsection;
R__b << fPtHardMin;
R__b << fPtHardMax;
}
}
#endif
AliGenPythiaPlus.cxx:1000 AliGenPythiaPlus.cxx:1001 AliGenPythiaPlus.cxx:1002 AliGenPythiaPlus.cxx:1003 AliGenPythiaPlus.cxx:1004 AliGenPythiaPlus.cxx:1005 AliGenPythiaPlus.cxx:1006 AliGenPythiaPlus.cxx:1007 AliGenPythiaPlus.cxx:1008 AliGenPythiaPlus.cxx:1009 AliGenPythiaPlus.cxx:1010 AliGenPythiaPlus.cxx:1011 AliGenPythiaPlus.cxx:1012 AliGenPythiaPlus.cxx:1013 AliGenPythiaPlus.cxx:1014 AliGenPythiaPlus.cxx:1015 AliGenPythiaPlus.cxx:1016 AliGenPythiaPlus.cxx:1017 AliGenPythiaPlus.cxx:1018 AliGenPythiaPlus.cxx:1019 AliGenPythiaPlus.cxx:1020 AliGenPythiaPlus.cxx:1021 AliGenPythiaPlus.cxx:1022 AliGenPythiaPlus.cxx:1023 AliGenPythiaPlus.cxx:1024 AliGenPythiaPlus.cxx:1025 AliGenPythiaPlus.cxx:1026 AliGenPythiaPlus.cxx:1027 AliGenPythiaPlus.cxx:1028 AliGenPythiaPlus.cxx:1029 AliGenPythiaPlus.cxx:1030 AliGenPythiaPlus.cxx:1031 AliGenPythiaPlus.cxx:1032 AliGenPythiaPlus.cxx:1033 AliGenPythiaPlus.cxx:1034 AliGenPythiaPlus.cxx:1035 AliGenPythiaPlus.cxx:1036 AliGenPythiaPlus.cxx:1037 AliGenPythiaPlus.cxx:1038 AliGenPythiaPlus.cxx:1039 AliGenPythiaPlus.cxx:1040 AliGenPythiaPlus.cxx:1041 AliGenPythiaPlus.cxx:1042 AliGenPythiaPlus.cxx:1043 AliGenPythiaPlus.cxx:1044 AliGenPythiaPlus.cxx:1045 AliGenPythiaPlus.cxx:1046 AliGenPythiaPlus.cxx:1047 AliGenPythiaPlus.cxx:1048 AliGenPythiaPlus.cxx:1049 AliGenPythiaPlus.cxx:1050 AliGenPythiaPlus.cxx:1051 AliGenPythiaPlus.cxx:1052 AliGenPythiaPlus.cxx:1053 AliGenPythiaPlus.cxx:1054 AliGenPythiaPlus.cxx:1055 AliGenPythiaPlus.cxx:1056 AliGenPythiaPlus.cxx:1057 AliGenPythiaPlus.cxx:1058 AliGenPythiaPlus.cxx:1059 AliGenPythiaPlus.cxx:1060 AliGenPythiaPlus.cxx:1061 AliGenPythiaPlus.cxx:1062 AliGenPythiaPlus.cxx:1063 AliGenPythiaPlus.cxx:1064 AliGenPythiaPlus.cxx:1065 AliGenPythiaPlus.cxx:1066 AliGenPythiaPlus.cxx:1067 AliGenPythiaPlus.cxx:1068 AliGenPythiaPlus.cxx:1069 AliGenPythiaPlus.cxx:1070 AliGenPythiaPlus.cxx:1071 AliGenPythiaPlus.cxx:1072 AliGenPythiaPlus.cxx:1073 AliGenPythiaPlus.cxx:1074 AliGenPythiaPlus.cxx:1075 AliGenPythiaPlus.cxx:1076 AliGenPythiaPlus.cxx:1077 AliGenPythiaPlus.cxx:1078 AliGenPythiaPlus.cxx:1079 AliGenPythiaPlus.cxx:1080 AliGenPythiaPlus.cxx:1081 AliGenPythiaPlus.cxx:1082 AliGenPythiaPlus.cxx:1083 AliGenPythiaPlus.cxx:1084 AliGenPythiaPlus.cxx:1085 AliGenPythiaPlus.cxx:1086 AliGenPythiaPlus.cxx:1087 AliGenPythiaPlus.cxx:1088 AliGenPythiaPlus.cxx:1089 AliGenPythiaPlus.cxx:1090 AliGenPythiaPlus.cxx:1091 AliGenPythiaPlus.cxx:1092 AliGenPythiaPlus.cxx:1093 AliGenPythiaPlus.cxx:1094 AliGenPythiaPlus.cxx:1095 AliGenPythiaPlus.cxx:1096 AliGenPythiaPlus.cxx:1097 AliGenPythiaPlus.cxx:1098 AliGenPythiaPlus.cxx:1099 AliGenPythiaPlus.cxx:1100 AliGenPythiaPlus.cxx:1101 AliGenPythiaPlus.cxx:1102 AliGenPythiaPlus.cxx:1103 AliGenPythiaPlus.cxx:1104 AliGenPythiaPlus.cxx:1105 AliGenPythiaPlus.cxx:1106 AliGenPythiaPlus.cxx:1107 AliGenPythiaPlus.cxx:1108 AliGenPythiaPlus.cxx:1109 AliGenPythiaPlus.cxx:1110 AliGenPythiaPlus.cxx:1111 AliGenPythiaPlus.cxx:1112 AliGenPythiaPlus.cxx:1113 AliGenPythiaPlus.cxx:1114 AliGenPythiaPlus.cxx:1115 AliGenPythiaPlus.cxx:1116 AliGenPythiaPlus.cxx:1117 AliGenPythiaPlus.cxx:1118 AliGenPythiaPlus.cxx:1119 AliGenPythiaPlus.cxx:1120 AliGenPythiaPlus.cxx:1121 AliGenPythiaPlus.cxx:1122 AliGenPythiaPlus.cxx:1123 AliGenPythiaPlus.cxx:1124 AliGenPythiaPlus.cxx:1125 AliGenPythiaPlus.cxx:1126 AliGenPythiaPlus.cxx:1127 AliGenPythiaPlus.cxx:1128 AliGenPythiaPlus.cxx:1129 AliGenPythiaPlus.cxx:1130 AliGenPythiaPlus.cxx:1131 AliGenPythiaPlus.cxx:1132 AliGenPythiaPlus.cxx:1133 AliGenPythiaPlus.cxx:1134 AliGenPythiaPlus.cxx:1135 AliGenPythiaPlus.cxx:1136 AliGenPythiaPlus.cxx:1137 AliGenPythiaPlus.cxx:1138 AliGenPythiaPlus.cxx:1139 AliGenPythiaPlus.cxx:1140 AliGenPythiaPlus.cxx:1141 AliGenPythiaPlus.cxx:1142 AliGenPythiaPlus.cxx:1143 AliGenPythiaPlus.cxx:1144 AliGenPythiaPlus.cxx:1145 AliGenPythiaPlus.cxx:1146 AliGenPythiaPlus.cxx:1147 AliGenPythiaPlus.cxx:1148 AliGenPythiaPlus.cxx:1149 AliGenPythiaPlus.cxx:1150 AliGenPythiaPlus.cxx:1151 AliGenPythiaPlus.cxx:1152 AliGenPythiaPlus.cxx:1153 AliGenPythiaPlus.cxx:1154 AliGenPythiaPlus.cxx:1155 AliGenPythiaPlus.cxx:1156 AliGenPythiaPlus.cxx:1157 AliGenPythiaPlus.cxx:1158 AliGenPythiaPlus.cxx:1159 AliGenPythiaPlus.cxx:1160 AliGenPythiaPlus.cxx:1161 AliGenPythiaPlus.cxx:1162 AliGenPythiaPlus.cxx:1163 AliGenPythiaPlus.cxx:1164 AliGenPythiaPlus.cxx:1165 AliGenPythiaPlus.cxx:1166 AliGenPythiaPlus.cxx:1167 AliGenPythiaPlus.cxx:1168 AliGenPythiaPlus.cxx:1169 AliGenPythiaPlus.cxx:1170 AliGenPythiaPlus.cxx:1171 AliGenPythiaPlus.cxx:1172 AliGenPythiaPlus.cxx:1173 AliGenPythiaPlus.cxx:1174 AliGenPythiaPlus.cxx:1175 AliGenPythiaPlus.cxx:1176 AliGenPythiaPlus.cxx:1177 AliGenPythiaPlus.cxx:1178 AliGenPythiaPlus.cxx:1179 AliGenPythiaPlus.cxx:1180 AliGenPythiaPlus.cxx:1181 AliGenPythiaPlus.cxx:1182 AliGenPythiaPlus.cxx:1183 AliGenPythiaPlus.cxx:1184 AliGenPythiaPlus.cxx:1185 AliGenPythiaPlus.cxx:1186 AliGenPythiaPlus.cxx:1187 AliGenPythiaPlus.cxx:1188 AliGenPythiaPlus.cxx:1189 AliGenPythiaPlus.cxx:1190 AliGenPythiaPlus.cxx:1191 AliGenPythiaPlus.cxx:1192 AliGenPythiaPlus.cxx:1193 AliGenPythiaPlus.cxx:1194 AliGenPythiaPlus.cxx:1195 AliGenPythiaPlus.cxx:1196 AliGenPythiaPlus.cxx:1197 AliGenPythiaPlus.cxx:1198 AliGenPythiaPlus.cxx:1199 AliGenPythiaPlus.cxx:1200 AliGenPythiaPlus.cxx:1201 AliGenPythiaPlus.cxx:1202 AliGenPythiaPlus.cxx:1203 AliGenPythiaPlus.cxx:1204 AliGenPythiaPlus.cxx:1205 AliGenPythiaPlus.cxx:1206 AliGenPythiaPlus.cxx:1207 AliGenPythiaPlus.cxx:1208 AliGenPythiaPlus.cxx:1209 AliGenPythiaPlus.cxx:1210 AliGenPythiaPlus.cxx:1211 AliGenPythiaPlus.cxx:1212 AliGenPythiaPlus.cxx:1213 AliGenPythiaPlus.cxx:1214 AliGenPythiaPlus.cxx:1215 AliGenPythiaPlus.cxx:1216 AliGenPythiaPlus.cxx:1217 AliGenPythiaPlus.cxx:1218 AliGenPythiaPlus.cxx:1219 AliGenPythiaPlus.cxx:1220 AliGenPythiaPlus.cxx:1221 AliGenPythiaPlus.cxx:1222 AliGenPythiaPlus.cxx:1223 AliGenPythiaPlus.cxx:1224 AliGenPythiaPlus.cxx:1225 AliGenPythiaPlus.cxx:1226 AliGenPythiaPlus.cxx:1227 AliGenPythiaPlus.cxx:1228 AliGenPythiaPlus.cxx:1229 AliGenPythiaPlus.cxx:1230 AliGenPythiaPlus.cxx:1231 AliGenPythiaPlus.cxx:1232 AliGenPythiaPlus.cxx:1233 AliGenPythiaPlus.cxx:1234 AliGenPythiaPlus.cxx:1235 AliGenPythiaPlus.cxx:1236 AliGenPythiaPlus.cxx:1237 AliGenPythiaPlus.cxx:1238 AliGenPythiaPlus.cxx:1239 AliGenPythiaPlus.cxx:1240 AliGenPythiaPlus.cxx:1241 AliGenPythiaPlus.cxx:1242 AliGenPythiaPlus.cxx:1243 AliGenPythiaPlus.cxx:1244 AliGenPythiaPlus.cxx:1245 AliGenPythiaPlus.cxx:1246 AliGenPythiaPlus.cxx:1247 AliGenPythiaPlus.cxx:1248 AliGenPythiaPlus.cxx:1249 AliGenPythiaPlus.cxx:1250 AliGenPythiaPlus.cxx:1251 AliGenPythiaPlus.cxx:1252 AliGenPythiaPlus.cxx:1253 AliGenPythiaPlus.cxx:1254 AliGenPythiaPlus.cxx:1255 AliGenPythiaPlus.cxx:1256 AliGenPythiaPlus.cxx:1257 AliGenPythiaPlus.cxx:1258 AliGenPythiaPlus.cxx:1259 AliGenPythiaPlus.cxx:1260 AliGenPythiaPlus.cxx:1261 AliGenPythiaPlus.cxx:1262 AliGenPythiaPlus.cxx:1263 AliGenPythiaPlus.cxx:1264 AliGenPythiaPlus.cxx:1265 AliGenPythiaPlus.cxx:1266 AliGenPythiaPlus.cxx:1267 AliGenPythiaPlus.cxx:1268 AliGenPythiaPlus.cxx:1269 AliGenPythiaPlus.cxx:1270 AliGenPythiaPlus.cxx:1271 AliGenPythiaPlus.cxx:1272 AliGenPythiaPlus.cxx:1273 AliGenPythiaPlus.cxx:1274 AliGenPythiaPlus.cxx:1275 AliGenPythiaPlus.cxx:1276 AliGenPythiaPlus.cxx:1277 AliGenPythiaPlus.cxx:1278 AliGenPythiaPlus.cxx:1279 AliGenPythiaPlus.cxx:1280 AliGenPythiaPlus.cxx:1281 AliGenPythiaPlus.cxx:1282 AliGenPythiaPlus.cxx:1283 AliGenPythiaPlus.cxx:1284 AliGenPythiaPlus.cxx:1285 AliGenPythiaPlus.cxx:1286 AliGenPythiaPlus.cxx:1287 AliGenPythiaPlus.cxx:1288 AliGenPythiaPlus.cxx:1289 AliGenPythiaPlus.cxx:1290 AliGenPythiaPlus.cxx:1291 AliGenPythiaPlus.cxx:1292 AliGenPythiaPlus.cxx:1293 AliGenPythiaPlus.cxx:1294 AliGenPythiaPlus.cxx:1295 AliGenPythiaPlus.cxx:1296 AliGenPythiaPlus.cxx:1297 AliGenPythiaPlus.cxx:1298 AliGenPythiaPlus.cxx:1299 AliGenPythiaPlus.cxx:1300 AliGenPythiaPlus.cxx:1301 AliGenPythiaPlus.cxx:1302 AliGenPythiaPlus.cxx:1303 AliGenPythiaPlus.cxx:1304 AliGenPythiaPlus.cxx:1305 AliGenPythiaPlus.cxx:1306 AliGenPythiaPlus.cxx:1307 AliGenPythiaPlus.cxx:1308 AliGenPythiaPlus.cxx:1309 AliGenPythiaPlus.cxx:1310 AliGenPythiaPlus.cxx:1311 AliGenPythiaPlus.cxx:1312 AliGenPythiaPlus.cxx:1313 AliGenPythiaPlus.cxx:1314 AliGenPythiaPlus.cxx:1315 AliGenPythiaPlus.cxx:1316 AliGenPythiaPlus.cxx:1317 AliGenPythiaPlus.cxx:1318 AliGenPythiaPlus.cxx:1319 AliGenPythiaPlus.cxx:1320 AliGenPythiaPlus.cxx:1321 AliGenPythiaPlus.cxx:1322 AliGenPythiaPlus.cxx:1323 AliGenPythiaPlus.cxx:1324 AliGenPythiaPlus.cxx:1325 AliGenPythiaPlus.cxx:1326 AliGenPythiaPlus.cxx:1327 AliGenPythiaPlus.cxx:1328 AliGenPythiaPlus.cxx:1329 AliGenPythiaPlus.cxx:1330 AliGenPythiaPlus.cxx:1331 AliGenPythiaPlus.cxx:1332 AliGenPythiaPlus.cxx:1333 AliGenPythiaPlus.cxx:1334 AliGenPythiaPlus.cxx:1335 AliGenPythiaPlus.cxx:1336 AliGenPythiaPlus.cxx:1337 AliGenPythiaPlus.cxx:1338 AliGenPythiaPlus.cxx:1339 AliGenPythiaPlus.cxx:1340 AliGenPythiaPlus.cxx:1341 AliGenPythiaPlus.cxx:1342 AliGenPythiaPlus.cxx:1343 AliGenPythiaPlus.cxx:1344 AliGenPythiaPlus.cxx:1345 AliGenPythiaPlus.cxx:1346 AliGenPythiaPlus.cxx:1347 AliGenPythiaPlus.cxx:1348 AliGenPythiaPlus.cxx:1349 AliGenPythiaPlus.cxx:1350 AliGenPythiaPlus.cxx:1351 AliGenPythiaPlus.cxx:1352 AliGenPythiaPlus.cxx:1353 AliGenPythiaPlus.cxx:1354 AliGenPythiaPlus.cxx:1355 AliGenPythiaPlus.cxx:1356 AliGenPythiaPlus.cxx:1357 AliGenPythiaPlus.cxx:1358 AliGenPythiaPlus.cxx:1359 AliGenPythiaPlus.cxx:1360 AliGenPythiaPlus.cxx:1361 AliGenPythiaPlus.cxx:1362 AliGenPythiaPlus.cxx:1363 AliGenPythiaPlus.cxx:1364 AliGenPythiaPlus.cxx:1365 AliGenPythiaPlus.cxx:1366 AliGenPythiaPlus.cxx:1367 AliGenPythiaPlus.cxx:1368 AliGenPythiaPlus.cxx:1369 AliGenPythiaPlus.cxx:1370 AliGenPythiaPlus.cxx:1371 AliGenPythiaPlus.cxx:1372 AliGenPythiaPlus.cxx:1373 AliGenPythiaPlus.cxx:1374 AliGenPythiaPlus.cxx:1375 AliGenPythiaPlus.cxx:1376 AliGenPythiaPlus.cxx:1377 AliGenPythiaPlus.cxx:1378 AliGenPythiaPlus.cxx:1379 AliGenPythiaPlus.cxx:1380 AliGenPythiaPlus.cxx:1381 AliGenPythiaPlus.cxx:1382 AliGenPythiaPlus.cxx:1383 AliGenPythiaPlus.cxx:1384 AliGenPythiaPlus.cxx:1385 AliGenPythiaPlus.cxx:1386 AliGenPythiaPlus.cxx:1387 AliGenPythiaPlus.cxx:1388 AliGenPythiaPlus.cxx:1389 AliGenPythiaPlus.cxx:1390 AliGenPythiaPlus.cxx:1391 AliGenPythiaPlus.cxx:1392 AliGenPythiaPlus.cxx:1393 AliGenPythiaPlus.cxx:1394 AliGenPythiaPlus.cxx:1395 AliGenPythiaPlus.cxx:1396 AliGenPythiaPlus.cxx:1397 AliGenPythiaPlus.cxx:1398 AliGenPythiaPlus.cxx:1399 AliGenPythiaPlus.cxx:1400 AliGenPythiaPlus.cxx:1401 AliGenPythiaPlus.cxx:1402 AliGenPythiaPlus.cxx:1403 AliGenPythiaPlus.cxx:1404 AliGenPythiaPlus.cxx:1405 AliGenPythiaPlus.cxx:1406 AliGenPythiaPlus.cxx:1407 AliGenPythiaPlus.cxx:1408 AliGenPythiaPlus.cxx:1409 AliGenPythiaPlus.cxx:1410 AliGenPythiaPlus.cxx:1411 AliGenPythiaPlus.cxx:1412 AliGenPythiaPlus.cxx:1413 AliGenPythiaPlus.cxx:1414 AliGenPythiaPlus.cxx:1415 AliGenPythiaPlus.cxx:1416 AliGenPythiaPlus.cxx:1417 AliGenPythiaPlus.cxx:1418 AliGenPythiaPlus.cxx:1419 AliGenPythiaPlus.cxx:1420 AliGenPythiaPlus.cxx:1421 AliGenPythiaPlus.cxx:1422 AliGenPythiaPlus.cxx:1423 AliGenPythiaPlus.cxx:1424 AliGenPythiaPlus.cxx:1425 AliGenPythiaPlus.cxx:1426 AliGenPythiaPlus.cxx:1427 AliGenPythiaPlus.cxx:1428 AliGenPythiaPlus.cxx:1429 AliGenPythiaPlus.cxx:1430 AliGenPythiaPlus.cxx:1431 AliGenPythiaPlus.cxx:1432 AliGenPythiaPlus.cxx:1433 AliGenPythiaPlus.cxx:1434 AliGenPythiaPlus.cxx:1435 AliGenPythiaPlus.cxx:1436 AliGenPythiaPlus.cxx:1437 AliGenPythiaPlus.cxx:1438 AliGenPythiaPlus.cxx:1439 AliGenPythiaPlus.cxx:1440 AliGenPythiaPlus.cxx:1441 AliGenPythiaPlus.cxx:1442 AliGenPythiaPlus.cxx:1443 AliGenPythiaPlus.cxx:1444 AliGenPythiaPlus.cxx:1445 AliGenPythiaPlus.cxx:1446 AliGenPythiaPlus.cxx:1447 AliGenPythiaPlus.cxx:1448 AliGenPythiaPlus.cxx:1449 AliGenPythiaPlus.cxx:1450 AliGenPythiaPlus.cxx:1451 AliGenPythiaPlus.cxx:1452 AliGenPythiaPlus.cxx:1453 AliGenPythiaPlus.cxx:1454 AliGenPythiaPlus.cxx:1455 AliGenPythiaPlus.cxx:1456 AliGenPythiaPlus.cxx:1457 AliGenPythiaPlus.cxx:1458 AliGenPythiaPlus.cxx:1459 AliGenPythiaPlus.cxx:1460 AliGenPythiaPlus.cxx:1461 AliGenPythiaPlus.cxx:1462 AliGenPythiaPlus.cxx:1463 AliGenPythiaPlus.cxx:1464 AliGenPythiaPlus.cxx:1465 AliGenPythiaPlus.cxx:1466 AliGenPythiaPlus.cxx:1467 AliGenPythiaPlus.cxx:1468 AliGenPythiaPlus.cxx:1469 AliGenPythiaPlus.cxx:1470 AliGenPythiaPlus.cxx:1471 AliGenPythiaPlus.cxx:1472 AliGenPythiaPlus.cxx:1473 AliGenPythiaPlus.cxx:1474 AliGenPythiaPlus.cxx:1475 AliGenPythiaPlus.cxx:1476 AliGenPythiaPlus.cxx:1477 AliGenPythiaPlus.cxx:1478 AliGenPythiaPlus.cxx:1479 AliGenPythiaPlus.cxx:1480 AliGenPythiaPlus.cxx:1481 AliGenPythiaPlus.cxx:1482 AliGenPythiaPlus.cxx:1483 AliGenPythiaPlus.cxx:1484 AliGenPythiaPlus.cxx:1485 AliGenPythiaPlus.cxx:1486 AliGenPythiaPlus.cxx:1487 AliGenPythiaPlus.cxx:1488 AliGenPythiaPlus.cxx:1489 AliGenPythiaPlus.cxx:1490 AliGenPythiaPlus.cxx:1491 AliGenPythiaPlus.cxx:1492 AliGenPythiaPlus.cxx:1493