1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
19 // Generator using the TPythia interface (via AliPythia)
20 // to generate pp collisions.
21 // Using SetNuclei() also nuclear modifications to the structure functions
22 // can be taken into account. This makes, of course, only sense for the
23 // generation of the products of hard processes (heavy flavor, jets ...)
25 // andreas.morsch@cern.ch
28 #include <TClonesArray.h>
29 #include <TDatabasePDG.h>
30 #include <TParticle.h>
32 #include <TObjArray.h>
36 #include "AliDecayerPythia.h"
37 #include "AliGenPythia.h"
38 #include "AliFastGlauber.h"
39 #include "AliHeader.h"
40 #include "AliGenPythiaEventHeader.h"
41 #include "AliPythia.h"
42 #include "AliPythiaRndm.h"
45 #include "AliRunLoader.h"
48 #include "PyquenCommon.h"
51 ClassImp(AliGenPythia)
54 AliGenPythia::AliGenPythia():
96 fDecayer(new AliDecayerPythia()),
104 fPhiMaxJet(2.* TMath::Pi()),
105 fJetReconstruction(kCell),
109 fPhiMaxGamma(2. * TMath::Pi()),
113 fPycellThreshold(0.),
115 fPycellMinEtJet(10.),
116 fPycellMaxRadius(1.),
117 fStackFillOpt(kFlavorSelection),
119 fFragmentation(kTRUE),
121 fUseNuclearPDF(kFALSE),
122 fUseLorentzBoost(kTRUE),
130 fTriggerMultiplicity(0),
131 fTriggerMultiplicityEta(0),
132 fTriggerMultiplicityPtMin(0),
133 fCountMode(kCountAll),
138 fFragPhotonInCalo(kFALSE),
139 fHadronInCalo(kFALSE) ,
142 fPhotonInCalo(kFALSE), // not in use
143 fDecayPhotonInCalo(kFALSE),
144 fForceNeutralMeson2PhotonDecay(kFALSE),
146 fEleInEMCAL(kFALSE), // not in use
147 fCheckBarrel(kFALSE),
150 fCheckPHOSeta(kFALSE),
151 fPHOSRotateCandidate(-1),
152 fTriggerParticleMinPt(0),
153 fPhotonMinPt(0), // not in use
154 fElectronMinPt(0), // not in use
164 // Default Constructor
166 if (!AliPythiaRndm::GetPythiaRandom())
167 AliPythiaRndm::SetPythiaRandom(GetRandom());
170 AliGenPythia::AliGenPythia(Int_t npart)
182 fInteractionRate(0.),
196 fHadronisation(kTRUE),
197 fPatchOmegaDalitz(0),
199 fReadFromFile(kFALSE),
212 fDecayer(new AliDecayerPythia()),
213 fDebugEventFirst(-1),
220 fPhiMaxJet(2.* TMath::Pi()),
221 fJetReconstruction(kCell),
225 fPhiMaxGamma(2. * TMath::Pi()),
229 fPycellThreshold(0.),
231 fPycellMinEtJet(10.),
232 fPycellMaxRadius(1.),
233 fStackFillOpt(kFlavorSelection),
235 fFragmentation(kTRUE),
237 fUseNuclearPDF(kFALSE),
238 fUseLorentzBoost(kTRUE),
246 fTriggerMultiplicity(0),
247 fTriggerMultiplicityEta(0),
248 fTriggerMultiplicityPtMin(0),
249 fCountMode(kCountAll),
254 fFragPhotonInCalo(kFALSE),
255 fHadronInCalo(kFALSE) ,
258 fPhotonInCalo(kFALSE), // not in use
259 fDecayPhotonInCalo(kFALSE),
260 fForceNeutralMeson2PhotonDecay(kFALSE),
262 fEleInEMCAL(kFALSE), // not in use
263 fCheckBarrel(kFALSE),
266 fCheckPHOSeta(kFALSE),
267 fPHOSRotateCandidate(-1),
268 fTriggerParticleMinPt(0),
269 fPhotonMinPt(0), // not in use
270 fElectronMinPt(0), // not in use
280 // default charm production at 5. 5 TeV
282 // structure function GRVHO
286 fTitle= "Particle Generator using PYTHIA";
288 // Set random number generator
289 if (!AliPythiaRndm::GetPythiaRandom())
290 AliPythiaRndm::SetPythiaRandom(GetRandom());
293 AliGenPythia::~AliGenPythia()
296 if(fEventsTime) delete fEventsTime;
299 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
301 // Generate pileup using user specified rate
302 fInteractionRate = rate;
303 fTimeWindow = timewindow;
307 void AliGenPythia::GeneratePileup()
309 // Generate sub events time for pileup
311 if(fInteractionRate == 0.) {
312 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
316 Int_t npart = NumberParticles();
318 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
322 if(fEventsTime) delete fEventsTime;
323 fEventsTime = new TArrayF(npart);
324 TArrayF &array = *fEventsTime;
325 for(Int_t ipart = 0; ipart < npart; ipart++)
328 Float_t eventtime = 0.;
331 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
332 if(eventtime > fTimeWindow) break;
333 array.Set(array.GetSize()+1);
334 array[array.GetSize()-1] = eventtime;
340 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
341 if(TMath::Abs(eventtime) > fTimeWindow) break;
342 array.Set(array.GetSize()+1);
343 array[array.GetSize()-1] = eventtime;
346 SetNumberParticles(fEventsTime->GetSize());
349 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
350 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
352 // Set pycell parameters
353 fPycellEtaMax = etamax;
356 fPycellThreshold = thresh;
357 fPycellEtSeed = etseed;
358 fPycellMinEtJet = minet;
359 fPycellMaxRadius = r;
364 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
366 // Set a range of event numbers, for which a table
367 // of generated particle will be printed
368 fDebugEventFirst = eventFirst;
369 fDebugEventLast = eventLast;
370 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
373 void AliGenPythia::Init()
377 SetMC(AliPythia::Instance());
378 fPythia=(AliPythia*) fMCEvGen;
381 fParentWeight=1./Float_t(fNpart);
385 fPythia->SetCKIN(3,fPtHardMin);
386 fPythia->SetCKIN(4,fPtHardMax);
387 fPythia->SetCKIN(7,fYHardMin);
388 fPythia->SetCKIN(8,fYHardMax);
390 if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
393 fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
395 if (fFragmentation) {
396 fPythia->SetMSTP(111,1);
398 fPythia->SetMSTP(111,0);
402 // initial state radiation
403 fPythia->SetMSTP(61,fGinit);
404 // final state radiation
405 fPythia->SetMSTP(71,fGfinal);
408 fPythia->SetMSTP(91,1);
409 fPythia->SetPARP(91,fPtKick);
410 fPythia->SetPARP(93, 4. * fPtKick);
412 fPythia->SetMSTP(91,0);
415 if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
418 fRL = AliRunLoader::Open(fkFileName, "Partons");
419 fRL->LoadKinematics();
425 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
426 // Forward Paramters to the AliPythia object
427 fDecayer->SetForceDecay(fForceDecay);
428 // Switch off Heavy Flavors on request
430 // Maximum number of quark flavours used in pdf
431 fPythia->SetMSTP(58, 3);
432 // Maximum number of flavors that can be used in showers
433 fPythia->SetMSTJ(45, 3);
434 // Switch off g->QQbar splitting in decay table
435 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
441 // Parent and Children Selection
444 case kPyOldUEQ2ordered:
445 case kPyOldUEQ2ordered2:
449 case kPyCharmUnforced:
450 case kPyCharmPbPbMNR:
453 case kPyCharmppMNRwmi:
455 fParentSelect[0] = 411;
456 fParentSelect[1] = 421;
457 fParentSelect[2] = 431;
458 fParentSelect[3] = 4122;
459 fParentSelect[4] = 4232;
460 fParentSelect[5] = 4132;
461 fParentSelect[6] = 4332;
467 fParentSelect[0] = 421;
470 case kPyDPlusPbPbMNR:
473 fParentSelect[0] = 411;
476 case kPyDPlusStrangePbPbMNR:
477 case kPyDPlusStrangepPbMNR:
478 case kPyDPlusStrangeppMNR:
479 fParentSelect[0] = 431;
482 case kPyLambdacppMNR:
483 fParentSelect[0] = 4122;
488 case kPyBeautyPbPbMNR:
489 case kPyBeautypPbMNR:
491 case kPyBeautyppMNRwmi:
493 fParentSelect[0]= 511;
494 fParentSelect[1]= 521;
495 fParentSelect[2]= 531;
496 fParentSelect[3]= 5122;
497 fParentSelect[4]= 5132;
498 fParentSelect[5]= 5232;
499 fParentSelect[6]= 5332;
502 case kPyBeautyUnforced:
503 fParentSelect[0] = 511;
504 fParentSelect[1] = 521;
505 fParentSelect[2] = 531;
506 fParentSelect[3] = 5122;
507 fParentSelect[4] = 5132;
508 fParentSelect[5] = 5232;
509 fParentSelect[6] = 5332;
514 fParentSelect[0] = 443;
517 case kPyMbAtlasTuneMC09:
519 case kPyMbWithDirectPhoton:
531 case kPyMBRSingleDiffraction:
532 case kPyMBRDoubleDiffraction:
533 case kPyMBRCentralDiffraction:
538 // JetFinder for Trigger
540 // Configure detector (EMCAL like)
542 fPythia->SetPARU(51, fPycellEtaMax);
543 fPythia->SetMSTU(51, fPycellNEta);
544 fPythia->SetMSTU(52, fPycellNPhi);
546 // Configure Jet Finder
548 fPythia->SetPARU(58, fPycellThreshold);
549 fPythia->SetPARU(52, fPycellEtSeed);
550 fPythia->SetPARU(53, fPycellMinEtJet);
551 fPythia->SetPARU(54, fPycellMaxRadius);
552 fPythia->SetMSTU(54, 2);
554 // This counts the total number of calls to Pyevnt() per run.
565 // Reset Lorentz boost if demanded
566 if(!fUseLorentzBoost) {
568 Warning("Init","Demand to discard Lorentz boost.\n");
575 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
577 fPythia->SetPARJ(200, 0.0);
578 fPythia->SetPARJ(199, 0.0);
579 fPythia->SetPARJ(198, 0.0);
580 fPythia->SetPARJ(197, 0.0);
583 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
586 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
589 // Nestor's change of the splittings
590 fPythia->SetPARJ(200, 0.8);
591 fPythia->SetMSTJ(41, 1); // QCD radiation only
592 fPythia->SetMSTJ(42, 2); // angular ordering
593 fPythia->SetMSTJ(44, 2); // option to run alpha_s
594 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
595 fPythia->SetMSTJ(50, 0); // No coherence in first branching
596 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
597 } else if (fQuench == 4) {
598 // Armesto-Cunqueiro-Salgado change of the splittings.
599 AliFastGlauber* glauber = AliFastGlauber::Instance();
601 //read and store transverse almonds corresponding to differnt
603 glauber->SetCentralityClass(0.,0.1);
604 fPythia->SetPARJ(200, 1.);
605 fPythia->SetPARJ(198, fQhat);
606 fPythia->SetPARJ(199, fLength);
607 fPythia->SetMSTJ(42, 2); // angular ordering
608 fPythia->SetMSTJ(44, 2); // option to run alpha_s
609 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
612 StdoutToAliDebug(1, fPythia->Pystat(4));
613 StdoutToAliDebug(1, fPythia->Pystat(5));
616 void AliGenPythia::Generate()
618 // Generate one event
619 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
620 fDecayer->ForceDecay();
622 Double_t polar[3] = {0,0,0};
623 Double_t origin[3] = {0,0,0};
625 // converts from mm/c to s
626 const Float_t kconv=0.001/2.999792458e8;
636 // Set collision vertex position
637 if (fVertexSmear == kPerEvent) Vertex();
646 // Switch hadronisation off
648 fPythia->SetMSTJ(1, 0);
652 // Quenching comes through medium-modified splitting functions.
653 AliFastGlauber::Instance()->GetRandomBHard(bimp);
654 fPythia->SetPARJ(197, bimp);
659 // Either produce new event or read partons from file
661 if (!fReadFromFile) {
667 fNpartons = fPythia->GetN();
669 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
670 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
672 LoadEvent(fRL->Stack(), 0 , 1);
677 // Run quenching routine
681 } else if (fQuench == 2){
682 fPythia->Pyquen(208., 0, 0.);
683 } else if (fQuench == 3) {
684 // Quenching is via multiplicative correction of the splittings
688 // Switch hadronisation on
690 if (fHadronisation) {
691 fPythia->SetMSTJ(1, 1);
693 // .. and perform hadronisation
694 // printf("Calling hadronisation %d\n", fPythia->GetN());
696 if (fPatchOmegaDalitz) {
697 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
699 fPythia->DalitzDecays();
700 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
705 fPythia->ImportParticles(&fParticles,"All");
707 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
708 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
716 Int_t np = fParticles.GetEntriesFast();
718 if (np == 0) continue;
722 Int_t* pParent = new Int_t[np];
723 Int_t* pSelected = new Int_t[np];
724 Int_t* trackIt = new Int_t[np];
725 for (i = 0; i < np; i++) {
731 Int_t nc = 0; // Total n. of selected particles
732 Int_t nParents = 0; // Selected parents
733 Int_t nTkbles = 0; // Trackable particles
734 if (fProcess != kPyMbDefault &&
736 fProcess != kPyMbAtlasTuneMC09 &&
737 fProcess != kPyMbWithDirectPhoton &&
738 fProcess != kPyJets &&
739 fProcess != kPyDirectGamma &&
740 fProcess != kPyMbNonDiffr &&
741 fProcess != kPyMbMSEL1 &&
744 fProcess != kPyZgamma &&
745 fProcess != kPyCharmppMNRwmi &&
746 fProcess != kPyBeautyppMNRwmi &&
747 fProcess != kPyBeautyJets &&
748 fProcess != kPyWPWHG &&
749 fProcess != kPyJetsPWHG &&
750 fProcess != kPyCharmPWHG &&
751 fProcess != kPyBeautyPWHG) {
753 for (i = 0; i < np; i++) {
754 TParticle* iparticle = (TParticle *) fParticles.At(i);
755 Int_t ks = iparticle->GetStatusCode();
756 kf = CheckPDGCode(iparticle->GetPdgCode());
757 // No initial state partons
758 if (ks==21) continue;
760 // Heavy Flavor Selection
767 if (kfl > 100000) kfl %= 100000;
768 if (kfl > 10000) kfl %= 10000;
770 if (kfl > 10) kfl/=100;
772 if (kfl > 10) kfl/=10;
773 Int_t ipa = iparticle->GetFirstMother()-1;
776 // Establish mother daughter relation between heavy quarks and mesons
778 if (kf >= fFlavorSelect && kf <= 6) {
779 Int_t idau = iparticle->GetFirstDaughter() - 1;
781 TParticle* daughter = (TParticle *) fParticles.At(idau);
782 Int_t pdgD = daughter->GetPdgCode();
783 if (pdgD == 91 || pdgD == 92) {
784 Int_t jmin = daughter->GetFirstDaughter() - 1;
785 Int_t jmax = daughter->GetLastDaughter() - 1;
786 for (Int_t jp = jmin; jp <= jmax; jp++)
787 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
788 } // is string or cluster
794 TParticle * mother = (TParticle *) fParticles.At(ipa);
795 kfMo = TMath::Abs(mother->GetPdgCode());
798 // What to keep in Stack?
799 Bool_t flavorOK = kFALSE;
800 Bool_t selectOK = kFALSE;
802 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
804 if (kfl > fFlavorSelect) {
808 if (kfl == fFlavorSelect) flavorOK = kTRUE;
810 switch (fStackFillOpt) {
812 case kFlavorSelection:
815 case kParentSelection:
816 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
819 if (flavorOK && selectOK) {
821 // Heavy flavor hadron or quark
823 // Kinematic seletion on final state heavy flavor mesons
824 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
829 if (ParentSelected(kf)) ++nParents; // Update parent count
830 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
832 // Kinematic seletion on decay products
833 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
834 && !KinematicSelection(iparticle, 1))
840 // Select if mother was selected and is not tracked
842 if (pSelected[ipa] &&
843 !trackIt[ipa] && // mother will be tracked ?
844 kfMo != 5 && // mother is b-quark, don't store fragments
845 kfMo != 4 && // mother is c-quark, don't store fragments
846 kf != 92) // don't store string
849 // Semi-stable or de-selected: diselect decay products:
852 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
854 Int_t ipF = iparticle->GetFirstDaughter();
855 Int_t ipL = iparticle->GetLastDaughter();
856 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
858 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
859 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
862 if (pSelected[i] == -1) pSelected[i] = 0;
863 if (!pSelected[i]) continue;
864 // Count quarks only if you did not include fragmentation
865 if (fFragmentation && kf <= 10) continue;
868 // Decision on tracking
871 // Track final state particle
872 if (ks == 1) trackIt[i] = 1;
873 // Track semi-stable particles
874 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
875 // Track particles selected by process if undecayed.
876 if (fForceDecay == kNoDecay) {
877 if (ParentSelected(kf)) trackIt[i] = 1;
879 if (ParentSelected(kf)) trackIt[i] = 0;
881 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
885 } // particle selection loop
887 for (i = 0; i<np; i++) {
888 if (!pSelected[i]) continue;
889 TParticle * iparticle = (TParticle *) fParticles.At(i);
890 kf = CheckPDGCode(iparticle->GetPdgCode());
891 Int_t ks = iparticle->GetStatusCode();
892 p[0] = iparticle->Px();
893 p[1] = iparticle->Py();
894 p[2] = iparticle->Pz();
895 p[3] = iparticle->Energy();
897 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
898 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
899 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
901 Float_t tof = fTime + kconv*iparticle->T();
902 Int_t ipa = iparticle->GetFirstMother()-1;
903 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
905 PushTrack(fTrackIt*trackIt[i], iparent, kf,
906 p[0], p[1], p[2], p[3],
907 origin[0], origin[1], origin[2], tof,
908 polar[0], polar[1], polar[2],
909 kPPrimary, nt, 1., ks);
926 switch (fCountMode) {
928 // printf(" Count all \n");
932 // printf(" Count parents \n");
935 case kCountTrackables:
936 // printf(" Count trackable \n");
940 if (jev >= fNpart || fNpart == -1) {
941 fKineBias=Float_t(fNpart)/Float_t(fTrials);
943 fQ += fPythia->GetVINT(51);
944 fX1 += fPythia->GetVINT(41);
945 fX2 += fPythia->GetVINT(42);
946 fTrialsRun += fTrials;
953 SetHighWaterMark(nt);
954 // adjust weight due to kinematic selection
957 fXsection=fPythia->GetPARI(1);
960 Int_t AliGenPythia::GenerateMB()
963 // Min Bias selection and other global selections
965 Int_t i, kf, nt, iparent;
968 Double_t polar[3] = {0,0,0};
969 Double_t origin[3] = {0,0,0};
970 // converts from mm/c to s
971 const Float_t kconv=0.001/2.999792458e8;
974 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
978 Int_t* pParent = new Int_t[np];
979 for (i=0; i< np; i++) pParent[i] = -1;
980 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
982 TParticle* jet1 = (TParticle *) fParticles.At(6);
983 TParticle* jet2 = (TParticle *) fParticles.At(7);
985 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
992 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
993 // implemented primaryly for kPyJets, but extended to any kind of process.
994 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
995 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
996 Bool_t ok = TriggerOnSelectedParticles(np);
1004 // Check for diffraction
1006 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1007 if(!CheckDiffraction()) {
1014 // Check for minimum multiplicity
1015 if (fTriggerMultiplicity > 0) {
1016 Int_t multiplicity = 0;
1017 for (i = 0; i < np; i++) {
1018 TParticle * iparticle = (TParticle *) fParticles.At(i);
1020 Int_t statusCode = iparticle->GetStatusCode();
1022 // Initial state particle
1023 if (statusCode != 1)
1026 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1029 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1032 TParticlePDG* pdgPart = iparticle->GetPDG();
1033 if (pdgPart && pdgPart->Charge() == 0)
1039 if (multiplicity < fTriggerMultiplicity) {
1043 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1047 if (fTriggerParticle) {
1048 Bool_t triggered = kFALSE;
1049 for (i = 0; i < np; i++) {
1050 TParticle * iparticle = (TParticle *) fParticles.At(i);
1051 kf = CheckPDGCode(iparticle->GetPdgCode());
1052 if (kf != fTriggerParticle) continue;
1053 if (iparticle->Pt() == 0.) continue;
1054 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1055 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1066 // Check if there is a ccbar or bbbar pair with at least one of the two
1067 // in fYMin < y < fYMax
1069 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1070 TParticle *partCheck;
1072 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1073 Bool_t theChild=kFALSE;
1074 Bool_t triggered=kFALSE;
1076 Int_t pdg,mpdg,mpdgUpperFamily;
1077 for(i=0; i<np; i++) {
1078 partCheck = (TParticle*)fParticles.At(i);
1079 pdg = partCheck->GetPdgCode();
1080 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1081 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1082 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1083 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1084 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1086 if(fTriggerParticle) {
1087 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1089 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1090 Int_t mi = partCheck->GetFirstMother() - 1;
1092 mother = (TParticle*)fParticles.At(mi);
1093 mpdg=TMath::Abs(mother->GetPdgCode());
1094 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1095 if ( ParentSelected(mpdg) ||
1096 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1097 if (KinematicSelection(partCheck,1)) {
1103 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1107 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1111 if(fTriggerParticle && !triggered) { // particle requested is not produced
1118 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1120 fProcess == kPyWPWHG ||
1123 fProcess == kPyZgamma ||
1124 fProcess == kPyMbDefault ||
1125 fProcess == kPyMb ||
1126 fProcess == kPyMbAtlasTuneMC09 ||
1127 fProcess == kPyMbWithDirectPhoton ||
1128 fProcess == kPyMbNonDiffr)
1129 && (fCutOnChild == 1) ) {
1130 if ( !CheckKinematicsOnChild() ) {
1137 for (i = 0; i < np; i++) {
1139 TParticle * iparticle = (TParticle *) fParticles.At(i);
1140 kf = CheckPDGCode(iparticle->GetPdgCode());
1141 Int_t ks = iparticle->GetStatusCode();
1142 Int_t km = iparticle->GetFirstMother();
1144 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1145 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1149 if (ks == 1) trackIt = 1;
1150 Int_t ipa = iparticle->GetFirstMother()-1;
1152 iparent = (ipa > -1) ? pParent[ipa] : -1;
1155 // store track information
1156 p[0] = iparticle->Px();
1157 p[1] = iparticle->Py();
1158 p[2] = iparticle->Pz();
1159 p[3] = iparticle->Energy();
1162 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1163 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1164 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1166 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1168 PushTrack(fTrackIt*trackIt, iparent, kf,
1169 p[0], p[1], p[2], p[3],
1170 origin[0], origin[1], origin[2], tof,
1171 polar[0], polar[1], polar[2],
1172 kPPrimary, nt, 1., ks);
1176 SetHighWaterMark(nt);
1178 } // select particle
1187 void AliGenPythia::FinishRun()
1189 // Print x-section summary
1198 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1199 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1202 void AliGenPythia::AdjustWeights() const
1204 // Adjust the weights after generation of all events
1208 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1209 for (Int_t i=0; i<ntrack; i++) {
1210 part= gAlice->GetMCApp()->Particle(i);
1211 part->SetWeight(part->GetWeight()*fKineBias);
1216 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1218 // Treat protons as inside nuclei with mass numbers a1 and a2
1222 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1223 fUseNuclearPDF = kTRUE;
1228 void AliGenPythia::MakeHeader()
1231 // Make header for the simulated event
1234 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1235 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1238 // Builds the event header, to be called after each event
1239 if (fHeader) delete fHeader;
1240 fHeader = new AliGenPythiaEventHeader("Pythia");
1244 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1245 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1246 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1249 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1252 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1255 fHeader->SetPrimaryVertex(fVertex);
1256 fHeader->SetInteractionTime(fTime+fEventTime);
1258 // Number of primaries
1259 fHeader->SetNProduced(fNprimaries);
1262 fHeader->SetEventWeight(fPythia->GetVINT(97));
1264 // Jets that have triggered
1266 //Need to store jets for b-jet studies too!
1267 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1270 Float_t jets[4][10];
1271 GetJets(njet, ntrig, jets);
1274 for (Int_t i = 0; i < ntrig; i++) {
1275 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1280 // Copy relevant information from external header, if present.
1285 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1286 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1288 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1291 exHeader->TriggerJet(i, uqJet);
1292 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1296 // Store quenching parameters
1299 Double_t z[4] = {0.};
1305 fPythia->GetQuenchingParameters(xp, yp, z);
1306 } else if (fQuench == 2){
1308 Double_t r1 = PARIMP.rb1;
1309 Double_t r2 = PARIMP.rb2;
1310 Double_t b = PARIMP.b1;
1311 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1312 Double_t phi = PARIMP.psib1;
1313 xp = r * TMath::Cos(phi);
1314 yp = r * TMath::Sin(phi);
1316 } else if (fQuench == 4) {
1320 AliFastGlauber::Instance()->GetSavedXY(xy);
1321 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1324 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1327 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1328 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1331 // Store pt^hard and cross-section
1332 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1333 ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
1336 // Store Event Weight
1337 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
1346 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1348 // Check the kinematic trigger condition
1351 eta[0] = jet1->Eta();
1352 eta[1] = jet2->Eta();
1354 phi[0] = jet1->Phi();
1355 phi[1] = jet2->Phi();
1357 pdg[0] = jet1->GetPdgCode();
1358 pdg[1] = jet2->GetPdgCode();
1359 Bool_t triggered = kFALSE;
1361 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1364 Float_t jets[4][10];
1366 // Use Pythia clustering on parton level to determine jet axis
1368 GetJets(njets, ntrig, jets);
1370 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1375 if (pdg[0] == kGamma) {
1379 //Check eta range first...
1380 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1381 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1383 //Eta is okay, now check phi range
1384 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1385 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1396 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1398 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1400 Bool_t checking = kFALSE;
1401 Int_t j, kcode, ks, km;
1402 Int_t nPartAcc = 0; //number of particles in the acceptance range
1403 Int_t numberOfAcceptedParticles = 1;
1404 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1405 Int_t npart = fParticles.GetEntriesFast();
1407 for (j = 0; j<npart; j++) {
1408 TParticle * jparticle = (TParticle *) fParticles.At(j);
1409 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1410 ks = jparticle->GetStatusCode();
1411 km = jparticle->GetFirstMother();
1413 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1416 if( numberOfAcceptedParticles <= nPartAcc){
1425 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1428 // Load event into Pythia Common Block
1431 Int_t npart = stack -> GetNprimary();
1435 (fPythia->GetPyjets())->N = npart;
1437 n0 = (fPythia->GetPyjets())->N;
1438 (fPythia->GetPyjets())->N = n0 + npart;
1442 for (Int_t part = 0; part < npart; part++) {
1443 TParticle *mPart = stack->Particle(part);
1445 Int_t kf = mPart->GetPdgCode();
1446 Int_t ks = mPart->GetStatusCode();
1447 Int_t idf = mPart->GetFirstDaughter();
1448 Int_t idl = mPart->GetLastDaughter();
1451 if (ks == 11 || ks == 12) {
1458 Float_t px = mPart->Px();
1459 Float_t py = mPart->Py();
1460 Float_t pz = mPart->Pz();
1461 Float_t e = mPart->Energy();
1462 Float_t m = mPart->GetCalcMass();
1465 (fPythia->GetPyjets())->P[0][part+n0] = px;
1466 (fPythia->GetPyjets())->P[1][part+n0] = py;
1467 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1468 (fPythia->GetPyjets())->P[3][part+n0] = e;
1469 (fPythia->GetPyjets())->P[4][part+n0] = m;
1471 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1472 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1473 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1474 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1475 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1479 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1482 // Load event into Pythia Common Block
1485 Int_t npart = stack -> GetEntries();
1489 (fPythia->GetPyjets())->N = npart;
1491 n0 = (fPythia->GetPyjets())->N;
1492 (fPythia->GetPyjets())->N = n0 + npart;
1496 for (Int_t part = 0; part < npart; part++) {
1497 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1498 if (!mPart) continue;
1500 Int_t kf = mPart->GetPdgCode();
1501 Int_t ks = mPart->GetStatusCode();
1502 Int_t idf = mPart->GetFirstDaughter();
1503 Int_t idl = mPart->GetLastDaughter();
1506 if (ks == 11 || ks == 12) {
1513 Float_t px = mPart->Px();
1514 Float_t py = mPart->Py();
1515 Float_t pz = mPart->Pz();
1516 Float_t e = mPart->Energy();
1517 Float_t m = mPart->GetCalcMass();
1520 (fPythia->GetPyjets())->P[0][part+n0] = px;
1521 (fPythia->GetPyjets())->P[1][part+n0] = py;
1522 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1523 (fPythia->GetPyjets())->P[3][part+n0] = e;
1524 (fPythia->GetPyjets())->P[4][part+n0] = m;
1526 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1527 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1528 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1529 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1530 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1535 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1538 // Calls the Pythia jet finding algorithm to find jets in the current event
1543 Int_t n = fPythia->GetN();
1547 fPythia->Pycell(njets);
1549 for (i = 0; i < njets; i++) {
1550 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1551 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1552 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1553 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1564 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1567 // Calls the Pythia clustering algorithm to find jets in the current event
1569 Int_t n = fPythia->GetN();
1572 if (fJetReconstruction == kCluster) {
1574 // Configure cluster algorithm
1576 fPythia->SetPARU(43, 2.);
1577 fPythia->SetMSTU(41, 1);
1579 // Call cluster algorithm
1581 fPythia->Pyclus(nJets);
1583 // Loading jets from common block
1589 fPythia->Pycell(nJets);
1593 for (i = 0; i < nJets; i++) {
1594 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1595 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1596 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1597 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1598 Float_t pt = TMath::Sqrt(px * px + py * py);
1599 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1600 Float_t theta = TMath::ATan2(pt,pz);
1601 Float_t et = e * TMath::Sin(theta);
1602 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1604 eta > fEtaMinJet && eta < fEtaMaxJet &&
1605 phi > fPhiMinJet && phi < fPhiMaxJet &&
1606 et > fEtMinJet && et < fEtMaxJet
1609 jets[0][nJetsTrig] = px;
1610 jets[1][nJetsTrig] = py;
1611 jets[2][nJetsTrig] = pz;
1612 jets[3][nJetsTrig] = e;
1614 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1616 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1621 void AliGenPythia::GetSubEventTime()
1623 // Calculates time of the next subevent
1626 TArrayF &array = *fEventsTime;
1627 fEventTime = array[fCurSubEvent++];
1629 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1633 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1635 // Is particle in Central Barrel acceptance?
1637 if( eta < fTriggerEta )
1643 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1645 // Is particle in EMCAL acceptance?
1646 // phi in degrees, etamin=-etamax
1647 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1654 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1656 // Is particle in PHOS acceptance?
1657 // Acceptance slightly larger considered.
1658 // phi in degrees, etamin=-etamax
1659 // iparticle is the index of the particle to be checked, for PHOS rotation case
1661 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1666 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1672 void AliGenPythia::RotatePhi(Bool_t& okdd)
1674 //Rotate event in phi to enhance events in PHOS acceptance
1676 if(fPHOSRotateCandidate < 0) return ;
1678 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1679 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1680 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1681 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1683 //calculate deltaphi
1684 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1685 Double_t phphi = ph->Phi();
1686 Double_t deltaphi = phiPHOS - phphi;
1690 //loop for all particles and produce the phi rotation
1691 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1692 Double_t oldphi, newphi;
1693 Double_t newVx, newVy, r, vZ, time;
1694 Double_t newPx, newPy, pt, pz, e;
1695 for(Int_t i=0; i< np; i++) {
1696 TParticle* iparticle = (TParticle *) fParticles.At(i);
1697 oldphi = iparticle->Phi();
1698 newphi = oldphi + deltaphi;
1699 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1700 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1703 newVx = r * TMath::Cos(newphi);
1704 newVy = r * TMath::Sin(newphi);
1705 vZ = iparticle->Vz(); // don't transform
1706 time = iparticle->T(); // don't transform
1708 pt = iparticle->Pt();
1709 newPx = pt * TMath::Cos(newphi);
1710 newPy = pt * TMath::Sin(newphi);
1711 pz = iparticle->Pz(); // don't transform
1712 e = iparticle->Energy(); // don't transform
1715 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1716 iparticle->SetMomentum(newPx, newPy, pz, e);
1718 } //end particle loop
1720 // now let's check that we put correctly the candidate photon in PHOS
1721 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1722 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1723 if(IsInPHOS(phi,eta,-1))
1726 // reset the value for next event
1727 fPHOSRotateCandidate = -1;
1732 Bool_t AliGenPythia::CheckDiffraction()
1734 // use this method only with Perugia-0 tune!
1738 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1744 Double_t y2 = -1e10;
1746 const Int_t kNstable=20;
1747 const Int_t pdgStable[20] = {
1750 12, // Electron Neutrino
1752 14, // Muon Neutrino
1763 3112, // Sigma Minus
1770 for (Int_t i = 0; i < np; i++) {
1771 TParticle * part = (TParticle *) fParticles.At(i);
1773 Int_t statusCode = part->GetStatusCode();
1775 // Initial state particle
1776 if (statusCode != 1)
1779 Int_t pdg = TMath::Abs(part->GetPdgCode());
1780 Bool_t isStable = kFALSE;
1781 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1782 if (pdg == pdgStable[i1]) {
1790 Double_t y = part->Y();
1804 if(iPart1<0 || iPart2<0) return kFALSE;
1809 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1810 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1812 Int_t pdg1 = part1->GetPdgCode();
1813 Int_t pdg2 = part2->GetPdgCode();
1817 if (pdg1 == 2212 && pdg2 == 2212)
1825 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1828 else if (pdg1 == 2212)
1830 else if (pdg2 == 2212)
1839 TParticle * part = (TParticle *) fParticles.At(iPart);
1840 Double_t E= part->Energy();
1841 Double_t P= part->P();
1842 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1843 if(M2<0) return kFALSE;
1847 Double_t Mmin, Mmax, wSD, wDD, wND;
1848 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1850 if(M>-1 && M<Mmin) return kFALSE;
1853 Int_t procType=fPythia->GetMSTI(1);
1855 if(procType== 94) proc0=1;
1856 if(procType== 92 || procType== 93) proc0=0;
1860 else if(proc0==1) proc=1;
1862 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1863 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1866 // if(proc==1 || proc==2) return kFALSE;
1869 if(proc0!=0) fProcDiff = procType;
1870 else fProcDiff = 95;
1874 if(wSD<0) AliError("wSD<0 ! \n");
1876 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1878 // printf("iPart = %d\n", iPart);
1880 if(iPart==iPart1) fProcDiff=93;
1881 else if(iPart==iPart2) fProcDiff=92;
1883 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1892 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1893 Double_t &wSD, Double_t &wDD, Double_t &wND)
1897 if(TMath::Abs(fEnergyCMS-900)<1 ){
1899 const Int_t nbin=400;
1901 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1902 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1903 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1904 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1905 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1906 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1907 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1908 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1909 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1910 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1911 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1912 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1913 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1914 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1915 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1916 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1917 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1918 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1919 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1920 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1921 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1922 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1923 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1924 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1925 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1926 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1927 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1928 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1929 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1930 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1931 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1932 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1933 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1934 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1935 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1936 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1937 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1938 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1939 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1940 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1941 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1942 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1943 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1944 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1945 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1946 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1947 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1948 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1949 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1950 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1951 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1952 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1953 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1954 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
1955 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
1956 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
1957 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
1958 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
1959 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
1960 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
1961 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
1962 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
1963 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
1964 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
1965 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
1966 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
1967 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
1969 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
1970 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
1971 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
1972 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
1973 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
1974 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
1975 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
1976 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
1977 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
1978 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
1979 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
1980 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
1981 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
1982 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
1983 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
1984 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
1985 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
1986 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
1987 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
1988 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
1989 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
1990 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
1991 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
1992 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
1993 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
1994 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
1995 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
1996 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
1997 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
1998 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
1999 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
2000 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
2001 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
2002 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
2003 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
2004 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
2005 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
2006 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2007 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2008 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2009 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2010 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2011 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2012 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2013 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2014 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2015 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2016 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2017 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2018 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2019 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2020 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2021 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2022 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2023 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2024 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2025 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2026 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2027 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2028 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2029 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2030 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2031 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2032 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2033 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2034 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2035 0.386112, 0.364314, 0.434375, 0.334629};
2042 if(M<Mmin || M>Mmax) return kTRUE;
2045 for(Int_t i=1; i<=nbin; i++)
2048 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2054 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2056 const Int_t nbin=400;
2058 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2059 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2060 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2061 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2062 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2063 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2064 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2065 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2066 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2067 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2068 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2069 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2070 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2071 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2072 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2073 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2074 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2075 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2076 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2077 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2078 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2079 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2080 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2081 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2082 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2083 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2084 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2085 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2086 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2087 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2088 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2089 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2090 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2091 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2092 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2093 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2094 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2095 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2096 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2097 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2098 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2099 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2100 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2101 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2102 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2103 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2104 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2105 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2106 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2107 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2108 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2109 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2110 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2111 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2112 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2113 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2114 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2115 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2116 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2117 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2118 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2119 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2120 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2121 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2122 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2123 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2124 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2126 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2127 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2128 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2129 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2130 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2131 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2132 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2133 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2134 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2135 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2136 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2137 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2138 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2139 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2140 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2141 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2142 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2143 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2144 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2145 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2146 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2147 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2148 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2149 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2150 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2151 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2152 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2153 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2154 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2155 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2156 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2157 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2158 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2159 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2160 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2161 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2162 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2163 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2164 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2165 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2166 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2167 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2168 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2169 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2170 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2171 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2172 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2173 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2174 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2175 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2176 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2177 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2178 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2179 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2180 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2181 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2182 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2183 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2184 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2185 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2186 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2187 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2188 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2189 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2190 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2191 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2192 0.201712, 0.242225, 0.255565, 0.258738};
2199 if(M<Mmin || M>Mmax) return kTRUE;
2202 for(Int_t i=1; i<=nbin; i++)
2205 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2213 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2214 const Int_t nbin=400;
2216 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2217 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2218 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2219 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2220 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2221 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2222 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2223 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2224 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2225 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2226 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2227 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2228 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2229 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2230 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2231 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2232 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2233 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2234 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2235 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2236 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2237 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2238 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2239 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2240 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2241 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2242 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2243 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2244 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2245 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2246 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2247 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2248 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2249 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2250 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2251 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2252 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2253 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2254 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2255 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2256 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2257 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2258 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2259 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2260 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2261 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2262 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2263 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2264 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2265 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2266 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2267 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2268 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2269 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2270 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2271 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2272 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2273 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2274 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2275 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2276 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2277 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2278 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2279 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2280 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2281 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2282 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2284 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2285 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2286 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2287 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2288 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2289 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2290 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2291 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2292 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2293 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2294 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2295 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2296 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2297 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2298 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2299 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2300 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2301 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2302 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2303 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2304 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2305 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2306 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2307 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2308 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2309 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2310 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2311 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2312 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2313 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2314 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2315 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2316 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2317 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2318 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2319 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2320 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2321 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2322 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2323 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2324 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2325 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2326 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2327 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2328 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2329 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2330 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2331 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2332 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2333 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2334 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2335 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2336 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2337 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2338 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2339 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2340 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2341 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2342 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2343 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2344 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2345 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2346 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2347 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2348 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2349 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2350 0.175006, 0.223482, 0.202706, 0.218108};
2358 if(M<Mmin || M>Mmax) return kTRUE;
2361 for(Int_t i=1; i<=nbin; i++)
2364 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2374 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2376 // Check if this is a heavy flavor decay product
2377 TParticle * part = (TParticle *) fParticles.At(ipart);
2378 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2379 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2382 if (mfl >= 4 && mfl < 6) return kTRUE;
2384 Int_t imo = part->GetFirstMother()-1;
2385 TParticle* pm = part;
2387 // Heavy flavor hadron produced by generator
2389 pm = (TParticle*)fParticles.At(imo);
2390 mpdg = TMath::Abs(pm->GetPdgCode());
2391 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2392 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2393 imo = pm->GetFirstMother()-1;
2398 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2400 // check the eta/phi correspond to the detectors acceptance
2401 // iparticle is the index of the particle to be checked, for PHOS rotation case
2402 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2403 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2404 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2408 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2410 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2411 // implemented primaryly for kPyJets, but extended to any kind of process.
2413 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2414 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2417 for (Int_t i=0; i< np; i++) {
2419 TParticle* iparticle = (TParticle *) fParticles.At(i);
2421 Int_t pdg = iparticle->GetPdgCode();
2422 Int_t status = iparticle->GetStatusCode();
2423 Int_t imother = iparticle->GetFirstMother() - 1;
2425 TParticle* pmother = 0x0;
2426 Int_t momStatus = -1;
2429 pmother = (TParticle *) fParticles.At(imother);
2430 momStatus = pmother->GetStatusCode();
2431 momPdg = pmother->GetPdgCode();
2437 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2440 if (fHadronInCalo && status == 1)
2442 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2443 // (in case neutral mesons were declared stable)
2447 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2451 //Fragmentation photon
2452 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2454 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2457 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2459 if( momStatus == 11)
2461 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2462 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2463 ok = kTRUE ; // photon from hadron decay
2465 //In case only decays from pi0 or eta requested
2466 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2467 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2471 // Pi0 or Eta particle
2472 else if ((fPi0InCalo || fEtaInCalo))
2474 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2476 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2478 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2481 else if (fEtaInCalo && pdg == 221)
2483 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2490 // Check that the selected particle is in the calorimeter acceptance
2492 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2494 //Just check if the selected particle falls in the acceptance
2495 if(!fForceNeutralMeson2PhotonDecay )
2497 //printf("\t Check acceptance! \n");
2498 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2499 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2501 if(CheckDetectorAcceptance(phi,eta,i))
2504 AliDebug(1,Form("Selected trigger pdg %d, status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
2505 //printf("\t Accept \n");
2510 //Mesons have several decay modes, select only those decaying into 2 photons
2511 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2513 // In case we want the pi0/eta trigger,
2514 // check the decay mode (2 photons)
2516 //printf("\t Force decay 2 gamma\n");
2518 Int_t ndaughters = iparticle->GetNDaughters();
2519 if(ndaughters != 2){
2524 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2525 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2531 //iparticle->Print();
2535 Int_t pdgD1 = d1->GetPdgCode();
2536 Int_t pdgD2 = d2->GetPdgCode();
2537 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2538 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2540 if(pdgD1 != 22 || pdgD2 != 22){
2545 //printf("\t accept decay\n");
2547 //Trigger on the meson, not on the daughter
2548 if(!fDecayPhotonInCalo){
2550 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2551 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2553 if(CheckDetectorAcceptance(phi,eta,i))
2555 //printf("\t Accept meson pdg %d\n",pdg);
2557 AliDebug(1,Form("Selected trigger pdg %d (decay), status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
2565 //printf("Check daughters acceptance\n");
2567 //Trigger on the meson daughters
2569 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2570 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2571 if(d1->Pt() > fTriggerParticleMinPt)
2573 //printf("\t Check acceptance photon 1! \n");
2574 if(CheckDetectorAcceptance(phi,eta,i))
2576 //printf("\t Accept Photon 1\n");
2578 AliDebug(1,Form("Selected trigger pdg %d (decay), status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
2586 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2587 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2589 if(d2->Pt() > fTriggerParticleMinPt)
2591 //printf("\t Check acceptance photon 2! \n");
2592 if(CheckDetectorAcceptance(phi,eta,i))
2594 //printf("\t Accept Photon 2\n");
2596 AliDebug(1,Form("Selected trigger pdg %d (decay), status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
2602 } // force 2 photon daughters in pi0/eta decays
2604 } else ok = kFALSE; // check acceptance
2608 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2609 // A particle passing all trigger conditions except phi position in PHOS, is used as reference