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:
527 case kPyWPWHG: /// !!!!!!!!!! Change done for W prod with POWHEG !!!!!!!!!! :)
530 case kPyMBRSingleDiffraction:
531 case kPyMBRDoubleDiffraction:
532 case kPyMBRCentralDiffraction:
537 // JetFinder for Trigger
539 // Configure detector (EMCAL like)
541 fPythia->SetPARU(51, fPycellEtaMax);
542 fPythia->SetMSTU(51, fPycellNEta);
543 fPythia->SetMSTU(52, fPycellNPhi);
545 // Configure Jet Finder
547 fPythia->SetPARU(58, fPycellThreshold);
548 fPythia->SetPARU(52, fPycellEtSeed);
549 fPythia->SetPARU(53, fPycellMinEtJet);
550 fPythia->SetPARU(54, fPycellMaxRadius);
551 fPythia->SetMSTU(54, 2);
553 // This counts the total number of calls to Pyevnt() per run.
564 // Reset Lorentz boost if demanded
565 if(!fUseLorentzBoost) {
567 Warning("Init","Demand to discard Lorentz boost.\n");
574 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
576 fPythia->SetPARJ(200, 0.0);
577 fPythia->SetPARJ(199, 0.0);
578 fPythia->SetPARJ(198, 0.0);
579 fPythia->SetPARJ(197, 0.0);
582 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
585 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
588 // Nestor's change of the splittings
589 fPythia->SetPARJ(200, 0.8);
590 fPythia->SetMSTJ(41, 1); // QCD radiation only
591 fPythia->SetMSTJ(42, 2); // angular ordering
592 fPythia->SetMSTJ(44, 2); // option to run alpha_s
593 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
594 fPythia->SetMSTJ(50, 0); // No coherence in first branching
595 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
596 } else if (fQuench == 4) {
597 // Armesto-Cunqueiro-Salgado change of the splittings.
598 AliFastGlauber* glauber = AliFastGlauber::Instance();
600 //read and store transverse almonds corresponding to differnt
602 glauber->SetCentralityClass(0.,0.1);
603 fPythia->SetPARJ(200, 1.);
604 fPythia->SetPARJ(198, fQhat);
605 fPythia->SetPARJ(199, fLength);
606 fPythia->SetMSTJ(42, 2); // angular ordering
607 fPythia->SetMSTJ(44, 2); // option to run alpha_s
608 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
612 void AliGenPythia::Generate()
614 // Generate one event
615 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
616 fDecayer->ForceDecay();
618 Double_t polar[3] = {0,0,0};
619 Double_t origin[3] = {0,0,0};
621 // converts from mm/c to s
622 const Float_t kconv=0.001/2.999792458e8;
632 // Set collision vertex position
633 if (fVertexSmear == kPerEvent) Vertex();
642 // Switch hadronisation off
644 fPythia->SetMSTJ(1, 0);
648 // Quenching comes through medium-modified splitting functions.
649 AliFastGlauber::Instance()->GetRandomBHard(bimp);
650 fPythia->SetPARJ(197, bimp);
655 // Either produce new event or read partons from file
657 if (!fReadFromFile) {
663 fNpartons = fPythia->GetN();
665 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
666 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
668 LoadEvent(fRL->Stack(), 0 , 1);
673 // Run quenching routine
677 } else if (fQuench == 2){
678 fPythia->Pyquen(208., 0, 0.);
679 } else if (fQuench == 3) {
680 // Quenching is via multiplicative correction of the splittings
684 // Switch hadronisation on
686 if (fHadronisation) {
687 fPythia->SetMSTJ(1, 1);
689 // .. and perform hadronisation
690 // printf("Calling hadronisation %d\n", fPythia->GetN());
692 if (fPatchOmegaDalitz) {
693 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
695 fPythia->DalitzDecays();
696 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
701 fPythia->ImportParticles(&fParticles,"All");
703 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
704 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
712 Int_t np = fParticles.GetEntriesFast();
714 if (np == 0) continue;
718 Int_t* pParent = new Int_t[np];
719 Int_t* pSelected = new Int_t[np];
720 Int_t* trackIt = new Int_t[np];
721 for (i = 0; i < np; i++) {
727 Int_t nc = 0; // Total n. of selected particles
728 Int_t nParents = 0; // Selected parents
729 Int_t nTkbles = 0; // Trackable particles
730 if (fProcess != kPyMbDefault &&
732 fProcess != kPyMbAtlasTuneMC09 &&
733 fProcess != kPyMbWithDirectPhoton &&
734 fProcess != kPyJets &&
735 fProcess != kPyDirectGamma &&
736 fProcess != kPyMbNonDiffr &&
737 fProcess != kPyMbMSEL1 &&
740 fProcess != kPyCharmppMNRwmi &&
741 fProcess != kPyBeautyppMNRwmi &&
742 fProcess != kPyBeautyJets &&
743 fProcess != kPyWPWHG && /// !!!!!!!!!!!!!!!!! Change done for W with POHWEG !!!!!!!!!!!!!!!!!!! :)
744 fProcess != kPyJetsPWHG &&
745 fProcess != kPyCharmPWHG &&
746 fProcess != kPyBeautyPWHG) {
748 for (i = 0; i < np; i++) {
749 TParticle* iparticle = (TParticle *) fParticles.At(i);
750 Int_t ks = iparticle->GetStatusCode();
751 kf = CheckPDGCode(iparticle->GetPdgCode());
752 // No initial state partons
753 if (ks==21) continue;
755 // Heavy Flavor Selection
762 if (kfl > 100000) kfl %= 100000;
763 if (kfl > 10000) kfl %= 10000;
765 if (kfl > 10) kfl/=100;
767 if (kfl > 10) kfl/=10;
768 Int_t ipa = iparticle->GetFirstMother()-1;
771 // Establish mother daughter relation between heavy quarks and mesons
773 if (kf >= fFlavorSelect && kf <= 6) {
774 Int_t idau = iparticle->GetFirstDaughter() - 1;
776 TParticle* daughter = (TParticle *) fParticles.At(idau);
777 Int_t pdgD = daughter->GetPdgCode();
778 if (pdgD == 91 || pdgD == 92) {
779 Int_t jmin = daughter->GetFirstDaughter() - 1;
780 Int_t jmax = daughter->GetLastDaughter() - 1;
781 for (Int_t jp = jmin; jp <= jmax; jp++)
782 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
783 } // is string or cluster
789 TParticle * mother = (TParticle *) fParticles.At(ipa);
790 kfMo = TMath::Abs(mother->GetPdgCode());
793 // What to keep in Stack?
794 Bool_t flavorOK = kFALSE;
795 Bool_t selectOK = kFALSE;
797 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
799 if (kfl > fFlavorSelect) {
803 if (kfl == fFlavorSelect) flavorOK = kTRUE;
805 switch (fStackFillOpt) {
807 case kFlavorSelection:
810 case kParentSelection:
811 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
814 if (flavorOK && selectOK) {
816 // Heavy flavor hadron or quark
818 // Kinematic seletion on final state heavy flavor mesons
819 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
824 if (ParentSelected(kf)) ++nParents; // Update parent count
825 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
827 // Kinematic seletion on decay products
828 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
829 && !KinematicSelection(iparticle, 1))
835 // Select if mother was selected and is not tracked
837 if (pSelected[ipa] &&
838 !trackIt[ipa] && // mother will be tracked ?
839 kfMo != 5 && // mother is b-quark, don't store fragments
840 kfMo != 4 && // mother is c-quark, don't store fragments
841 kf != 92) // don't store string
844 // Semi-stable or de-selected: diselect decay products:
847 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
849 Int_t ipF = iparticle->GetFirstDaughter();
850 Int_t ipL = iparticle->GetLastDaughter();
851 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
853 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
854 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
857 if (pSelected[i] == -1) pSelected[i] = 0;
858 if (!pSelected[i]) continue;
859 // Count quarks only if you did not include fragmentation
860 if (fFragmentation && kf <= 10) continue;
863 // Decision on tracking
866 // Track final state particle
867 if (ks == 1) trackIt[i] = 1;
868 // Track semi-stable particles
869 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
870 // Track particles selected by process if undecayed.
871 if (fForceDecay == kNoDecay) {
872 if (ParentSelected(kf)) trackIt[i] = 1;
874 if (ParentSelected(kf)) trackIt[i] = 0;
876 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
880 } // particle selection loop
882 for (i = 0; i<np; i++) {
883 if (!pSelected[i]) continue;
884 TParticle * iparticle = (TParticle *) fParticles.At(i);
885 kf = CheckPDGCode(iparticle->GetPdgCode());
886 Int_t ks = iparticle->GetStatusCode();
887 p[0] = iparticle->Px();
888 p[1] = iparticle->Py();
889 p[2] = iparticle->Pz();
890 p[3] = iparticle->Energy();
892 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
893 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
894 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
896 Float_t tof = fTime + kconv*iparticle->T();
897 Int_t ipa = iparticle->GetFirstMother()-1;
898 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
900 PushTrack(fTrackIt*trackIt[i], iparent, kf,
901 p[0], p[1], p[2], p[3],
902 origin[0], origin[1], origin[2], tof,
903 polar[0], polar[1], polar[2],
904 kPPrimary, nt, 1., ks);
921 switch (fCountMode) {
923 // printf(" Count all \n");
927 // printf(" Count parents \n");
930 case kCountTrackables:
931 // printf(" Count trackable \n");
935 if (jev >= fNpart || fNpart == -1) {
936 fKineBias=Float_t(fNpart)/Float_t(fTrials);
938 fQ += fPythia->GetVINT(51);
939 fX1 += fPythia->GetVINT(41);
940 fX2 += fPythia->GetVINT(42);
941 fTrialsRun += fTrials;
948 SetHighWaterMark(nt);
949 // adjust weight due to kinematic selection
952 fXsection=fPythia->GetPARI(1);
955 Int_t AliGenPythia::GenerateMB()
958 // Min Bias selection and other global selections
960 Int_t i, kf, nt, iparent;
963 Double_t polar[3] = {0,0,0};
964 Double_t origin[3] = {0,0,0};
965 // converts from mm/c to s
966 const Float_t kconv=0.001/2.999792458e8;
969 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
973 Int_t* pParent = new Int_t[np];
974 for (i=0; i< np; i++) pParent[i] = -1;
975 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
977 TParticle* jet1 = (TParticle *) fParticles.At(6);
978 TParticle* jet2 = (TParticle *) fParticles.At(7);
980 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
987 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
988 // implemented primaryly for kPyJets, but extended to any kind of process.
989 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
990 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
991 Bool_t ok = TriggerOnSelectedParticles(np);
999 // Check for diffraction
1001 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1002 if(!CheckDiffraction()) {
1009 // Check for minimum multiplicity
1010 if (fTriggerMultiplicity > 0) {
1011 Int_t multiplicity = 0;
1012 for (i = 0; i < np; i++) {
1013 TParticle * iparticle = (TParticle *) fParticles.At(i);
1015 Int_t statusCode = iparticle->GetStatusCode();
1017 // Initial state particle
1018 if (statusCode != 1)
1021 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1024 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1027 TParticlePDG* pdgPart = iparticle->GetPDG();
1028 if (pdgPart && pdgPart->Charge() == 0)
1034 if (multiplicity < fTriggerMultiplicity) {
1038 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1042 if (fTriggerParticle) {
1043 Bool_t triggered = kFALSE;
1044 for (i = 0; i < np; i++) {
1045 TParticle * iparticle = (TParticle *) fParticles.At(i);
1046 kf = CheckPDGCode(iparticle->GetPdgCode());
1047 if (kf != fTriggerParticle) continue;
1048 if (iparticle->Pt() == 0.) continue;
1049 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1050 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1061 // Check if there is a ccbar or bbbar pair with at least one of the two
1062 // in fYMin < y < fYMax
1064 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1065 TParticle *partCheck;
1067 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1068 Bool_t theChild=kFALSE;
1069 Bool_t triggered=kFALSE;
1071 Int_t pdg,mpdg,mpdgUpperFamily;
1072 for(i=0; i<np; i++) {
1073 partCheck = (TParticle*)fParticles.At(i);
1074 pdg = partCheck->GetPdgCode();
1075 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1076 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1077 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1078 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1079 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1081 if(fTriggerParticle) {
1082 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1084 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1085 Int_t mi = partCheck->GetFirstMother() - 1;
1087 mother = (TParticle*)fParticles.At(mi);
1088 mpdg=TMath::Abs(mother->GetPdgCode());
1089 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1090 if ( ParentSelected(mpdg) ||
1091 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1092 if (KinematicSelection(partCheck,1)) {
1098 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1102 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1106 if(fTriggerParticle && !triggered) { // particle requested is not produced
1113 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1115 fProcess == kPyWPWHG || /// !!!!!!!!!!!!!!!! Added for W with POWHEG !!!!!!!!!! :)
1118 fProcess == kPyMbDefault ||
1119 fProcess == kPyMb ||
1120 fProcess == kPyMbAtlasTuneMC09 ||
1121 fProcess == kPyMbWithDirectPhoton ||
1122 fProcess == kPyMbNonDiffr)
1123 && (fCutOnChild == 1) ) {
1124 if ( !CheckKinematicsOnChild() ) {
1131 for (i = 0; i < np; i++) {
1133 TParticle * iparticle = (TParticle *) fParticles.At(i);
1134 kf = CheckPDGCode(iparticle->GetPdgCode());
1135 Int_t ks = iparticle->GetStatusCode();
1136 Int_t km = iparticle->GetFirstMother();
1138 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1139 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1143 if (ks == 1) trackIt = 1;
1144 Int_t ipa = iparticle->GetFirstMother()-1;
1146 iparent = (ipa > -1) ? pParent[ipa] : -1;
1149 // store track information
1150 p[0] = iparticle->Px();
1151 p[1] = iparticle->Py();
1152 p[2] = iparticle->Pz();
1153 p[3] = iparticle->Energy();
1156 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1157 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1158 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1160 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1162 PushTrack(fTrackIt*trackIt, iparent, kf,
1163 p[0], p[1], p[2], p[3],
1164 origin[0], origin[1], origin[2], tof,
1165 polar[0], polar[1], polar[2],
1166 kPPrimary, nt, 1., ks);
1170 SetHighWaterMark(nt);
1172 } // select particle
1181 void AliGenPythia::FinishRun()
1183 // Print x-section summary
1192 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1193 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1196 void AliGenPythia::AdjustWeights() const
1198 // Adjust the weights after generation of all events
1202 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1203 for (Int_t i=0; i<ntrack; i++) {
1204 part= gAlice->GetMCApp()->Particle(i);
1205 part->SetWeight(part->GetWeight()*fKineBias);
1210 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1212 // Treat protons as inside nuclei with mass numbers a1 and a2
1216 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1217 fUseNuclearPDF = kTRUE;
1222 void AliGenPythia::MakeHeader()
1225 // Make header for the simulated event
1228 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1229 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1232 // Builds the event header, to be called after each event
1233 if (fHeader) delete fHeader;
1234 fHeader = new AliGenPythiaEventHeader("Pythia");
1238 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1239 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1240 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1243 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1246 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1249 fHeader->SetPrimaryVertex(fVertex);
1250 fHeader->SetInteractionTime(fTime+fEventTime);
1252 // Number of primaries
1253 fHeader->SetNProduced(fNprimaries);
1256 fHeader->SetEventWeight(fPythia->GetVINT(97));
1258 // Jets that have triggered
1260 //Need to store jets for b-jet studies too!
1261 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1264 Float_t jets[4][10];
1265 GetJets(njet, ntrig, jets);
1268 for (Int_t i = 0; i < ntrig; i++) {
1269 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1274 // Copy relevant information from external header, if present.
1279 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1280 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1282 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1285 exHeader->TriggerJet(i, uqJet);
1286 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1290 // Store quenching parameters
1293 Double_t z[4] = {0.};
1299 fPythia->GetQuenchingParameters(xp, yp, z);
1300 } else if (fQuench == 2){
1302 Double_t r1 = PARIMP.rb1;
1303 Double_t r2 = PARIMP.rb2;
1304 Double_t b = PARIMP.b1;
1305 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1306 Double_t phi = PARIMP.psib1;
1307 xp = r * TMath::Cos(phi);
1308 yp = r * TMath::Sin(phi);
1310 } else if (fQuench == 4) {
1314 AliFastGlauber::Instance()->GetSavedXY(xy);
1315 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1318 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1321 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1322 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1326 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1329 // Store Event Weight
1330 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
1339 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1341 // Check the kinematic trigger condition
1344 eta[0] = jet1->Eta();
1345 eta[1] = jet2->Eta();
1347 phi[0] = jet1->Phi();
1348 phi[1] = jet2->Phi();
1350 pdg[0] = jet1->GetPdgCode();
1351 pdg[1] = jet2->GetPdgCode();
1352 Bool_t triggered = kFALSE;
1354 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1357 Float_t jets[4][10];
1359 // Use Pythia clustering on parton level to determine jet axis
1361 GetJets(njets, ntrig, jets);
1363 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1368 if (pdg[0] == kGamma) {
1372 //Check eta range first...
1373 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1374 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1376 //Eta is okay, now check phi range
1377 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1378 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1389 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1391 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1393 Bool_t checking = kFALSE;
1394 Int_t j, kcode, ks, km;
1395 Int_t nPartAcc = 0; //number of particles in the acceptance range
1396 Int_t numberOfAcceptedParticles = 1;
1397 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1398 Int_t npart = fParticles.GetEntriesFast();
1400 for (j = 0; j<npart; j++) {
1401 TParticle * jparticle = (TParticle *) fParticles.At(j);
1402 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1403 ks = jparticle->GetStatusCode();
1404 km = jparticle->GetFirstMother();
1406 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1409 if( numberOfAcceptedParticles <= nPartAcc){
1418 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1421 // Load event into Pythia Common Block
1424 Int_t npart = stack -> GetNprimary();
1428 (fPythia->GetPyjets())->N = npart;
1430 n0 = (fPythia->GetPyjets())->N;
1431 (fPythia->GetPyjets())->N = n0 + npart;
1435 for (Int_t part = 0; part < npart; part++) {
1436 TParticle *mPart = stack->Particle(part);
1438 Int_t kf = mPart->GetPdgCode();
1439 Int_t ks = mPart->GetStatusCode();
1440 Int_t idf = mPart->GetFirstDaughter();
1441 Int_t idl = mPart->GetLastDaughter();
1444 if (ks == 11 || ks == 12) {
1451 Float_t px = mPart->Px();
1452 Float_t py = mPart->Py();
1453 Float_t pz = mPart->Pz();
1454 Float_t e = mPart->Energy();
1455 Float_t m = mPart->GetCalcMass();
1458 (fPythia->GetPyjets())->P[0][part+n0] = px;
1459 (fPythia->GetPyjets())->P[1][part+n0] = py;
1460 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1461 (fPythia->GetPyjets())->P[3][part+n0] = e;
1462 (fPythia->GetPyjets())->P[4][part+n0] = m;
1464 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1465 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1466 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1467 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1468 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1472 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1475 // Load event into Pythia Common Block
1478 Int_t npart = stack -> GetEntries();
1482 (fPythia->GetPyjets())->N = npart;
1484 n0 = (fPythia->GetPyjets())->N;
1485 (fPythia->GetPyjets())->N = n0 + npart;
1489 for (Int_t part = 0; part < npart; part++) {
1490 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1491 if (!mPart) continue;
1493 Int_t kf = mPart->GetPdgCode();
1494 Int_t ks = mPart->GetStatusCode();
1495 Int_t idf = mPart->GetFirstDaughter();
1496 Int_t idl = mPart->GetLastDaughter();
1499 if (ks == 11 || ks == 12) {
1506 Float_t px = mPart->Px();
1507 Float_t py = mPart->Py();
1508 Float_t pz = mPart->Pz();
1509 Float_t e = mPart->Energy();
1510 Float_t m = mPart->GetCalcMass();
1513 (fPythia->GetPyjets())->P[0][part+n0] = px;
1514 (fPythia->GetPyjets())->P[1][part+n0] = py;
1515 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1516 (fPythia->GetPyjets())->P[3][part+n0] = e;
1517 (fPythia->GetPyjets())->P[4][part+n0] = m;
1519 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1520 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1521 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1522 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1523 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1528 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1531 // Calls the Pythia jet finding algorithm to find jets in the current event
1536 Int_t n = fPythia->GetN();
1540 fPythia->Pycell(njets);
1542 for (i = 0; i < njets; i++) {
1543 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1544 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1545 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1546 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1557 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1560 // Calls the Pythia clustering algorithm to find jets in the current event
1562 Int_t n = fPythia->GetN();
1565 if (fJetReconstruction == kCluster) {
1567 // Configure cluster algorithm
1569 fPythia->SetPARU(43, 2.);
1570 fPythia->SetMSTU(41, 1);
1572 // Call cluster algorithm
1574 fPythia->Pyclus(nJets);
1576 // Loading jets from common block
1582 fPythia->Pycell(nJets);
1586 for (i = 0; i < nJets; i++) {
1587 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1588 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1589 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1590 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1591 Float_t pt = TMath::Sqrt(px * px + py * py);
1592 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1593 Float_t theta = TMath::ATan2(pt,pz);
1594 Float_t et = e * TMath::Sin(theta);
1595 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1597 eta > fEtaMinJet && eta < fEtaMaxJet &&
1598 phi > fPhiMinJet && phi < fPhiMaxJet &&
1599 et > fEtMinJet && et < fEtMaxJet
1602 jets[0][nJetsTrig] = px;
1603 jets[1][nJetsTrig] = py;
1604 jets[2][nJetsTrig] = pz;
1605 jets[3][nJetsTrig] = e;
1607 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1609 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1614 void AliGenPythia::GetSubEventTime()
1616 // Calculates time of the next subevent
1619 TArrayF &array = *fEventsTime;
1620 fEventTime = array[fCurSubEvent++];
1622 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1626 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1628 // Is particle in Central Barrel acceptance?
1630 if( eta < fTriggerEta )
1636 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1638 // Is particle in EMCAL acceptance?
1639 // phi in degrees, etamin=-etamax
1640 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1647 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1649 // Is particle in PHOS acceptance?
1650 // Acceptance slightly larger considered.
1651 // phi in degrees, etamin=-etamax
1652 // iparticle is the index of the particle to be checked, for PHOS rotation case
1654 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1659 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1665 void AliGenPythia::RotatePhi(Bool_t& okdd)
1667 //Rotate event in phi to enhance events in PHOS acceptance
1669 if(fPHOSRotateCandidate < 0) return ;
1671 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1672 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1673 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1674 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1676 //calculate deltaphi
1677 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1678 Double_t phphi = ph->Phi();
1679 Double_t deltaphi = phiPHOS - phphi;
1683 //loop for all particles and produce the phi rotation
1684 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1685 Double_t oldphi, newphi;
1686 Double_t newVx, newVy, r, vZ, time;
1687 Double_t newPx, newPy, pt, pz, e;
1688 for(Int_t i=0; i< np; i++) {
1689 TParticle* iparticle = (TParticle *) fParticles.At(i);
1690 oldphi = iparticle->Phi();
1691 newphi = oldphi + deltaphi;
1692 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1693 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1696 newVx = r * TMath::Cos(newphi);
1697 newVy = r * TMath::Sin(newphi);
1698 vZ = iparticle->Vz(); // don't transform
1699 time = iparticle->T(); // don't transform
1701 pt = iparticle->Pt();
1702 newPx = pt * TMath::Cos(newphi);
1703 newPy = pt * TMath::Sin(newphi);
1704 pz = iparticle->Pz(); // don't transform
1705 e = iparticle->Energy(); // don't transform
1708 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1709 iparticle->SetMomentum(newPx, newPy, pz, e);
1711 } //end particle loop
1713 // now let's check that we put correctly the candidate photon in PHOS
1714 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1715 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1716 if(IsInPHOS(phi,eta,-1))
1719 // reset the value for next event
1720 fPHOSRotateCandidate = -1;
1725 Bool_t AliGenPythia::CheckDiffraction()
1727 // use this method only with Perugia-0 tune!
1731 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1737 Double_t y2 = -1e10;
1739 const Int_t kNstable=20;
1740 const Int_t pdgStable[20] = {
1743 12, // Electron Neutrino
1745 14, // Muon Neutrino
1756 3112, // Sigma Minus
1763 for (Int_t i = 0; i < np; i++) {
1764 TParticle * part = (TParticle *) fParticles.At(i);
1766 Int_t statusCode = part->GetStatusCode();
1768 // Initial state particle
1769 if (statusCode != 1)
1772 Int_t pdg = TMath::Abs(part->GetPdgCode());
1773 Bool_t isStable = kFALSE;
1774 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1775 if (pdg == pdgStable[i1]) {
1783 Double_t y = part->Y();
1797 if(iPart1<0 || iPart2<0) return kFALSE;
1802 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1803 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1805 Int_t pdg1 = part1->GetPdgCode();
1806 Int_t pdg2 = part2->GetPdgCode();
1810 if (pdg1 == 2212 && pdg2 == 2212)
1818 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1821 else if (pdg1 == 2212)
1823 else if (pdg2 == 2212)
1832 TParticle * part = (TParticle *) fParticles.At(iPart);
1833 Double_t E= part->Energy();
1834 Double_t P= part->P();
1835 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1836 if(M2<0) return kFALSE;
1840 Double_t Mmin, Mmax, wSD, wDD, wND;
1841 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1843 if(M>-1 && M<Mmin) return kFALSE;
1846 Int_t procType=fPythia->GetMSTI(1);
1848 if(procType== 94) proc0=1;
1849 if(procType== 92 || procType== 93) proc0=0;
1853 else if(proc0==1) proc=1;
1855 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1856 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1859 // if(proc==1 || proc==2) return kFALSE;
1862 if(proc0!=0) fProcDiff = procType;
1863 else fProcDiff = 95;
1867 if(wSD<0) AliError("wSD<0 ! \n");
1869 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1871 // printf("iPart = %d\n", iPart);
1873 if(iPart==iPart1) fProcDiff=93;
1874 else if(iPart==iPart2) fProcDiff=92;
1876 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1885 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1886 Double_t &wSD, Double_t &wDD, Double_t &wND)
1890 if(TMath::Abs(fEnergyCMS-900)<1 ){
1892 const Int_t nbin=400;
1894 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1895 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1896 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1897 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1898 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1899 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1900 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1901 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1902 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1903 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1904 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1905 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1906 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1907 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1908 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1909 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1910 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1911 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1912 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1913 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1914 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1915 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1916 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1917 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1918 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1919 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1920 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1921 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1922 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1923 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1924 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1925 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1926 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1927 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1928 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1929 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1930 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1931 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1932 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1933 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1934 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1935 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1936 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1937 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1938 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1939 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1940 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1941 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1942 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1943 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1944 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1945 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1946 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1947 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
1948 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
1949 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
1950 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
1951 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
1952 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
1953 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
1954 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
1955 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
1956 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
1957 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
1958 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
1959 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
1960 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
1962 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
1963 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
1964 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
1965 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
1966 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
1967 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
1968 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
1969 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
1970 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
1971 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
1972 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
1973 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
1974 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
1975 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
1976 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
1977 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
1978 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
1979 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
1980 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
1981 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
1982 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
1983 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
1984 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
1985 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
1986 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
1987 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
1988 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
1989 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
1990 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
1991 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
1992 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
1993 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
1994 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
1995 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
1996 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
1997 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
1998 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
1999 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2000 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2001 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2002 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2003 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2004 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2005 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2006 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2007 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2008 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2009 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2010 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2011 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2012 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2013 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2014 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2015 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2016 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2017 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2018 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2019 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2020 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2021 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2022 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2023 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2024 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2025 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2026 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2027 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2028 0.386112, 0.364314, 0.434375, 0.334629};
2035 if(M<Mmin || M>Mmax) return kTRUE;
2038 for(Int_t i=1; i<=nbin; i++)
2041 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2047 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2049 const Int_t nbin=400;
2051 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2052 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2053 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2054 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2055 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2056 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2057 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2058 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2059 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2060 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2061 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2062 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2063 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2064 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2065 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2066 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2067 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2068 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2069 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2070 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2071 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2072 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2073 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2074 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2075 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2076 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2077 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2078 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2079 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2080 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2081 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2082 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2083 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2084 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2085 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2086 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2087 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2088 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2089 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2090 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2091 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2092 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2093 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2094 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2095 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2096 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2097 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2098 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2099 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2100 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2101 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2102 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2103 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2104 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2105 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2106 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2107 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2108 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2109 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2110 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2111 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2112 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2113 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2114 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2115 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2116 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2117 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2119 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2120 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2121 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2122 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2123 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2124 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2125 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2126 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2127 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2128 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2129 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2130 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2131 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2132 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2133 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2134 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2135 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2136 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2137 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2138 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2139 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2140 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2141 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2142 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2143 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2144 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2145 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2146 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2147 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2148 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2149 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2150 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2151 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2152 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2153 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2154 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2155 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2156 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2157 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2158 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2159 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2160 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2161 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2162 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2163 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2164 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2165 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2166 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2167 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2168 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2169 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2170 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2171 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2172 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2173 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2174 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2175 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2176 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2177 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2178 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2179 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2180 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2181 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2182 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2183 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2184 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2185 0.201712, 0.242225, 0.255565, 0.258738};
2192 if(M<Mmin || M>Mmax) return kTRUE;
2195 for(Int_t i=1; i<=nbin; i++)
2198 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2206 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2207 const Int_t nbin=400;
2209 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2210 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2211 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2212 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2213 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2214 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2215 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2216 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2217 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2218 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2219 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2220 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2221 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2222 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2223 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2224 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2225 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2226 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2227 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2228 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2229 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2230 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2231 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2232 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2233 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2234 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2235 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2236 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2237 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2238 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2239 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2240 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2241 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2242 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2243 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2244 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2245 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2246 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2247 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2248 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2249 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2250 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2251 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2252 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2253 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2254 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2255 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2256 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2257 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2258 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2259 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2260 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2261 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2262 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2263 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2264 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2265 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2266 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2267 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2268 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2269 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2270 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2271 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2272 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2273 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2274 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2275 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2277 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2278 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2279 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2280 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2281 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2282 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2283 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2284 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2285 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2286 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2287 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2288 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2289 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2290 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2291 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2292 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2293 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2294 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2295 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2296 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2297 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2298 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2299 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2300 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2301 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2302 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2303 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2304 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2305 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2306 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2307 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2308 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2309 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2310 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2311 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2312 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2313 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2314 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2315 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2316 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2317 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2318 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2319 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2320 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2321 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2322 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2323 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2324 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2325 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2326 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2327 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2328 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2329 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2330 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2331 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2332 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2333 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2334 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2335 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2336 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2337 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2338 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2339 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2340 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2341 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2342 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2343 0.175006, 0.223482, 0.202706, 0.218108};
2351 if(M<Mmin || M>Mmax) return kTRUE;
2354 for(Int_t i=1; i<=nbin; i++)
2357 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2367 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2369 // Check if this is a heavy flavor decay product
2370 TParticle * part = (TParticle *) fParticles.At(ipart);
2371 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2372 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2375 if (mfl >= 4 && mfl < 6) return kTRUE;
2377 Int_t imo = part->GetFirstMother()-1;
2378 TParticle* pm = part;
2380 // Heavy flavor hadron produced by generator
2382 pm = (TParticle*)fParticles.At(imo);
2383 mpdg = TMath::Abs(pm->GetPdgCode());
2384 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2385 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2386 imo = pm->GetFirstMother()-1;
2391 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2393 // check the eta/phi correspond to the detectors acceptance
2394 // iparticle is the index of the particle to be checked, for PHOS rotation case
2395 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2396 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2397 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2401 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2403 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2404 // implemented primaryly for kPyJets, but extended to any kind of process.
2406 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2407 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2410 for (Int_t i=0; i< np; i++) {
2412 TParticle* iparticle = (TParticle *) fParticles.At(i);
2414 Int_t pdg = iparticle->GetPdgCode();
2415 Int_t status = iparticle->GetStatusCode();
2416 Int_t imother = iparticle->GetFirstMother() - 1;
2418 TParticle* pmother = 0x0;
2419 Int_t momStatus = -1;
2422 pmother = (TParticle *) fParticles.At(imother);
2423 momStatus = pmother->GetStatusCode();
2424 momPdg = pmother->GetPdgCode();
2430 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2433 if (fHadronInCalo && status == 1)
2435 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2436 // (in case neutral mesons were declared stable)
2440 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2444 //Fragmentation photon
2445 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2447 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2450 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2452 if( momStatus == 11)
2454 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2455 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2456 ok = kTRUE ; // photon from hadron decay
2458 //In case only decays from pi0 or eta requested
2459 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2460 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2464 // Pi0 or Eta particle
2465 else if ((fPi0InCalo || fEtaInCalo))
2467 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2469 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2471 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2474 else if (fEtaInCalo && pdg == 221)
2476 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2483 // Check that the selected particle is in the calorimeter acceptance
2485 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2487 //Just check if the selected particle falls in the acceptance
2488 if(!fForceNeutralMeson2PhotonDecay )
2490 //printf("\t Check acceptance! \n");
2491 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2492 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2494 if(CheckDetectorAcceptance(phi,eta,i))
2497 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));
2498 //printf("\t Accept \n");
2503 //Mesons have several decay modes, select only those decaying into 2 photons
2504 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2506 // In case we want the pi0/eta trigger,
2507 // check the decay mode (2 photons)
2509 //printf("\t Force decay 2 gamma\n");
2511 Int_t ndaughters = iparticle->GetNDaughters();
2512 if(ndaughters != 2){
2517 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2518 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2524 //iparticle->Print();
2528 Int_t pdgD1 = d1->GetPdgCode();
2529 Int_t pdgD2 = d2->GetPdgCode();
2530 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2531 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2533 if(pdgD1 != 22 || pdgD2 != 22){
2538 //printf("\t accept decay\n");
2540 //Trigger on the meson, not on the daughter
2541 if(!fDecayPhotonInCalo){
2543 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2544 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2546 if(CheckDetectorAcceptance(phi,eta,i))
2548 //printf("\t Accept meson pdg %d\n",pdg);
2550 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));
2558 //printf("Check daughters acceptance\n");
2560 //Trigger on the meson daughters
2562 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2563 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2564 if(d1->Pt() > fTriggerParticleMinPt)
2566 //printf("\t Check acceptance photon 1! \n");
2567 if(CheckDetectorAcceptance(phi,eta,i))
2569 //printf("\t Accept Photon 1\n");
2571 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));
2579 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2580 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2582 if(d2->Pt() > fTriggerParticleMinPt)
2584 //printf("\t Check acceptance photon 2! \n");
2585 if(CheckDetectorAcceptance(phi,eta,i))
2587 //printf("\t Accept Photon 2\n");
2589 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));
2595 } // force 2 photon daughters in pi0/eta decays
2597 } else ok = kFALSE; // check acceptance
2601 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2602 // A particle passing all trigger conditions except phi position in PHOS, is used as reference