1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
19 // Generator using the TPythia interface (via AliPythia)
20 // to generate pp collisions.
21 // Using SetNuclei() also nuclear modifications to the structure functions
22 // can be taken into account. This makes, of course, only sense for the
23 // generation of the products of hard processes (heavy flavor, jets ...)
25 // andreas.morsch@cern.ch
28 #include <TClonesArray.h>
29 #include <TDatabasePDG.h>
30 #include <TParticle.h>
32 #include <TObjArray.h>
36 #include "AliDecayerPythia.h"
37 #include "AliGenPythia.h"
38 #include "AliFastGlauber.h"
39 #include "AliHeader.h"
40 #include "AliGenPythiaEventHeader.h"
41 #include "AliPythia.h"
42 #include "AliPythiaRndm.h"
45 #include "AliRunLoader.h"
48 #include "PyquenCommon.h"
50 ClassImp(AliGenPythia)
53 AliGenPythia::AliGenPythia():
97 fDecayer(new AliDecayerPythia()),
105 fPhiMaxJet(2.* TMath::Pi()),
106 fJetReconstruction(kCell),
110 fPhiMaxGamma(2. * TMath::Pi()),
114 fPycellThreshold(0.),
116 fPycellMinEtJet(10.),
117 fPycellMaxRadius(1.),
118 fStackFillOpt(kFlavorSelection),
120 fFragmentation(kTRUE),
122 fUseNuclearPDF(kFALSE),
123 fUseLorentzBoost(kTRUE),
131 fTriggerMultiplicity(0),
132 fTriggerMultiplicityEta(0),
133 fTriggerMultiplicityPtMin(0),
134 fCountMode(kCountAll),
139 fFragPhotonInCalo(kFALSE),
140 fHadronInCalo(kFALSE) ,
143 fPhotonInCalo(kFALSE), // not in use
144 fDecayPhotonInCalo(kFALSE),
145 fForceNeutralMeson2PhotonDecay(kFALSE),
147 fEleInEMCAL(kFALSE), // not in use
148 fCheckBarrel(kFALSE),
151 fCheckPHOSeta(kFALSE),
152 fPHOSRotateCandidate(-1),
153 fTriggerParticleMinPt(0),
154 fPhotonMinPt(0), // not in use
155 fElectronMinPt(0), // not in use
165 // Default Constructor
167 if (!AliPythiaRndm::GetPythiaRandom())
168 AliPythiaRndm::SetPythiaRandom(GetRandom());
171 AliGenPythia::AliGenPythia(Int_t npart)
183 fInteractionRate(0.),
198 fHadronisation(kTRUE),
199 fPatchOmegaDalitz(0),
202 fReadFromFile(kFALSE),
215 fDecayer(new AliDecayerPythia()),
216 fDebugEventFirst(-1),
223 fPhiMaxJet(2.* TMath::Pi()),
224 fJetReconstruction(kCell),
228 fPhiMaxGamma(2. * TMath::Pi()),
232 fPycellThreshold(0.),
234 fPycellMinEtJet(10.),
235 fPycellMaxRadius(1.),
236 fStackFillOpt(kFlavorSelection),
238 fFragmentation(kTRUE),
240 fUseNuclearPDF(kFALSE),
241 fUseLorentzBoost(kTRUE),
249 fTriggerMultiplicity(0),
250 fTriggerMultiplicityEta(0),
251 fTriggerMultiplicityPtMin(0),
252 fCountMode(kCountAll),
257 fFragPhotonInCalo(kFALSE),
258 fHadronInCalo(kFALSE) ,
261 fPhotonInCalo(kFALSE), // not in use
262 fDecayPhotonInCalo(kFALSE),
263 fForceNeutralMeson2PhotonDecay(kFALSE),
265 fEleInEMCAL(kFALSE), // not in use
266 fCheckBarrel(kFALSE),
269 fCheckPHOSeta(kFALSE),
270 fPHOSRotateCandidate(-1),
271 fTriggerParticleMinPt(0),
272 fPhotonMinPt(0), // not in use
273 fElectronMinPt(0), // not in use
283 // default charm production at 5. 5 TeV
285 // structure function GRVHO
289 fTitle= "Particle Generator using PYTHIA";
291 // Set random number generator
292 if (!AliPythiaRndm::GetPythiaRandom())
293 AliPythiaRndm::SetPythiaRandom(GetRandom());
296 AliGenPythia::~AliGenPythia()
299 if(fEventsTime) delete fEventsTime;
302 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
304 // Generate pileup using user specified rate
305 fInteractionRate = rate;
306 fTimeWindow = timewindow;
310 void AliGenPythia::GeneratePileup()
312 // Generate sub events time for pileup
314 if(fInteractionRate == 0.) {
315 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
319 Int_t npart = NumberParticles();
321 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
325 if(fEventsTime) delete fEventsTime;
326 fEventsTime = new TArrayF(npart);
327 TArrayF &array = *fEventsTime;
328 for(Int_t ipart = 0; ipart < npart; ipart++)
331 Float_t eventtime = 0.;
334 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
335 if(eventtime > fTimeWindow) break;
336 array.Set(array.GetSize()+1);
337 array[array.GetSize()-1] = eventtime;
343 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
344 if(TMath::Abs(eventtime) > fTimeWindow) break;
345 array.Set(array.GetSize()+1);
346 array[array.GetSize()-1] = eventtime;
349 SetNumberParticles(fEventsTime->GetSize());
352 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
353 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
355 // Set pycell parameters
356 fPycellEtaMax = etamax;
359 fPycellThreshold = thresh;
360 fPycellEtSeed = etseed;
361 fPycellMinEtJet = minet;
362 fPycellMaxRadius = r;
367 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
369 // Set a range of event numbers, for which a table
370 // of generated particle will be printed
371 fDebugEventFirst = eventFirst;
372 fDebugEventLast = eventLast;
373 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
376 void AliGenPythia::Init()
380 SetMC(AliPythia::Instance());
381 fPythia=(AliPythia*) fMCEvGen;
384 fParentWeight=1./Float_t(fNpart);
388 fPythia->SetCKIN(3,fPtHardMin);
389 fPythia->SetCKIN(4,fPtHardMax);
390 fPythia->SetCKIN(7,fYHardMin);
391 fPythia->SetCKIN(8,fYHardMax);
393 if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
396 fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
398 if (fFragmentation) {
399 fPythia->SetMSTP(111,1);
401 fPythia->SetMSTP(111,0);
405 // initial state radiation
406 fPythia->SetMSTP(61,fGinit);
407 // final state radiation
408 fPythia->SetMSTP(71,fGfinal);
409 //color reconnection strength
410 if(fCRoff==1)fPythia->SetMSTP(95,0);
413 fPythia->SetMSTP(91,1);
414 fPythia->SetPARP(91,fPtKick);
415 fPythia->SetPARP(93, 4. * fPtKick);
417 fPythia->SetMSTP(91,0);
420 if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
423 fRL = AliRunLoader::Open(fkFileName, "Partons");
424 fRL->LoadKinematics();
430 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
431 // Forward Paramters to the AliPythia object
432 fDecayer->SetForceDecay(fForceDecay);
433 // Switch off Heavy Flavors on request
435 // Maximum number of quark flavours used in pdf
436 fPythia->SetMSTP(58, 3);
437 // Maximum number of flavors that can be used in showers
438 fPythia->SetMSTJ(45, 3);
439 // Switch off g->QQbar splitting in decay table
440 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
446 // Parent and Children Selection
449 case kPyOldUEQ2ordered:
450 case kPyOldUEQ2ordered2:
454 case kPyCharmUnforced:
455 case kPyCharmPbPbMNR:
458 case kPyCharmppMNRwmi:
460 fParentSelect[0] = 411;
461 fParentSelect[1] = 421;
462 fParentSelect[2] = 431;
463 fParentSelect[3] = 4122;
464 fParentSelect[4] = 4232;
465 fParentSelect[5] = 4132;
466 fParentSelect[6] = 4332;
472 fParentSelect[0] = 421;
475 case kPyDPlusPbPbMNR:
478 fParentSelect[0] = 411;
481 case kPyDPlusStrangePbPbMNR:
482 case kPyDPlusStrangepPbMNR:
483 case kPyDPlusStrangeppMNR:
484 fParentSelect[0] = 431;
487 case kPyLambdacppMNR:
488 fParentSelect[0] = 4122;
493 case kPyBeautyPbPbMNR:
494 case kPyBeautypPbMNR:
496 case kPyBeautyppMNRwmi:
498 fParentSelect[0]= 511;
499 fParentSelect[1]= 521;
500 fParentSelect[2]= 531;
501 fParentSelect[3]= 5122;
502 fParentSelect[4]= 5132;
503 fParentSelect[5]= 5232;
504 fParentSelect[6]= 5332;
507 case kPyBeautyUnforced:
508 fParentSelect[0] = 511;
509 fParentSelect[1] = 521;
510 fParentSelect[2] = 531;
511 fParentSelect[3] = 5122;
512 fParentSelect[4] = 5132;
513 fParentSelect[5] = 5232;
514 fParentSelect[6] = 5332;
519 fParentSelect[0] = 443;
522 case kPyMbAtlasTuneMC09:
524 case kPyMbWithDirectPhoton:
536 case kPyMBRSingleDiffraction:
537 case kPyMBRDoubleDiffraction:
538 case kPyMBRCentralDiffraction:
543 // JetFinder for Trigger
545 // Configure detector (EMCAL like)
547 fPythia->SetPARU(51, fPycellEtaMax);
548 fPythia->SetMSTU(51, fPycellNEta);
549 fPythia->SetMSTU(52, fPycellNPhi);
551 // Configure Jet Finder
553 fPythia->SetPARU(58, fPycellThreshold);
554 fPythia->SetPARU(52, fPycellEtSeed);
555 fPythia->SetPARU(53, fPycellMinEtJet);
556 fPythia->SetPARU(54, fPycellMaxRadius);
557 fPythia->SetMSTU(54, 2);
559 // This counts the total number of calls to Pyevnt() per run.
570 // Reset Lorentz boost if demanded
571 if(!fUseLorentzBoost) {
573 Warning("Init","Demand to discard Lorentz boost.\n");
580 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
582 fPythia->SetPARJ(200, 0.0);
583 fPythia->SetPARJ(199, 0.0);
584 fPythia->SetPARJ(198, 0.0);
585 fPythia->SetPARJ(197, 0.0);
588 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
591 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
594 // Nestor's change of the splittings
595 fPythia->SetPARJ(200, 0.8);
596 fPythia->SetMSTJ(41, 1); // QCD radiation only
597 fPythia->SetMSTJ(42, 2); // angular ordering
598 fPythia->SetMSTJ(44, 2); // option to run alpha_s
599 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
600 fPythia->SetMSTJ(50, 0); // No coherence in first branching
601 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
602 } else if (fQuench == 4) {
603 // Armesto-Cunqueiro-Salgado change of the splittings.
604 AliFastGlauber* glauber = AliFastGlauber::Instance();
606 //read and store transverse almonds corresponding to differnt
608 glauber->SetCentralityClass(0.,0.1);
609 fPythia->SetPARJ(200, 1.);
610 fPythia->SetPARJ(198, fQhat);
611 fPythia->SetPARJ(199, fLength);
612 fPythia->SetMSTJ(42, 2); // angular ordering
613 fPythia->SetMSTJ(44, 2); // option to run alpha_s
614 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
617 if ( AliLog::GetDebugLevel("","AliGenPythia") >= 1 ) {
623 void AliGenPythia::Generate()
625 // Generate one event
626 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
627 fDecayer->ForceDecay();
629 Double_t polar[3] = {0,0,0};
630 Double_t origin[3] = {0,0,0};
632 // converts from mm/c to s
633 const Float_t kconv=0.001/2.999792458e8;
643 // Set collision vertex position
644 if (fVertexSmear == kPerEvent) Vertex();
653 // Switch hadronisation off
655 fPythia->SetMSTJ(1, 0);
659 // Quenching comes through medium-modified splitting functions.
660 AliFastGlauber::Instance()->GetRandomBHard(bimp);
661 fPythia->SetPARJ(197, bimp);
666 // Either produce new event or read partons from file
668 if (!fReadFromFile) {
674 fNpartons = fPythia->GetN();
676 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
677 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
679 LoadEvent(fRL->Stack(), 0 , 1);
684 // Run quenching routine
688 } else if (fQuench == 2){
689 fPythia->Pyquen(208., 0, 0.);
690 } else if (fQuench == 3) {
691 // Quenching is via multiplicative correction of the splittings
695 // Switch hadronisation on
697 if (fHadronisation) {
698 fPythia->SetMSTJ(1, 1);
700 // .. and perform hadronisation
701 // printf("Calling hadronisation %d\n", fPythia->GetN());
703 if (fPatchOmegaDalitz) {
704 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
706 fPythia->DalitzDecays();
707 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
710 else if (fDecayerExodus) {
712 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 0);
713 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
714 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 0);
716 fPythia->OmegaDalitz();
717 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
718 fPythia->PizeroDalitz();
719 fPythia->PhiDalitz();
720 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 1);
721 fPythia->EtaDalitz();
722 fPythia->EtaprimeDalitz();
723 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 1);
724 fPythia->RhoDirect();
725 fPythia->OmegaDirect();
726 fPythia->PhiDirect();
727 fPythia->JPsiDirect();
733 fPythia->ImportParticles(&fParticles,"All");
735 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
736 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
744 Int_t np = fParticles.GetEntriesFast();
746 if (np == 0) continue;
750 Int_t* pParent = new Int_t[np];
751 Int_t* pSelected = new Int_t[np];
752 Int_t* trackIt = new Int_t[np];
753 for (i = 0; i < np; i++) {
759 Int_t nc = 0; // Total n. of selected particles
760 Int_t nParents = 0; // Selected parents
761 Int_t nTkbles = 0; // Trackable particles
762 if (fProcess != kPyMbDefault &&
764 fProcess != kPyMbAtlasTuneMC09 &&
765 fProcess != kPyMbWithDirectPhoton &&
766 fProcess != kPyJets &&
767 fProcess != kPyDirectGamma &&
768 fProcess != kPyMbNonDiffr &&
769 fProcess != kPyMbMSEL1 &&
772 fProcess != kPyZgamma &&
773 fProcess != kPyCharmppMNRwmi &&
774 fProcess != kPyBeautyppMNRwmi &&
775 fProcess != kPyBeautyJets &&
776 fProcess != kPyWPWHG &&
777 fProcess != kPyJetsPWHG &&
778 fProcess != kPyCharmPWHG &&
779 fProcess != kPyBeautyPWHG) {
781 for (i = 0; i < np; i++) {
782 TParticle* iparticle = (TParticle *) fParticles.At(i);
783 Int_t ks = iparticle->GetStatusCode();
784 kf = CheckPDGCode(iparticle->GetPdgCode());
785 // No initial state partons
786 if (ks==21) continue;
788 // Heavy Flavor Selection
795 if (kfl > 100000) kfl %= 100000;
796 if (kfl > 10000) kfl %= 10000;
798 if (kfl > 10) kfl/=100;
800 if (kfl > 10) kfl/=10;
801 Int_t ipa = iparticle->GetFirstMother()-1;
804 // Establish mother daughter relation between heavy quarks and mesons
806 if (kf >= fFlavorSelect && kf <= 6) {
807 Int_t idau = iparticle->GetFirstDaughter() - 1;
809 TParticle* daughter = (TParticle *) fParticles.At(idau);
810 Int_t pdgD = daughter->GetPdgCode();
811 if (pdgD == 91 || pdgD == 92) {
812 Int_t jmin = daughter->GetFirstDaughter() - 1;
813 Int_t jmax = daughter->GetLastDaughter() - 1;
814 for (Int_t jp = jmin; jp <= jmax; jp++)
815 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
816 } // is string or cluster
822 TParticle * mother = (TParticle *) fParticles.At(ipa);
823 kfMo = TMath::Abs(mother->GetPdgCode());
826 // What to keep in Stack?
827 Bool_t flavorOK = kFALSE;
828 Bool_t selectOK = kFALSE;
830 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
832 if (kfl > fFlavorSelect) {
836 if (kfl == fFlavorSelect) flavorOK = kTRUE;
838 switch (fStackFillOpt) {
840 case kFlavorSelection:
843 case kParentSelection:
844 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
847 if (flavorOK && selectOK) {
849 // Heavy flavor hadron or quark
851 // Kinematic seletion on final state heavy flavor mesons
852 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
857 if (ParentSelected(kf)) ++nParents; // Update parent count
858 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
860 // Kinematic seletion on decay products
861 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
862 && !KinematicSelection(iparticle, 1))
868 // Select if mother was selected and is not tracked
870 if (pSelected[ipa] &&
871 !trackIt[ipa] && // mother will be tracked ?
872 kfMo != 5 && // mother is b-quark, don't store fragments
873 kfMo != 4 && // mother is c-quark, don't store fragments
874 kf != 92) // don't store string
877 // Semi-stable or de-selected: diselect decay products:
880 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
882 Int_t ipF = iparticle->GetFirstDaughter();
883 Int_t ipL = iparticle->GetLastDaughter();
884 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
886 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
887 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
890 if (pSelected[i] == -1) pSelected[i] = 0;
891 if (!pSelected[i]) continue;
892 // Count quarks only if you did not include fragmentation
893 if (fFragmentation && kf <= 10) continue;
896 // Decision on tracking
899 // Track final state particle
900 if (ks == 1) trackIt[i] = 1;
901 // Track semi-stable particles
902 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
903 // Track particles selected by process if undecayed.
904 if (fForceDecay == kNoDecay) {
905 if (ParentSelected(kf)) trackIt[i] = 1;
907 if (ParentSelected(kf)) trackIt[i] = 0;
909 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
913 } // particle selection loop
915 for (i = 0; i<np; i++) {
916 if (!pSelected[i]) continue;
917 TParticle * iparticle = (TParticle *) fParticles.At(i);
918 kf = CheckPDGCode(iparticle->GetPdgCode());
919 Int_t ks = iparticle->GetStatusCode();
920 p[0] = iparticle->Px();
921 p[1] = iparticle->Py();
922 p[2] = iparticle->Pz();
923 p[3] = iparticle->Energy();
925 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
926 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
927 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
929 Float_t tof = fTime + kconv*iparticle->T();
930 Int_t ipa = iparticle->GetFirstMother()-1;
931 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
933 PushTrack(fTrackIt*trackIt[i], iparent, kf,
934 p[0], p[1], p[2], p[3],
935 origin[0], origin[1], origin[2], tof,
936 polar[0], polar[1], polar[2],
937 kPPrimary, nt, 1., ks);
954 switch (fCountMode) {
956 // printf(" Count all \n");
960 // printf(" Count parents \n");
963 case kCountTrackables:
964 // printf(" Count trackable \n");
968 if (jev >= fNpart || fNpart == -1) {
969 fKineBias=Float_t(fNpart)/Float_t(fTrials);
971 fQ += fPythia->GetVINT(51);
972 fX1 += fPythia->GetVINT(41);
973 fX2 += fPythia->GetVINT(42);
974 fTrialsRun += fTrials;
981 SetHighWaterMark(nt);
982 // adjust weight due to kinematic selection
985 fXsection=fPythia->GetPARI(1);
988 Int_t AliGenPythia::GenerateMB()
991 // Min Bias selection and other global selections
993 Int_t i, kf, nt, iparent;
996 Double_t polar[3] = {0,0,0};
997 Double_t origin[3] = {0,0,0};
998 // converts from mm/c to s
999 const Float_t kconv=0.001/2.999792458e8;
1002 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1006 Int_t* pParent = new Int_t[np];
1007 for (i=0; i< np; i++) pParent[i] = -1;
1008 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1009 && fEtMinJet > 0.) {
1010 TParticle* jet1 = (TParticle *) fParticles.At(6);
1011 TParticle* jet2 = (TParticle *) fParticles.At(7);
1013 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
1020 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
1021 // implemented primaryly for kPyJets, but extended to any kind of process.
1022 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
1023 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
1024 Bool_t ok = TriggerOnSelectedParticles(np);
1032 // Check for diffraction
1034 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1035 if(!CheckDiffraction()) {
1042 // Check for minimum multiplicity
1043 if (fTriggerMultiplicity > 0) {
1044 Int_t multiplicity = 0;
1045 for (i = 0; i < np; i++) {
1046 TParticle * iparticle = (TParticle *) fParticles.At(i);
1048 Int_t statusCode = iparticle->GetStatusCode();
1050 // Initial state particle
1051 if (statusCode != 1)
1054 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1057 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1060 TParticlePDG* pdgPart = iparticle->GetPDG();
1061 if (pdgPart && pdgPart->Charge() == 0)
1067 if (multiplicity < fTriggerMultiplicity) {
1071 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1075 if (fTriggerParticle) {
1076 Bool_t triggered = kFALSE;
1077 for (i = 0; i < np; i++) {
1078 TParticle * iparticle = (TParticle *) fParticles.At(i);
1079 kf = CheckPDGCode(iparticle->GetPdgCode());
1080 if (kf != fTriggerParticle) continue;
1081 if (iparticle->Pt() == 0.) continue;
1082 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1083 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1094 // Check if there is a ccbar or bbbar pair with at least one of the two
1095 // in fYMin < y < fYMax
1097 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1098 TParticle *partCheck;
1100 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1101 Bool_t theChild=kFALSE;
1102 Bool_t triggered=kFALSE;
1104 Int_t pdg,mpdg,mpdgUpperFamily;
1105 for(i=0; i<np; i++) {
1106 partCheck = (TParticle*)fParticles.At(i);
1107 pdg = partCheck->GetPdgCode();
1108 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1109 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1110 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1111 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1112 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1114 if(fTriggerParticle) {
1115 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1117 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1118 Int_t mi = partCheck->GetFirstMother() - 1;
1120 mother = (TParticle*)fParticles.At(mi);
1121 mpdg=TMath::Abs(mother->GetPdgCode());
1122 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1123 if ( ParentSelected(mpdg) ||
1124 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1125 if (KinematicSelection(partCheck,1)) {
1131 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1135 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1139 if(fTriggerParticle && !triggered) { // particle requested is not produced
1146 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1148 fProcess == kPyWPWHG ||
1151 fProcess == kPyZgamma ||
1152 fProcess == kPyMbDefault ||
1153 fProcess == kPyMb ||
1154 fProcess == kPyMbAtlasTuneMC09 ||
1155 fProcess == kPyMbWithDirectPhoton ||
1156 fProcess == kPyMbNonDiffr)
1157 && (fCutOnChild == 1) ) {
1158 if ( !CheckKinematicsOnChild() ) {
1165 for (i = 0; i < np; i++) {
1167 TParticle * iparticle = (TParticle *) fParticles.At(i);
1168 kf = CheckPDGCode(iparticle->GetPdgCode());
1169 Int_t ks = iparticle->GetStatusCode();
1170 Int_t km = iparticle->GetFirstMother();
1172 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1173 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1177 if (ks == 1) trackIt = 1;
1178 Int_t ipa = iparticle->GetFirstMother()-1;
1180 iparent = (ipa > -1) ? pParent[ipa] : -1;
1183 // store track information
1184 p[0] = iparticle->Px();
1185 p[1] = iparticle->Py();
1186 p[2] = iparticle->Pz();
1187 p[3] = iparticle->Energy();
1190 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1191 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1192 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1194 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1196 PushTrack(fTrackIt*trackIt, iparent, kf,
1197 p[0], p[1], p[2], p[3],
1198 origin[0], origin[1], origin[2], tof,
1199 polar[0], polar[1], polar[2],
1200 kPPrimary, nt, 1., ks);
1204 SetHighWaterMark(nt);
1206 } // select particle
1215 void AliGenPythia::FinishRun()
1217 // Print x-section summary
1226 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1227 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1230 void AliGenPythia::AdjustWeights() const
1232 // Adjust the weights after generation of all events
1236 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1237 for (Int_t i=0; i<ntrack; i++) {
1238 part= gAlice->GetMCApp()->Particle(i);
1239 part->SetWeight(part->GetWeight()*fKineBias);
1244 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1246 // Treat protons as inside nuclei with mass numbers a1 and a2
1250 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1251 fUseNuclearPDF = kTRUE;
1256 void AliGenPythia::MakeHeader()
1259 // Make header for the simulated event
1262 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1263 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1266 // Builds the event header, to be called after each event
1267 if (fHeader) delete fHeader;
1268 fHeader = new AliGenPythiaEventHeader("Pythia");
1272 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1273 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1274 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1277 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1280 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1283 fHeader->SetPrimaryVertex(fVertex);
1284 fHeader->SetInteractionTime(fTime+fEventTime);
1286 // Number of primaries
1287 fHeader->SetNProduced(fNprimaries);
1290 fHeader->SetEventWeight(fPythia->GetVINT(97));
1292 // Jets that have triggered
1294 //Need to store jets for b-jet studies too!
1295 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1298 Float_t jets[4][10];
1299 GetJets(njet, ntrig, jets);
1302 for (Int_t i = 0; i < ntrig; i++) {
1303 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1308 // Copy relevant information from external header, if present.
1313 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1314 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1316 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1319 exHeader->TriggerJet(i, uqJet);
1320 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1324 // Store quenching parameters
1327 Double_t z[4] = {0.};
1333 fPythia->GetQuenchingParameters(xp, yp, z);
1334 } else if (fQuench == 2){
1336 Double_t r1 = PARIMP.rb1;
1337 Double_t r2 = PARIMP.rb2;
1338 Double_t b = PARIMP.b1;
1339 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1340 Double_t phi = PARIMP.psib1;
1341 xp = r * TMath::Cos(phi);
1342 yp = r * TMath::Sin(phi);
1344 } else if (fQuench == 4) {
1348 AliFastGlauber::Instance()->GetSavedXY(xy);
1349 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1352 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1355 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1356 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1359 // Store pt^hard and cross-section
1360 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1361 ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
1364 // Store Event Weight
1365 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
1374 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1376 // Check the kinematic trigger condition
1379 eta[0] = jet1->Eta();
1380 eta[1] = jet2->Eta();
1382 phi[0] = jet1->Phi();
1383 phi[1] = jet2->Phi();
1385 pdg[0] = jet1->GetPdgCode();
1386 pdg[1] = jet2->GetPdgCode();
1387 Bool_t triggered = kFALSE;
1389 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1392 Float_t jets[4][10];
1394 // Use Pythia clustering on parton level to determine jet axis
1396 GetJets(njets, ntrig, jets);
1398 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1403 if (pdg[0] == kGamma) {
1407 //Check eta range first...
1408 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1409 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1411 //Eta is okay, now check phi range
1412 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1413 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1424 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1426 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1428 Bool_t checking = kFALSE;
1429 Int_t j, kcode, ks, km;
1430 Int_t nPartAcc = 0; //number of particles in the acceptance range
1431 Int_t numberOfAcceptedParticles = 1;
1432 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1433 Int_t npart = fParticles.GetEntriesFast();
1435 for (j = 0; j<npart; j++) {
1436 TParticle * jparticle = (TParticle *) fParticles.At(j);
1437 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1438 ks = jparticle->GetStatusCode();
1439 km = jparticle->GetFirstMother();
1441 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1444 if( numberOfAcceptedParticles <= nPartAcc){
1453 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1456 // Load event into Pythia Common Block
1459 Int_t npart = stack -> GetNprimary();
1463 (fPythia->GetPyjets())->N = npart;
1465 n0 = (fPythia->GetPyjets())->N;
1466 (fPythia->GetPyjets())->N = n0 + npart;
1470 for (Int_t part = 0; part < npart; part++) {
1471 TParticle *mPart = stack->Particle(part);
1473 Int_t kf = mPart->GetPdgCode();
1474 Int_t ks = mPart->GetStatusCode();
1475 Int_t idf = mPart->GetFirstDaughter();
1476 Int_t idl = mPart->GetLastDaughter();
1479 if (ks == 11 || ks == 12) {
1486 Float_t px = mPart->Px();
1487 Float_t py = mPart->Py();
1488 Float_t pz = mPart->Pz();
1489 Float_t e = mPart->Energy();
1490 Float_t m = mPart->GetCalcMass();
1493 (fPythia->GetPyjets())->P[0][part+n0] = px;
1494 (fPythia->GetPyjets())->P[1][part+n0] = py;
1495 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1496 (fPythia->GetPyjets())->P[3][part+n0] = e;
1497 (fPythia->GetPyjets())->P[4][part+n0] = m;
1499 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1500 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1501 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1502 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1503 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1507 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1510 // Load event into Pythia Common Block
1513 Int_t npart = stack -> GetEntries();
1517 (fPythia->GetPyjets())->N = npart;
1519 n0 = (fPythia->GetPyjets())->N;
1520 (fPythia->GetPyjets())->N = n0 + npart;
1524 for (Int_t part = 0; part < npart; part++) {
1525 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1526 if (!mPart) continue;
1528 Int_t kf = mPart->GetPdgCode();
1529 Int_t ks = mPart->GetStatusCode();
1530 Int_t idf = mPart->GetFirstDaughter();
1531 Int_t idl = mPart->GetLastDaughter();
1534 if (ks == 11 || ks == 12) {
1541 Float_t px = mPart->Px();
1542 Float_t py = mPart->Py();
1543 Float_t pz = mPart->Pz();
1544 Float_t e = mPart->Energy();
1545 Float_t m = mPart->GetCalcMass();
1548 (fPythia->GetPyjets())->P[0][part+n0] = px;
1549 (fPythia->GetPyjets())->P[1][part+n0] = py;
1550 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1551 (fPythia->GetPyjets())->P[3][part+n0] = e;
1552 (fPythia->GetPyjets())->P[4][part+n0] = m;
1554 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1555 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1556 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1557 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1558 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1563 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1566 // Calls the Pythia jet finding algorithm to find jets in the current event
1571 Int_t n = fPythia->GetN();
1575 fPythia->Pycell(njets);
1577 for (i = 0; i < njets; i++) {
1578 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1579 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1580 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1581 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1592 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1595 // Calls the Pythia clustering algorithm to find jets in the current event
1597 Int_t n = fPythia->GetN();
1600 if (fJetReconstruction == kCluster) {
1602 // Configure cluster algorithm
1604 fPythia->SetPARU(43, 2.);
1605 fPythia->SetMSTU(41, 1);
1607 // Call cluster algorithm
1609 fPythia->Pyclus(nJets);
1611 // Loading jets from common block
1617 fPythia->Pycell(nJets);
1621 for (i = 0; i < nJets; i++) {
1622 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1623 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1624 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1625 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1626 Float_t pt = TMath::Sqrt(px * px + py * py);
1627 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1628 Float_t theta = TMath::ATan2(pt,pz);
1629 Float_t et = e * TMath::Sin(theta);
1630 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1632 eta > fEtaMinJet && eta < fEtaMaxJet &&
1633 phi > fPhiMinJet && phi < fPhiMaxJet &&
1634 et > fEtMinJet && et < fEtMaxJet
1637 jets[0][nJetsTrig] = px;
1638 jets[1][nJetsTrig] = py;
1639 jets[2][nJetsTrig] = pz;
1640 jets[3][nJetsTrig] = e;
1642 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1644 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1649 void AliGenPythia::GetSubEventTime()
1651 // Calculates time of the next subevent
1654 TArrayF &array = *fEventsTime;
1655 fEventTime = array[fCurSubEvent++];
1657 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1661 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1663 // Is particle in Central Barrel acceptance?
1665 if( eta < fTriggerEta )
1671 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1673 // Is particle in EMCAL acceptance?
1674 // phi in degrees, etamin=-etamax
1675 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1682 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1684 // Is particle in PHOS acceptance?
1685 // Acceptance slightly larger considered.
1686 // phi in degrees, etamin=-etamax
1687 // iparticle is the index of the particle to be checked, for PHOS rotation case
1689 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1694 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1700 void AliGenPythia::RotatePhi(Bool_t& okdd)
1702 //Rotate event in phi to enhance events in PHOS acceptance
1704 if(fPHOSRotateCandidate < 0) return ;
1706 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1707 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1708 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1709 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1711 //calculate deltaphi
1712 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1713 Double_t phphi = ph->Phi();
1714 Double_t deltaphi = phiPHOS - phphi;
1718 //loop for all particles and produce the phi rotation
1719 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1720 Double_t oldphi, newphi;
1721 Double_t newVx, newVy, r, vZ, time;
1722 Double_t newPx, newPy, pt, pz, e;
1723 for(Int_t i=0; i< np; i++) {
1724 TParticle* iparticle = (TParticle *) fParticles.At(i);
1725 oldphi = iparticle->Phi();
1726 newphi = oldphi + deltaphi;
1727 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1728 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1731 newVx = r * TMath::Cos(newphi);
1732 newVy = r * TMath::Sin(newphi);
1733 vZ = iparticle->Vz(); // don't transform
1734 time = iparticle->T(); // don't transform
1736 pt = iparticle->Pt();
1737 newPx = pt * TMath::Cos(newphi);
1738 newPy = pt * TMath::Sin(newphi);
1739 pz = iparticle->Pz(); // don't transform
1740 e = iparticle->Energy(); // don't transform
1743 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1744 iparticle->SetMomentum(newPx, newPy, pz, e);
1746 } //end particle loop
1748 // now let's check that we put correctly the candidate photon in PHOS
1749 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1750 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1751 if(IsInPHOS(phi,eta,-1))
1754 // reset the value for next event
1755 fPHOSRotateCandidate = -1;
1760 Bool_t AliGenPythia::CheckDiffraction()
1762 // use this method only with Perugia-0 tune!
1766 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1772 Double_t y2 = -1e10;
1774 const Int_t kNstable=20;
1775 const Int_t pdgStable[20] = {
1778 12, // Electron Neutrino
1780 14, // Muon Neutrino
1791 3112, // Sigma Minus
1798 for (Int_t i = 0; i < np; i++) {
1799 TParticle * part = (TParticle *) fParticles.At(i);
1801 Int_t statusCode = part->GetStatusCode();
1803 // Initial state particle
1804 if (statusCode != 1)
1807 Int_t pdg = TMath::Abs(part->GetPdgCode());
1808 Bool_t isStable = kFALSE;
1809 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1810 if (pdg == pdgStable[i1]) {
1818 Double_t y = part->Y();
1832 if(iPart1<0 || iPart2<0) return kFALSE;
1837 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1838 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1840 Int_t pdg1 = part1->GetPdgCode();
1841 Int_t pdg2 = part2->GetPdgCode();
1845 if (pdg1 == 2212 && pdg2 == 2212)
1853 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1856 else if (pdg1 == 2212)
1858 else if (pdg2 == 2212)
1867 TParticle * part = (TParticle *) fParticles.At(iPart);
1868 Double_t E= part->Energy();
1869 Double_t P= part->P();
1870 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1871 if(M2<0) return kFALSE;
1875 Double_t Mmin, Mmax, wSD, wDD, wND;
1876 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1878 if(M>-1 && M<Mmin) return kFALSE;
1881 Int_t procType=fPythia->GetMSTI(1);
1883 if(procType== 94) proc0=1;
1884 if(procType== 92 || procType== 93) proc0=0;
1888 else if(proc0==1) proc=1;
1890 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1891 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1894 // if(proc==1 || proc==2) return kFALSE;
1897 if(proc0!=0) fProcDiff = procType;
1898 else fProcDiff = 95;
1902 if(wSD<0) AliError("wSD<0 ! \n");
1904 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1906 // printf("iPart = %d\n", iPart);
1908 if(iPart==iPart1) fProcDiff=93;
1909 else if(iPart==iPart2) fProcDiff=92;
1911 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1920 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1921 Double_t &wSD, Double_t &wDD, Double_t &wND)
1925 if(TMath::Abs(fEnergyCMS-900)<1 ){
1927 const Int_t nbin=400;
1929 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1930 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1931 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1932 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1933 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1934 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1935 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1936 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1937 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1938 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1939 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1940 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1941 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1942 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1943 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1944 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1945 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1946 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1947 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1948 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1949 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1950 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1951 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1952 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1953 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1954 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1955 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1956 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1957 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1958 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1959 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1960 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1961 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1962 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1963 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1964 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1965 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1966 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1967 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1968 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1969 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1970 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1971 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1972 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1973 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1974 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1975 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1976 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1977 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1978 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1979 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1980 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1981 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1982 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
1983 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
1984 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
1985 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
1986 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
1987 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
1988 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
1989 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
1990 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
1991 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
1992 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
1993 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
1994 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
1995 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
1997 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
1998 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
1999 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
2000 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
2001 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
2002 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
2003 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
2004 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
2005 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
2006 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
2007 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
2008 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
2009 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
2010 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
2011 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
2012 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
2013 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
2014 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
2015 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
2016 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
2017 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
2018 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
2019 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
2020 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
2021 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
2022 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
2023 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
2024 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
2025 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
2026 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
2027 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
2028 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
2029 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
2030 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
2031 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
2032 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
2033 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
2034 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2035 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2036 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2037 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2038 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2039 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2040 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2041 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2042 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2043 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2044 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2045 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2046 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2047 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2048 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2049 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2050 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2051 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2052 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2053 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2054 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2055 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2056 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2057 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2058 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2059 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2060 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2061 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2062 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2063 0.386112, 0.364314, 0.434375, 0.334629};
2070 if(M<Mmin || M>Mmax) return kTRUE;
2073 for(Int_t i=1; i<=nbin; i++)
2076 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2082 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2084 const Int_t nbin=400;
2086 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2087 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2088 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2089 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2090 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2091 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2092 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2093 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2094 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2095 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2096 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2097 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2098 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2099 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2100 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2101 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2102 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2103 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2104 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2105 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2106 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2107 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2108 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2109 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2110 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2111 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2112 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2113 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2114 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2115 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2116 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2117 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2118 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2119 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2120 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2121 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2122 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2123 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2124 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2125 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2126 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2127 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2128 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2129 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2130 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2131 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2132 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2133 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2134 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2135 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2136 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2137 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2138 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2139 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2140 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2141 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2142 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2143 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2144 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2145 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2146 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2147 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2148 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2149 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2150 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2151 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2152 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2154 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2155 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2156 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2157 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2158 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2159 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2160 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2161 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2162 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2163 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2164 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2165 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2166 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2167 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2168 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2169 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2170 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2171 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2172 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2173 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2174 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2175 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2176 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2177 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2178 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2179 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2180 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2181 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2182 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2183 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2184 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2185 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2186 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2187 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2188 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2189 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2190 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2191 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2192 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2193 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2194 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2195 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2196 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2197 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2198 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2199 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2200 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2201 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2202 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2203 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2204 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2205 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2206 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2207 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2208 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2209 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2210 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2211 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2212 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2213 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2214 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2215 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2216 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2217 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2218 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2219 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2220 0.201712, 0.242225, 0.255565, 0.258738};
2227 if(M<Mmin || M>Mmax) return kTRUE;
2230 for(Int_t i=1; i<=nbin; i++)
2233 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2241 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2242 const Int_t nbin=400;
2244 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2245 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2246 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2247 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2248 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2249 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2250 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2251 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2252 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2253 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2254 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2255 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2256 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2257 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2258 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2259 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2260 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2261 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2262 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2263 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2264 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2265 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2266 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2267 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2268 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2269 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2270 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2271 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2272 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2273 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2274 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2275 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2276 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2277 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2278 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2279 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2280 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2281 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2282 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2283 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2284 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2285 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2286 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2287 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2288 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2289 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2290 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2291 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2292 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2293 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2294 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2295 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2296 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2297 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2298 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2299 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2300 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2301 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2302 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2303 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2304 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2305 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2306 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2307 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2308 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2309 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2310 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2312 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2313 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2314 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2315 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2316 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2317 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2318 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2319 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2320 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2321 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2322 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2323 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2324 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2325 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2326 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2327 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2328 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2329 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2330 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2331 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2332 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2333 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2334 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2335 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2336 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2337 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2338 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2339 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2340 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2341 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2342 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2343 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2344 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2345 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2346 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2347 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2348 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2349 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2350 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2351 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2352 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2353 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2354 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2355 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2356 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2357 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2358 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2359 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2360 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2361 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2362 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2363 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2364 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2365 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2366 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2367 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2368 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2369 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2370 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2371 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2372 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2373 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2374 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2375 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2376 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2377 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2378 0.175006, 0.223482, 0.202706, 0.218108};
2386 if(M<Mmin || M>Mmax) return kTRUE;
2389 for(Int_t i=1; i<=nbin; i++)
2392 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2402 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2404 // Check if this is a heavy flavor decay product
2405 TParticle * part = (TParticle *) fParticles.At(ipart);
2406 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2407 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2410 if (mfl >= 4 && mfl < 6) return kTRUE;
2412 Int_t imo = part->GetFirstMother()-1;
2413 TParticle* pm = part;
2415 // Heavy flavor hadron produced by generator
2417 pm = (TParticle*)fParticles.At(imo);
2418 mpdg = TMath::Abs(pm->GetPdgCode());
2419 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2420 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2421 imo = pm->GetFirstMother()-1;
2426 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2428 // check the eta/phi correspond to the detectors acceptance
2429 // iparticle is the index of the particle to be checked, for PHOS rotation case
2430 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2431 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2432 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2436 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2438 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2439 // implemented primaryly for kPyJets, but extended to any kind of process.
2441 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2442 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2445 for (Int_t i=0; i< np; i++) {
2447 TParticle* iparticle = (TParticle *) fParticles.At(i);
2449 Int_t pdg = iparticle->GetPdgCode();
2450 Int_t status = iparticle->GetStatusCode();
2451 Int_t imother = iparticle->GetFirstMother() - 1;
2453 TParticle* pmother = 0x0;
2454 Int_t momStatus = -1;
2457 pmother = (TParticle *) fParticles.At(imother);
2458 momStatus = pmother->GetStatusCode();
2459 momPdg = pmother->GetPdgCode();
2465 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2468 if (fHadronInCalo && status == 1)
2470 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2471 // (in case neutral mesons were declared stable)
2475 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2479 //Fragmentation photon
2480 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2482 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2485 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2487 if( momStatus == 11)
2489 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2490 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2491 ok = kTRUE ; // photon from hadron decay
2493 //In case only decays from pi0 or eta requested
2494 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2495 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2499 // Pi0 or Eta particle
2500 else if ((fPi0InCalo || fEtaInCalo))
2502 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2504 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2506 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2509 else if (fEtaInCalo && pdg == 221)
2511 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2518 // Check that the selected particle is in the calorimeter acceptance
2520 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2522 //Just check if the selected particle falls in the acceptance
2523 if(!fForceNeutralMeson2PhotonDecay )
2525 //printf("\t Check acceptance! \n");
2526 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2527 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2529 if(CheckDetectorAcceptance(phi,eta,i))
2532 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));
2533 //printf("\t Accept \n");
2538 //Mesons have several decay modes, select only those decaying into 2 photons
2539 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2541 // In case we want the pi0/eta trigger,
2542 // check the decay mode (2 photons)
2544 //printf("\t Force decay 2 gamma\n");
2546 Int_t ndaughters = iparticle->GetNDaughters();
2547 if(ndaughters != 2){
2552 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2553 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2559 //iparticle->Print();
2563 Int_t pdgD1 = d1->GetPdgCode();
2564 Int_t pdgD2 = d2->GetPdgCode();
2565 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2566 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2568 if(pdgD1 != 22 || pdgD2 != 22){
2573 //printf("\t accept decay\n");
2575 //Trigger on the meson, not on the daughter
2576 if(!fDecayPhotonInCalo){
2578 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2579 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2581 if(CheckDetectorAcceptance(phi,eta,i))
2583 //printf("\t Accept meson pdg %d\n",pdg);
2585 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));
2593 //printf("Check daughters acceptance\n");
2595 //Trigger on the meson daughters
2597 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2598 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2599 if(d1->Pt() > fTriggerParticleMinPt)
2601 //printf("\t Check acceptance photon 1! \n");
2602 if(CheckDetectorAcceptance(phi,eta,i))
2604 //printf("\t Accept Photon 1\n");
2606 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));
2614 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2615 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2617 if(d2->Pt() > fTriggerParticleMinPt)
2619 //printf("\t Check acceptance photon 2! \n");
2620 if(CheckDetectorAcceptance(phi,eta,i))
2622 //printf("\t Accept Photon 2\n");
2624 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));
2630 } // force 2 photon daughters in pi0/eta decays
2632 } else ok = kFALSE; // check acceptance
2636 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2637 // A particle passing all trigger conditions except phi position in PHOS, is used as reference