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"
50 ClassImp(AliGenPythia)
53 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.),
197 fHadronisation(kTRUE),
198 fPatchOmegaDalitz(0),
200 fReadFromFile(kFALSE),
213 fDecayer(new AliDecayerPythia()),
214 fDebugEventFirst(-1),
221 fPhiMaxJet(2.* TMath::Pi()),
222 fJetReconstruction(kCell),
226 fPhiMaxGamma(2. * TMath::Pi()),
230 fPycellThreshold(0.),
232 fPycellMinEtJet(10.),
233 fPycellMaxRadius(1.),
234 fStackFillOpt(kFlavorSelection),
236 fFragmentation(kTRUE),
238 fUseNuclearPDF(kFALSE),
239 fUseLorentzBoost(kTRUE),
247 fTriggerMultiplicity(0),
248 fTriggerMultiplicityEta(0),
249 fTriggerMultiplicityPtMin(0),
250 fCountMode(kCountAll),
255 fFragPhotonInCalo(kFALSE),
256 fHadronInCalo(kFALSE) ,
259 fPhotonInCalo(kFALSE), // not in use
260 fDecayPhotonInCalo(kFALSE),
261 fForceNeutralMeson2PhotonDecay(kFALSE),
263 fEleInEMCAL(kFALSE), // not in use
264 fCheckBarrel(kFALSE),
267 fCheckPHOSeta(kFALSE),
268 fPHOSRotateCandidate(-1),
269 fTriggerParticleMinPt(0),
270 fPhotonMinPt(0), // not in use
271 fElectronMinPt(0), // not in use
281 // default charm production at 5. 5 TeV
283 // structure function GRVHO
287 fTitle= "Particle Generator using PYTHIA";
289 // Set random number generator
290 if (!AliPythiaRndm::GetPythiaRandom())
291 AliPythiaRndm::SetPythiaRandom(GetRandom());
294 AliGenPythia::~AliGenPythia()
297 if(fEventsTime) delete fEventsTime;
300 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
302 // Generate pileup using user specified rate
303 fInteractionRate = rate;
304 fTimeWindow = timewindow;
308 void AliGenPythia::GeneratePileup()
310 // Generate sub events time for pileup
312 if(fInteractionRate == 0.) {
313 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
317 Int_t npart = NumberParticles();
319 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
323 if(fEventsTime) delete fEventsTime;
324 fEventsTime = new TArrayF(npart);
325 TArrayF &array = *fEventsTime;
326 for(Int_t ipart = 0; ipart < npart; ipart++)
329 Float_t eventtime = 0.;
332 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
333 if(eventtime > fTimeWindow) break;
334 array.Set(array.GetSize()+1);
335 array[array.GetSize()-1] = eventtime;
341 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
342 if(TMath::Abs(eventtime) > fTimeWindow) break;
343 array.Set(array.GetSize()+1);
344 array[array.GetSize()-1] = eventtime;
347 SetNumberParticles(fEventsTime->GetSize());
350 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
351 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
353 // Set pycell parameters
354 fPycellEtaMax = etamax;
357 fPycellThreshold = thresh;
358 fPycellEtSeed = etseed;
359 fPycellMinEtJet = minet;
360 fPycellMaxRadius = r;
365 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
367 // Set a range of event numbers, for which a table
368 // of generated particle will be printed
369 fDebugEventFirst = eventFirst;
370 fDebugEventLast = eventLast;
371 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
374 void AliGenPythia::Init()
378 SetMC(AliPythia::Instance());
379 fPythia=(AliPythia*) fMCEvGen;
382 fParentWeight=1./Float_t(fNpart);
386 fPythia->SetCKIN(3,fPtHardMin);
387 fPythia->SetCKIN(4,fPtHardMax);
388 fPythia->SetCKIN(7,fYHardMin);
389 fPythia->SetCKIN(8,fYHardMax);
391 if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
394 fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
396 if (fFragmentation) {
397 fPythia->SetMSTP(111,1);
399 fPythia->SetMSTP(111,0);
403 // initial state radiation
404 fPythia->SetMSTP(61,fGinit);
405 // final state radiation
406 fPythia->SetMSTP(71,fGfinal);
407 //color reconnection strength
408 if(fCRoff==1)fPythia->SetMSTP(95,0);
411 fPythia->SetMSTP(91,1);
412 fPythia->SetPARP(91,fPtKick);
413 fPythia->SetPARP(93, 4. * fPtKick);
415 fPythia->SetMSTP(91,0);
418 if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
421 fRL = AliRunLoader::Open(fkFileName, "Partons");
422 fRL->LoadKinematics();
428 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
429 // Forward Paramters to the AliPythia object
430 fDecayer->SetForceDecay(fForceDecay);
431 // Switch off Heavy Flavors on request
433 // Maximum number of quark flavours used in pdf
434 fPythia->SetMSTP(58, 3);
435 // Maximum number of flavors that can be used in showers
436 fPythia->SetMSTJ(45, 3);
437 // Switch off g->QQbar splitting in decay table
438 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
444 // Parent and Children Selection
447 case kPyOldUEQ2ordered:
448 case kPyOldUEQ2ordered2:
452 case kPyCharmUnforced:
453 case kPyCharmPbPbMNR:
456 case kPyCharmppMNRwmi:
458 fParentSelect[0] = 411;
459 fParentSelect[1] = 421;
460 fParentSelect[2] = 431;
461 fParentSelect[3] = 4122;
462 fParentSelect[4] = 4232;
463 fParentSelect[5] = 4132;
464 fParentSelect[6] = 4332;
470 fParentSelect[0] = 421;
473 case kPyDPlusPbPbMNR:
476 fParentSelect[0] = 411;
479 case kPyDPlusStrangePbPbMNR:
480 case kPyDPlusStrangepPbMNR:
481 case kPyDPlusStrangeppMNR:
482 fParentSelect[0] = 431;
485 case kPyLambdacppMNR:
486 fParentSelect[0] = 4122;
491 case kPyBeautyPbPbMNR:
492 case kPyBeautypPbMNR:
494 case kPyBeautyppMNRwmi:
496 fParentSelect[0]= 511;
497 fParentSelect[1]= 521;
498 fParentSelect[2]= 531;
499 fParentSelect[3]= 5122;
500 fParentSelect[4]= 5132;
501 fParentSelect[5]= 5232;
502 fParentSelect[6]= 5332;
505 case kPyBeautyUnforced:
506 fParentSelect[0] = 511;
507 fParentSelect[1] = 521;
508 fParentSelect[2] = 531;
509 fParentSelect[3] = 5122;
510 fParentSelect[4] = 5132;
511 fParentSelect[5] = 5232;
512 fParentSelect[6] = 5332;
517 fParentSelect[0] = 443;
520 case kPyMbAtlasTuneMC09:
522 case kPyMbWithDirectPhoton:
534 case kPyMBRSingleDiffraction:
535 case kPyMBRDoubleDiffraction:
536 case kPyMBRCentralDiffraction:
541 // JetFinder for Trigger
543 // Configure detector (EMCAL like)
545 fPythia->SetPARU(51, fPycellEtaMax);
546 fPythia->SetMSTU(51, fPycellNEta);
547 fPythia->SetMSTU(52, fPycellNPhi);
549 // Configure Jet Finder
551 fPythia->SetPARU(58, fPycellThreshold);
552 fPythia->SetPARU(52, fPycellEtSeed);
553 fPythia->SetPARU(53, fPycellMinEtJet);
554 fPythia->SetPARU(54, fPycellMaxRadius);
555 fPythia->SetMSTU(54, 2);
557 // This counts the total number of calls to Pyevnt() per run.
568 // Reset Lorentz boost if demanded
569 if(!fUseLorentzBoost) {
571 Warning("Init","Demand to discard Lorentz boost.\n");
578 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
580 fPythia->SetPARJ(200, 0.0);
581 fPythia->SetPARJ(199, 0.0);
582 fPythia->SetPARJ(198, 0.0);
583 fPythia->SetPARJ(197, 0.0);
586 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
589 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
592 // Nestor's change of the splittings
593 fPythia->SetPARJ(200, 0.8);
594 fPythia->SetMSTJ(41, 1); // QCD radiation only
595 fPythia->SetMSTJ(42, 2); // angular ordering
596 fPythia->SetMSTJ(44, 2); // option to run alpha_s
597 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
598 fPythia->SetMSTJ(50, 0); // No coherence in first branching
599 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
600 } else if (fQuench == 4) {
601 // Armesto-Cunqueiro-Salgado change of the splittings.
602 AliFastGlauber* glauber = AliFastGlauber::Instance();
604 //read and store transverse almonds corresponding to differnt
606 glauber->SetCentralityClass(0.,0.1);
607 fPythia->SetPARJ(200, 1.);
608 fPythia->SetPARJ(198, fQhat);
609 fPythia->SetPARJ(199, fLength);
610 fPythia->SetMSTJ(42, 2); // angular ordering
611 fPythia->SetMSTJ(44, 2); // option to run alpha_s
612 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
615 if ( AliLog::GetDebugLevel("","AliGenPythia") >= 1 ) {
621 void AliGenPythia::Generate()
623 // Generate one event
624 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
625 fDecayer->ForceDecay();
627 Double_t polar[3] = {0,0,0};
628 Double_t origin[3] = {0,0,0};
630 // converts from mm/c to s
631 const Float_t kconv=0.001/2.999792458e8;
641 // Set collision vertex position
642 if (fVertexSmear == kPerEvent) Vertex();
651 // Switch hadronisation off
653 fPythia->SetMSTJ(1, 0);
657 // Quenching comes through medium-modified splitting functions.
658 AliFastGlauber::Instance()->GetRandomBHard(bimp);
659 fPythia->SetPARJ(197, bimp);
664 // Either produce new event or read partons from file
666 if (!fReadFromFile) {
672 fNpartons = fPythia->GetN();
674 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
675 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
677 LoadEvent(fRL->Stack(), 0 , 1);
682 // Run quenching routine
686 } else if (fQuench == 2){
687 fPythia->Pyquen(208., 0, 0.);
688 } else if (fQuench == 3) {
689 // Quenching is via multiplicative correction of the splittings
693 // Switch hadronisation on
695 if (fHadronisation) {
696 fPythia->SetMSTJ(1, 1);
698 // .. and perform hadronisation
699 // printf("Calling hadronisation %d\n", fPythia->GetN());
701 if (fPatchOmegaDalitz) {
702 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
704 fPythia->DalitzDecays();
705 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
710 fPythia->ImportParticles(&fParticles,"All");
712 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
713 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
721 Int_t np = fParticles.GetEntriesFast();
723 if (np == 0) continue;
727 Int_t* pParent = new Int_t[np];
728 Int_t* pSelected = new Int_t[np];
729 Int_t* trackIt = new Int_t[np];
730 for (i = 0; i < np; i++) {
736 Int_t nc = 0; // Total n. of selected particles
737 Int_t nParents = 0; // Selected parents
738 Int_t nTkbles = 0; // Trackable particles
739 if (fProcess != kPyMbDefault &&
741 fProcess != kPyMbAtlasTuneMC09 &&
742 fProcess != kPyMbWithDirectPhoton &&
743 fProcess != kPyJets &&
744 fProcess != kPyDirectGamma &&
745 fProcess != kPyMbNonDiffr &&
746 fProcess != kPyMbMSEL1 &&
749 fProcess != kPyZgamma &&
750 fProcess != kPyCharmppMNRwmi &&
751 fProcess != kPyBeautyppMNRwmi &&
752 fProcess != kPyBeautyJets &&
753 fProcess != kPyWPWHG &&
754 fProcess != kPyJetsPWHG &&
755 fProcess != kPyCharmPWHG &&
756 fProcess != kPyBeautyPWHG) {
758 for (i = 0; i < np; i++) {
759 TParticle* iparticle = (TParticle *) fParticles.At(i);
760 Int_t ks = iparticle->GetStatusCode();
761 kf = CheckPDGCode(iparticle->GetPdgCode());
762 // No initial state partons
763 if (ks==21) continue;
765 // Heavy Flavor Selection
772 if (kfl > 100000) kfl %= 100000;
773 if (kfl > 10000) kfl %= 10000;
775 if (kfl > 10) kfl/=100;
777 if (kfl > 10) kfl/=10;
778 Int_t ipa = iparticle->GetFirstMother()-1;
781 // Establish mother daughter relation between heavy quarks and mesons
783 if (kf >= fFlavorSelect && kf <= 6) {
784 Int_t idau = iparticle->GetFirstDaughter() - 1;
786 TParticle* daughter = (TParticle *) fParticles.At(idau);
787 Int_t pdgD = daughter->GetPdgCode();
788 if (pdgD == 91 || pdgD == 92) {
789 Int_t jmin = daughter->GetFirstDaughter() - 1;
790 Int_t jmax = daughter->GetLastDaughter() - 1;
791 for (Int_t jp = jmin; jp <= jmax; jp++)
792 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
793 } // is string or cluster
799 TParticle * mother = (TParticle *) fParticles.At(ipa);
800 kfMo = TMath::Abs(mother->GetPdgCode());
803 // What to keep in Stack?
804 Bool_t flavorOK = kFALSE;
805 Bool_t selectOK = kFALSE;
807 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
809 if (kfl > fFlavorSelect) {
813 if (kfl == fFlavorSelect) flavorOK = kTRUE;
815 switch (fStackFillOpt) {
817 case kFlavorSelection:
820 case kParentSelection:
821 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
824 if (flavorOK && selectOK) {
826 // Heavy flavor hadron or quark
828 // Kinematic seletion on final state heavy flavor mesons
829 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
834 if (ParentSelected(kf)) ++nParents; // Update parent count
835 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
837 // Kinematic seletion on decay products
838 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
839 && !KinematicSelection(iparticle, 1))
845 // Select if mother was selected and is not tracked
847 if (pSelected[ipa] &&
848 !trackIt[ipa] && // mother will be tracked ?
849 kfMo != 5 && // mother is b-quark, don't store fragments
850 kfMo != 4 && // mother is c-quark, don't store fragments
851 kf != 92) // don't store string
854 // Semi-stable or de-selected: diselect decay products:
857 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
859 Int_t ipF = iparticle->GetFirstDaughter();
860 Int_t ipL = iparticle->GetLastDaughter();
861 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
863 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
864 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
867 if (pSelected[i] == -1) pSelected[i] = 0;
868 if (!pSelected[i]) continue;
869 // Count quarks only if you did not include fragmentation
870 if (fFragmentation && kf <= 10) continue;
873 // Decision on tracking
876 // Track final state particle
877 if (ks == 1) trackIt[i] = 1;
878 // Track semi-stable particles
879 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
880 // Track particles selected by process if undecayed.
881 if (fForceDecay == kNoDecay) {
882 if (ParentSelected(kf)) trackIt[i] = 1;
884 if (ParentSelected(kf)) trackIt[i] = 0;
886 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
890 } // particle selection loop
892 for (i = 0; i<np; i++) {
893 if (!pSelected[i]) continue;
894 TParticle * iparticle = (TParticle *) fParticles.At(i);
895 kf = CheckPDGCode(iparticle->GetPdgCode());
896 Int_t ks = iparticle->GetStatusCode();
897 p[0] = iparticle->Px();
898 p[1] = iparticle->Py();
899 p[2] = iparticle->Pz();
900 p[3] = iparticle->Energy();
902 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
903 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
904 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
906 Float_t tof = fTime + kconv*iparticle->T();
907 Int_t ipa = iparticle->GetFirstMother()-1;
908 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
910 PushTrack(fTrackIt*trackIt[i], iparent, kf,
911 p[0], p[1], p[2], p[3],
912 origin[0], origin[1], origin[2], tof,
913 polar[0], polar[1], polar[2],
914 kPPrimary, nt, 1., ks);
931 switch (fCountMode) {
933 // printf(" Count all \n");
937 // printf(" Count parents \n");
940 case kCountTrackables:
941 // printf(" Count trackable \n");
945 if (jev >= fNpart || fNpart == -1) {
946 fKineBias=Float_t(fNpart)/Float_t(fTrials);
948 fQ += fPythia->GetVINT(51);
949 fX1 += fPythia->GetVINT(41);
950 fX2 += fPythia->GetVINT(42);
951 fTrialsRun += fTrials;
958 SetHighWaterMark(nt);
959 // adjust weight due to kinematic selection
962 fXsection=fPythia->GetPARI(1);
965 Int_t AliGenPythia::GenerateMB()
968 // Min Bias selection and other global selections
970 Int_t i, kf, nt, iparent;
973 Double_t polar[3] = {0,0,0};
974 Double_t origin[3] = {0,0,0};
975 // converts from mm/c to s
976 const Float_t kconv=0.001/2.999792458e8;
979 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
983 Int_t* pParent = new Int_t[np];
984 for (i=0; i< np; i++) pParent[i] = -1;
985 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
987 TParticle* jet1 = (TParticle *) fParticles.At(6);
988 TParticle* jet2 = (TParticle *) fParticles.At(7);
990 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
997 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
998 // implemented primaryly for kPyJets, but extended to any kind of process.
999 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
1000 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
1001 Bool_t ok = TriggerOnSelectedParticles(np);
1009 // Check for diffraction
1011 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1012 if(!CheckDiffraction()) {
1019 // Check for minimum multiplicity
1020 if (fTriggerMultiplicity > 0) {
1021 Int_t multiplicity = 0;
1022 for (i = 0; i < np; i++) {
1023 TParticle * iparticle = (TParticle *) fParticles.At(i);
1025 Int_t statusCode = iparticle->GetStatusCode();
1027 // Initial state particle
1028 if (statusCode != 1)
1031 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1034 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1037 TParticlePDG* pdgPart = iparticle->GetPDG();
1038 if (pdgPart && pdgPart->Charge() == 0)
1044 if (multiplicity < fTriggerMultiplicity) {
1048 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1052 if (fTriggerParticle) {
1053 Bool_t triggered = kFALSE;
1054 for (i = 0; i < np; i++) {
1055 TParticle * iparticle = (TParticle *) fParticles.At(i);
1056 kf = CheckPDGCode(iparticle->GetPdgCode());
1057 if (kf != fTriggerParticle) continue;
1058 if (iparticle->Pt() == 0.) continue;
1059 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1060 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1071 // Check if there is a ccbar or bbbar pair with at least one of the two
1072 // in fYMin < y < fYMax
1074 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1075 TParticle *partCheck;
1077 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1078 Bool_t theChild=kFALSE;
1079 Bool_t triggered=kFALSE;
1081 Int_t pdg,mpdg,mpdgUpperFamily;
1082 for(i=0; i<np; i++) {
1083 partCheck = (TParticle*)fParticles.At(i);
1084 pdg = partCheck->GetPdgCode();
1085 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1086 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1087 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1088 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1089 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1091 if(fTriggerParticle) {
1092 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1094 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1095 Int_t mi = partCheck->GetFirstMother() - 1;
1097 mother = (TParticle*)fParticles.At(mi);
1098 mpdg=TMath::Abs(mother->GetPdgCode());
1099 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1100 if ( ParentSelected(mpdg) ||
1101 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1102 if (KinematicSelection(partCheck,1)) {
1108 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1112 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1116 if(fTriggerParticle && !triggered) { // particle requested is not produced
1123 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1125 fProcess == kPyWPWHG ||
1128 fProcess == kPyZgamma ||
1129 fProcess == kPyMbDefault ||
1130 fProcess == kPyMb ||
1131 fProcess == kPyMbAtlasTuneMC09 ||
1132 fProcess == kPyMbWithDirectPhoton ||
1133 fProcess == kPyMbNonDiffr)
1134 && (fCutOnChild == 1) ) {
1135 if ( !CheckKinematicsOnChild() ) {
1142 for (i = 0; i < np; i++) {
1144 TParticle * iparticle = (TParticle *) fParticles.At(i);
1145 kf = CheckPDGCode(iparticle->GetPdgCode());
1146 Int_t ks = iparticle->GetStatusCode();
1147 Int_t km = iparticle->GetFirstMother();
1149 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1150 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1154 if (ks == 1) trackIt = 1;
1155 Int_t ipa = iparticle->GetFirstMother()-1;
1157 iparent = (ipa > -1) ? pParent[ipa] : -1;
1160 // store track information
1161 p[0] = iparticle->Px();
1162 p[1] = iparticle->Py();
1163 p[2] = iparticle->Pz();
1164 p[3] = iparticle->Energy();
1167 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1168 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1169 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1171 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1173 PushTrack(fTrackIt*trackIt, iparent, kf,
1174 p[0], p[1], p[2], p[3],
1175 origin[0], origin[1], origin[2], tof,
1176 polar[0], polar[1], polar[2],
1177 kPPrimary, nt, 1., ks);
1181 SetHighWaterMark(nt);
1183 } // select particle
1192 void AliGenPythia::FinishRun()
1194 // Print x-section summary
1203 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1204 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1207 void AliGenPythia::AdjustWeights() const
1209 // Adjust the weights after generation of all events
1213 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1214 for (Int_t i=0; i<ntrack; i++) {
1215 part= gAlice->GetMCApp()->Particle(i);
1216 part->SetWeight(part->GetWeight()*fKineBias);
1221 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1223 // Treat protons as inside nuclei with mass numbers a1 and a2
1227 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1228 fUseNuclearPDF = kTRUE;
1233 void AliGenPythia::MakeHeader()
1236 // Make header for the simulated event
1239 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1240 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1243 // Builds the event header, to be called after each event
1244 if (fHeader) delete fHeader;
1245 fHeader = new AliGenPythiaEventHeader("Pythia");
1249 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1250 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1251 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1254 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1257 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1260 fHeader->SetPrimaryVertex(fVertex);
1261 fHeader->SetInteractionTime(fTime+fEventTime);
1263 // Number of primaries
1264 fHeader->SetNProduced(fNprimaries);
1267 fHeader->SetEventWeight(fPythia->GetVINT(97));
1269 // Jets that have triggered
1271 //Need to store jets for b-jet studies too!
1272 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1275 Float_t jets[4][10];
1276 GetJets(njet, ntrig, jets);
1279 for (Int_t i = 0; i < ntrig; i++) {
1280 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1285 // Copy relevant information from external header, if present.
1290 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1291 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1293 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1296 exHeader->TriggerJet(i, uqJet);
1297 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1301 // Store quenching parameters
1304 Double_t z[4] = {0.};
1310 fPythia->GetQuenchingParameters(xp, yp, z);
1311 } else if (fQuench == 2){
1313 Double_t r1 = PARIMP.rb1;
1314 Double_t r2 = PARIMP.rb2;
1315 Double_t b = PARIMP.b1;
1316 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1317 Double_t phi = PARIMP.psib1;
1318 xp = r * TMath::Cos(phi);
1319 yp = r * TMath::Sin(phi);
1321 } else if (fQuench == 4) {
1325 AliFastGlauber::Instance()->GetSavedXY(xy);
1326 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1329 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1332 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1333 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1336 // Store pt^hard and cross-section
1337 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1338 ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
1341 // Store Event Weight
1342 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
1351 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1353 // Check the kinematic trigger condition
1356 eta[0] = jet1->Eta();
1357 eta[1] = jet2->Eta();
1359 phi[0] = jet1->Phi();
1360 phi[1] = jet2->Phi();
1362 pdg[0] = jet1->GetPdgCode();
1363 pdg[1] = jet2->GetPdgCode();
1364 Bool_t triggered = kFALSE;
1366 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1369 Float_t jets[4][10];
1371 // Use Pythia clustering on parton level to determine jet axis
1373 GetJets(njets, ntrig, jets);
1375 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1380 if (pdg[0] == kGamma) {
1384 //Check eta range first...
1385 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1386 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1388 //Eta is okay, now check phi range
1389 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1390 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1401 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1403 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1405 Bool_t checking = kFALSE;
1406 Int_t j, kcode, ks, km;
1407 Int_t nPartAcc = 0; //number of particles in the acceptance range
1408 Int_t numberOfAcceptedParticles = 1;
1409 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1410 Int_t npart = fParticles.GetEntriesFast();
1412 for (j = 0; j<npart; j++) {
1413 TParticle * jparticle = (TParticle *) fParticles.At(j);
1414 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1415 ks = jparticle->GetStatusCode();
1416 km = jparticle->GetFirstMother();
1418 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1421 if( numberOfAcceptedParticles <= nPartAcc){
1430 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1433 // Load event into Pythia Common Block
1436 Int_t npart = stack -> GetNprimary();
1440 (fPythia->GetPyjets())->N = npart;
1442 n0 = (fPythia->GetPyjets())->N;
1443 (fPythia->GetPyjets())->N = n0 + npart;
1447 for (Int_t part = 0; part < npart; part++) {
1448 TParticle *mPart = stack->Particle(part);
1450 Int_t kf = mPart->GetPdgCode();
1451 Int_t ks = mPart->GetStatusCode();
1452 Int_t idf = mPart->GetFirstDaughter();
1453 Int_t idl = mPart->GetLastDaughter();
1456 if (ks == 11 || ks == 12) {
1463 Float_t px = mPart->Px();
1464 Float_t py = mPart->Py();
1465 Float_t pz = mPart->Pz();
1466 Float_t e = mPart->Energy();
1467 Float_t m = mPart->GetCalcMass();
1470 (fPythia->GetPyjets())->P[0][part+n0] = px;
1471 (fPythia->GetPyjets())->P[1][part+n0] = py;
1472 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1473 (fPythia->GetPyjets())->P[3][part+n0] = e;
1474 (fPythia->GetPyjets())->P[4][part+n0] = m;
1476 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1477 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1478 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1479 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1480 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1484 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1487 // Load event into Pythia Common Block
1490 Int_t npart = stack -> GetEntries();
1494 (fPythia->GetPyjets())->N = npart;
1496 n0 = (fPythia->GetPyjets())->N;
1497 (fPythia->GetPyjets())->N = n0 + npart;
1501 for (Int_t part = 0; part < npart; part++) {
1502 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1503 if (!mPart) continue;
1505 Int_t kf = mPart->GetPdgCode();
1506 Int_t ks = mPart->GetStatusCode();
1507 Int_t idf = mPart->GetFirstDaughter();
1508 Int_t idl = mPart->GetLastDaughter();
1511 if (ks == 11 || ks == 12) {
1518 Float_t px = mPart->Px();
1519 Float_t py = mPart->Py();
1520 Float_t pz = mPart->Pz();
1521 Float_t e = mPart->Energy();
1522 Float_t m = mPart->GetCalcMass();
1525 (fPythia->GetPyjets())->P[0][part+n0] = px;
1526 (fPythia->GetPyjets())->P[1][part+n0] = py;
1527 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1528 (fPythia->GetPyjets())->P[3][part+n0] = e;
1529 (fPythia->GetPyjets())->P[4][part+n0] = m;
1531 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1532 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1533 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1534 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1535 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1540 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1543 // Calls the Pythia jet finding algorithm to find jets in the current event
1548 Int_t n = fPythia->GetN();
1552 fPythia->Pycell(njets);
1554 for (i = 0; i < njets; i++) {
1555 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1556 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1557 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1558 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1569 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1572 // Calls the Pythia clustering algorithm to find jets in the current event
1574 Int_t n = fPythia->GetN();
1577 if (fJetReconstruction == kCluster) {
1579 // Configure cluster algorithm
1581 fPythia->SetPARU(43, 2.);
1582 fPythia->SetMSTU(41, 1);
1584 // Call cluster algorithm
1586 fPythia->Pyclus(nJets);
1588 // Loading jets from common block
1594 fPythia->Pycell(nJets);
1598 for (i = 0; i < nJets; i++) {
1599 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1600 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1601 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1602 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1603 Float_t pt = TMath::Sqrt(px * px + py * py);
1604 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1605 Float_t theta = TMath::ATan2(pt,pz);
1606 Float_t et = e * TMath::Sin(theta);
1607 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1609 eta > fEtaMinJet && eta < fEtaMaxJet &&
1610 phi > fPhiMinJet && phi < fPhiMaxJet &&
1611 et > fEtMinJet && et < fEtMaxJet
1614 jets[0][nJetsTrig] = px;
1615 jets[1][nJetsTrig] = py;
1616 jets[2][nJetsTrig] = pz;
1617 jets[3][nJetsTrig] = e;
1619 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1621 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1626 void AliGenPythia::GetSubEventTime()
1628 // Calculates time of the next subevent
1631 TArrayF &array = *fEventsTime;
1632 fEventTime = array[fCurSubEvent++];
1634 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1638 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1640 // Is particle in Central Barrel acceptance?
1642 if( eta < fTriggerEta )
1648 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1650 // Is particle in EMCAL acceptance?
1651 // phi in degrees, etamin=-etamax
1652 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1659 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1661 // Is particle in PHOS acceptance?
1662 // Acceptance slightly larger considered.
1663 // phi in degrees, etamin=-etamax
1664 // iparticle is the index of the particle to be checked, for PHOS rotation case
1666 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1671 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1677 void AliGenPythia::RotatePhi(Bool_t& okdd)
1679 //Rotate event in phi to enhance events in PHOS acceptance
1681 if(fPHOSRotateCandidate < 0) return ;
1683 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1684 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1685 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1686 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1688 //calculate deltaphi
1689 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1690 Double_t phphi = ph->Phi();
1691 Double_t deltaphi = phiPHOS - phphi;
1695 //loop for all particles and produce the phi rotation
1696 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1697 Double_t oldphi, newphi;
1698 Double_t newVx, newVy, r, vZ, time;
1699 Double_t newPx, newPy, pt, pz, e;
1700 for(Int_t i=0; i< np; i++) {
1701 TParticle* iparticle = (TParticle *) fParticles.At(i);
1702 oldphi = iparticle->Phi();
1703 newphi = oldphi + deltaphi;
1704 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1705 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1708 newVx = r * TMath::Cos(newphi);
1709 newVy = r * TMath::Sin(newphi);
1710 vZ = iparticle->Vz(); // don't transform
1711 time = iparticle->T(); // don't transform
1713 pt = iparticle->Pt();
1714 newPx = pt * TMath::Cos(newphi);
1715 newPy = pt * TMath::Sin(newphi);
1716 pz = iparticle->Pz(); // don't transform
1717 e = iparticle->Energy(); // don't transform
1720 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1721 iparticle->SetMomentum(newPx, newPy, pz, e);
1723 } //end particle loop
1725 // now let's check that we put correctly the candidate photon in PHOS
1726 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1727 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1728 if(IsInPHOS(phi,eta,-1))
1731 // reset the value for next event
1732 fPHOSRotateCandidate = -1;
1737 Bool_t AliGenPythia::CheckDiffraction()
1739 // use this method only with Perugia-0 tune!
1743 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1749 Double_t y2 = -1e10;
1751 const Int_t kNstable=20;
1752 const Int_t pdgStable[20] = {
1755 12, // Electron Neutrino
1757 14, // Muon Neutrino
1768 3112, // Sigma Minus
1775 for (Int_t i = 0; i < np; i++) {
1776 TParticle * part = (TParticle *) fParticles.At(i);
1778 Int_t statusCode = part->GetStatusCode();
1780 // Initial state particle
1781 if (statusCode != 1)
1784 Int_t pdg = TMath::Abs(part->GetPdgCode());
1785 Bool_t isStable = kFALSE;
1786 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1787 if (pdg == pdgStable[i1]) {
1795 Double_t y = part->Y();
1809 if(iPart1<0 || iPart2<0) return kFALSE;
1814 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1815 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1817 Int_t pdg1 = part1->GetPdgCode();
1818 Int_t pdg2 = part2->GetPdgCode();
1822 if (pdg1 == 2212 && pdg2 == 2212)
1830 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1833 else if (pdg1 == 2212)
1835 else if (pdg2 == 2212)
1844 TParticle * part = (TParticle *) fParticles.At(iPart);
1845 Double_t E= part->Energy();
1846 Double_t P= part->P();
1847 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1848 if(M2<0) return kFALSE;
1852 Double_t Mmin, Mmax, wSD, wDD, wND;
1853 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1855 if(M>-1 && M<Mmin) return kFALSE;
1858 Int_t procType=fPythia->GetMSTI(1);
1860 if(procType== 94) proc0=1;
1861 if(procType== 92 || procType== 93) proc0=0;
1865 else if(proc0==1) proc=1;
1867 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1868 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1871 // if(proc==1 || proc==2) return kFALSE;
1874 if(proc0!=0) fProcDiff = procType;
1875 else fProcDiff = 95;
1879 if(wSD<0) AliError("wSD<0 ! \n");
1881 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1883 // printf("iPart = %d\n", iPart);
1885 if(iPart==iPart1) fProcDiff=93;
1886 else if(iPart==iPart2) fProcDiff=92;
1888 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1897 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1898 Double_t &wSD, Double_t &wDD, Double_t &wND)
1902 if(TMath::Abs(fEnergyCMS-900)<1 ){
1904 const Int_t nbin=400;
1906 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1907 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1908 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1909 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1910 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1911 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1912 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1913 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1914 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1915 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1916 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1917 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1918 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1919 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1920 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1921 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1922 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1923 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1924 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1925 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1926 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1927 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1928 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1929 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1930 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1931 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1932 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1933 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1934 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1935 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1936 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1937 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1938 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1939 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1940 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1941 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1942 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1943 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1944 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1945 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1946 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1947 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1948 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1949 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1950 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1951 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1952 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1953 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1954 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1955 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1956 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1957 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1958 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1959 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
1960 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
1961 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
1962 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
1963 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
1964 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
1965 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
1966 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
1967 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
1968 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
1969 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
1970 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
1971 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
1972 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
1974 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
1975 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
1976 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
1977 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
1978 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
1979 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
1980 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
1981 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
1982 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
1983 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
1984 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
1985 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
1986 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
1987 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
1988 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
1989 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
1990 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
1991 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
1992 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
1993 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
1994 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
1995 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
1996 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
1997 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
1998 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
1999 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
2000 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
2001 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
2002 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
2003 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
2004 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
2005 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
2006 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
2007 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
2008 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
2009 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
2010 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
2011 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2012 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2013 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2014 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2015 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2016 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2017 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2018 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2019 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2020 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2021 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2022 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2023 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2024 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2025 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2026 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2027 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2028 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2029 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2030 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2031 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2032 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2033 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2034 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2035 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2036 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2037 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2038 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2039 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2040 0.386112, 0.364314, 0.434375, 0.334629};
2047 if(M<Mmin || M>Mmax) return kTRUE;
2050 for(Int_t i=1; i<=nbin; i++)
2053 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2059 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2061 const Int_t nbin=400;
2063 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2064 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2065 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2066 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2067 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2068 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2069 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2070 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2071 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2072 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2073 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2074 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2075 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2076 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2077 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2078 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2079 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2080 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2081 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2082 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2083 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2084 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2085 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2086 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2087 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2088 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2089 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2090 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2091 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2092 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2093 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2094 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2095 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2096 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2097 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2098 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2099 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2100 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2101 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2102 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2103 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2104 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2105 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2106 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2107 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2108 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2109 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2110 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2111 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2112 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2113 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2114 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2115 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2116 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2117 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2118 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2119 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2120 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2121 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2122 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2123 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2124 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2125 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2126 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2127 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2128 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2129 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2131 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2132 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2133 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2134 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2135 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2136 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2137 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2138 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2139 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2140 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2141 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2142 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2143 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2144 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2145 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2146 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2147 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2148 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2149 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2150 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2151 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2152 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2153 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2154 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2155 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2156 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2157 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2158 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2159 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2160 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2161 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2162 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2163 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2164 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2165 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2166 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2167 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2168 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2169 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2170 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2171 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2172 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2173 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2174 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2175 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2176 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2177 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2178 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2179 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2180 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2181 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2182 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2183 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2184 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2185 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2186 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2187 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2188 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2189 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2190 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2191 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2192 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2193 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2194 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2195 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2196 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2197 0.201712, 0.242225, 0.255565, 0.258738};
2204 if(M<Mmin || M>Mmax) return kTRUE;
2207 for(Int_t i=1; i<=nbin; i++)
2210 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2218 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2219 const Int_t nbin=400;
2221 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2222 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2223 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2224 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2225 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2226 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2227 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2228 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2229 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2230 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2231 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2232 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2233 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2234 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2235 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2236 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2237 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2238 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2239 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2240 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2241 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2242 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2243 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2244 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2245 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2246 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2247 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2248 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2249 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2250 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2251 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2252 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2253 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2254 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2255 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2256 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2257 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2258 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2259 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2260 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2261 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2262 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2263 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2264 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2265 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2266 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2267 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2268 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2269 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2270 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2271 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2272 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2273 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2274 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2275 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2276 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2277 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2278 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2279 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2280 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2281 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2282 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2283 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2284 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2285 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2286 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2287 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2289 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2290 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2291 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2292 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2293 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2294 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2295 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2296 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2297 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2298 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2299 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2300 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2301 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2302 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2303 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2304 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2305 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2306 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2307 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2308 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2309 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2310 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2311 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2312 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2313 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2314 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2315 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2316 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2317 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2318 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2319 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2320 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2321 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2322 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2323 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2324 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2325 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2326 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2327 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2328 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2329 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2330 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2331 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2332 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2333 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2334 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2335 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2336 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2337 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2338 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2339 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2340 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2341 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2342 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2343 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2344 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2345 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2346 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2347 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2348 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2349 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2350 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2351 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2352 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2353 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2354 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2355 0.175006, 0.223482, 0.202706, 0.218108};
2363 if(M<Mmin || M>Mmax) return kTRUE;
2366 for(Int_t i=1; i<=nbin; i++)
2369 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2379 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2381 // Check if this is a heavy flavor decay product
2382 TParticle * part = (TParticle *) fParticles.At(ipart);
2383 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2384 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2387 if (mfl >= 4 && mfl < 6) return kTRUE;
2389 Int_t imo = part->GetFirstMother()-1;
2390 TParticle* pm = part;
2392 // Heavy flavor hadron produced by generator
2394 pm = (TParticle*)fParticles.At(imo);
2395 mpdg = TMath::Abs(pm->GetPdgCode());
2396 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2397 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2398 imo = pm->GetFirstMother()-1;
2403 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2405 // check the eta/phi correspond to the detectors acceptance
2406 // iparticle is the index of the particle to be checked, for PHOS rotation case
2407 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2408 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2409 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2413 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2415 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2416 // implemented primaryly for kPyJets, but extended to any kind of process.
2418 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2419 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2422 for (Int_t i=0; i< np; i++) {
2424 TParticle* iparticle = (TParticle *) fParticles.At(i);
2426 Int_t pdg = iparticle->GetPdgCode();
2427 Int_t status = iparticle->GetStatusCode();
2428 Int_t imother = iparticle->GetFirstMother() - 1;
2430 TParticle* pmother = 0x0;
2431 Int_t momStatus = -1;
2434 pmother = (TParticle *) fParticles.At(imother);
2435 momStatus = pmother->GetStatusCode();
2436 momPdg = pmother->GetPdgCode();
2442 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2445 if (fHadronInCalo && status == 1)
2447 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2448 // (in case neutral mesons were declared stable)
2452 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2456 //Fragmentation photon
2457 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2459 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2462 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2464 if( momStatus == 11)
2466 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2467 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2468 ok = kTRUE ; // photon from hadron decay
2470 //In case only decays from pi0 or eta requested
2471 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2472 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2476 // Pi0 or Eta particle
2477 else if ((fPi0InCalo || fEtaInCalo))
2479 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2481 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2483 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2486 else if (fEtaInCalo && pdg == 221)
2488 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2495 // Check that the selected particle is in the calorimeter acceptance
2497 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2499 //Just check if the selected particle falls in the acceptance
2500 if(!fForceNeutralMeson2PhotonDecay )
2502 //printf("\t Check acceptance! \n");
2503 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2504 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2506 if(CheckDetectorAcceptance(phi,eta,i))
2509 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));
2510 //printf("\t Accept \n");
2515 //Mesons have several decay modes, select only those decaying into 2 photons
2516 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2518 // In case we want the pi0/eta trigger,
2519 // check the decay mode (2 photons)
2521 //printf("\t Force decay 2 gamma\n");
2523 Int_t ndaughters = iparticle->GetNDaughters();
2524 if(ndaughters != 2){
2529 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2530 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2536 //iparticle->Print();
2540 Int_t pdgD1 = d1->GetPdgCode();
2541 Int_t pdgD2 = d2->GetPdgCode();
2542 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2543 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2545 if(pdgD1 != 22 || pdgD2 != 22){
2550 //printf("\t accept decay\n");
2552 //Trigger on the meson, not on the daughter
2553 if(!fDecayPhotonInCalo){
2555 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2556 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2558 if(CheckDetectorAcceptance(phi,eta,i))
2560 //printf("\t Accept meson pdg %d\n",pdg);
2562 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));
2570 //printf("Check daughters acceptance\n");
2572 //Trigger on the meson daughters
2574 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2575 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2576 if(d1->Pt() > fTriggerParticleMinPt)
2578 //printf("\t Check acceptance photon 1! \n");
2579 if(CheckDetectorAcceptance(phi,eta,i))
2581 //printf("\t Accept Photon 1\n");
2583 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));
2591 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2592 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2594 if(d2->Pt() > fTriggerParticleMinPt)
2596 //printf("\t Check acceptance photon 2! \n");
2597 if(CheckDetectorAcceptance(phi,eta,i))
2599 //printf("\t Accept Photon 2\n");
2601 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));
2607 } // force 2 photon daughters in pi0/eta decays
2609 } else ok = kFALSE; // check acceptance
2613 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2614 // A particle passing all trigger conditions except phi position in PHOS, is used as reference