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