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),
133 fTriggerMultiplicity(0),
134 fTriggerMultiplicityEta(0),
135 fTriggerMultiplicityEtaMin(0),
136 fTriggerMultiplicityEtaMax(0),
137 fTriggerMultiplicityPtMin(0),
138 fCountMode(kCountAll),
143 fFragPhotonInCalo(kFALSE),
144 fHadronInCalo(kFALSE) ,
147 fPhotonInCalo(kFALSE), // not in use
148 fDecayPhotonInCalo(kFALSE),
149 fForceNeutralMeson2PhotonDecay(kFALSE),
151 fEleInEMCAL(kFALSE), // not in use
152 fCheckBarrel(kFALSE),
155 fCheckPHOSeta(kFALSE),
156 fPHOSRotateCandidate(-1),
157 fTriggerParticleMinPt(0),
158 fPhotonMinPt(0), // not in use
159 fElectronMinPt(0), // not in use
169 // Default Constructor
171 if (!AliPythiaRndm::GetPythiaRandom())
172 AliPythiaRndm::SetPythiaRandom(GetRandom());
175 AliGenPythia::AliGenPythia(Int_t npart)
187 fInteractionRate(0.),
202 fHadronisation(kTRUE),
203 fPatchOmegaDalitz(0),
206 fReadFromFile(kFALSE),
219 fDecayer(new AliDecayerPythia()),
220 fDebugEventFirst(-1),
227 fPhiMaxJet(2.* TMath::Pi()),
228 fJetReconstruction(kCell),
232 fPhiMaxGamma(2. * TMath::Pi()),
236 fPycellThreshold(0.),
238 fPycellMinEtJet(10.),
239 fPycellMaxRadius(1.),
240 fStackFillOpt(kFlavorSelection),
242 fFragmentation(kTRUE),
244 fUseNuclearPDF(kFALSE),
245 fUseLorentzBoost(kTRUE),
255 fTriggerMultiplicity(0),
256 fTriggerMultiplicityEta(0),
257 fTriggerMultiplicityEtaMin(0),
258 fTriggerMultiplicityEtaMax(0),
259 fTriggerMultiplicityPtMin(0),
260 fCountMode(kCountAll),
265 fFragPhotonInCalo(kFALSE),
266 fHadronInCalo(kFALSE) ,
269 fPhotonInCalo(kFALSE), // not in use
270 fDecayPhotonInCalo(kFALSE),
271 fForceNeutralMeson2PhotonDecay(kFALSE),
273 fEleInEMCAL(kFALSE), // not in use
274 fCheckBarrel(kFALSE),
277 fCheckPHOSeta(kFALSE),
278 fPHOSRotateCandidate(-1),
279 fTriggerParticleMinPt(0),
280 fPhotonMinPt(0), // not in use
281 fElectronMinPt(0), // not in use
291 // default charm production at 5. 5 TeV
293 // structure function GRVHO
297 fTitle= "Particle Generator using PYTHIA";
299 // Set random number generator
300 if (!AliPythiaRndm::GetPythiaRandom())
301 AliPythiaRndm::SetPythiaRandom(GetRandom());
304 AliGenPythia::~AliGenPythia()
307 if(fEventsTime) delete fEventsTime;
310 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
312 // Generate pileup using user specified rate
313 fInteractionRate = rate;
314 fTimeWindow = timewindow;
318 void AliGenPythia::GeneratePileup()
320 // Generate sub events time for pileup
322 if(fInteractionRate == 0.) {
323 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
327 Int_t npart = NumberParticles();
329 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
333 if(fEventsTime) delete fEventsTime;
334 fEventsTime = new TArrayF(npart);
335 TArrayF &array = *fEventsTime;
336 for(Int_t ipart = 0; ipart < npart; ipart++)
339 Float_t eventtime = 0.;
342 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
343 if(eventtime > fTimeWindow) break;
344 array.Set(array.GetSize()+1);
345 array[array.GetSize()-1] = eventtime;
351 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
352 if(TMath::Abs(eventtime) > fTimeWindow) break;
353 array.Set(array.GetSize()+1);
354 array[array.GetSize()-1] = eventtime;
357 SetNumberParticles(fEventsTime->GetSize());
360 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
361 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
363 // Set pycell parameters
364 fPycellEtaMax = etamax;
367 fPycellThreshold = thresh;
368 fPycellEtSeed = etseed;
369 fPycellMinEtJet = minet;
370 fPycellMaxRadius = r;
375 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
377 // Set a range of event numbers, for which a table
378 // of generated particle will be printed
379 fDebugEventFirst = eventFirst;
380 fDebugEventLast = eventLast;
381 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
384 void AliGenPythia::Init()
388 SetMC(AliPythia::Instance());
389 fPythia=(AliPythia*) fMCEvGen;
392 fParentWeight=1./Float_t(fNpart);
396 fPythia->SetCKIN(3,fPtHardMin);
397 fPythia->SetCKIN(4,fPtHardMax);
398 fPythia->SetCKIN(7,fYHardMin);
399 fPythia->SetCKIN(8,fYHardMax);
401 if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
404 fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
406 if (fFragmentation) {
407 fPythia->SetMSTP(111,1);
409 fPythia->SetMSTP(111,0);
413 // initial state radiation
414 fPythia->SetMSTP(61,fGinit);
415 // final state radiation
416 fPythia->SetMSTP(71,fGfinal);
417 //color reconnection strength
418 if(fCRoff==1)fPythia->SetMSTP(95,0);
421 fPythia->SetMSTP(91,1);
422 fPythia->SetPARP(91,fPtKick);
423 fPythia->SetPARP(93, 4. * fPtKick);
425 fPythia->SetMSTP(91,0);
428 if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
431 fRL = AliRunLoader::Open(fkFileName, "Partons");
432 fRL->LoadKinematics();
438 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
439 // Forward Paramters to the AliPythia object
440 fDecayer->SetForceDecay(fForceDecay);
441 // Switch off Heavy Flavors on request
443 // Maximum number of quark flavours used in pdf
444 fPythia->SetMSTP(58, 3);
445 // Maximum number of flavors that can be used in showers
446 fPythia->SetMSTJ(45, 3);
447 // Switch off g->QQbar splitting in decay table
448 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
454 // Parent and Children Selection
457 case kPyOldUEQ2ordered:
458 case kPyOldUEQ2ordered2:
462 case kPyCharmUnforced:
463 case kPyCharmPbPbMNR:
466 case kPyCharmppMNRwmi:
468 fParentSelect[0] = 411;
469 fParentSelect[1] = 421;
470 fParentSelect[2] = 431;
471 fParentSelect[3] = 4122;
472 fParentSelect[4] = 4232;
473 fParentSelect[5] = 4132;
474 fParentSelect[6] = 4332;
480 fParentSelect[0] = 421;
483 case kPyDPlusPbPbMNR:
486 fParentSelect[0] = 411;
489 case kPyDPlusStrangePbPbMNR:
490 case kPyDPlusStrangepPbMNR:
491 case kPyDPlusStrangeppMNR:
492 fParentSelect[0] = 431;
495 case kPyLambdacppMNR:
496 fParentSelect[0] = 4122;
501 case kPyBeautyPbPbMNR:
502 case kPyBeautypPbMNR:
504 case kPyBeautyppMNRwmi:
506 fParentSelect[0]= 511;
507 fParentSelect[1]= 521;
508 fParentSelect[2]= 531;
509 fParentSelect[3]= 5122;
510 fParentSelect[4]= 5132;
511 fParentSelect[5]= 5232;
512 fParentSelect[6]= 5332;
515 case kPyBeautyUnforced:
516 fParentSelect[0] = 511;
517 fParentSelect[1] = 521;
518 fParentSelect[2] = 531;
519 fParentSelect[3] = 5122;
520 fParentSelect[4] = 5132;
521 fParentSelect[5] = 5232;
522 fParentSelect[6] = 5332;
527 fParentSelect[0] = 443;
530 case kPyMbAtlasTuneMC09:
532 case kPyMbWithDirectPhoton:
544 case kPyMBRSingleDiffraction:
545 case kPyMBRDoubleDiffraction:
546 case kPyMBRCentralDiffraction:
551 // JetFinder for Trigger
553 // Configure detector (EMCAL like)
555 fPythia->SetPARU(51, fPycellEtaMax);
556 fPythia->SetMSTU(51, fPycellNEta);
557 fPythia->SetMSTU(52, fPycellNPhi);
559 // Configure Jet Finder
561 fPythia->SetPARU(58, fPycellThreshold);
562 fPythia->SetPARU(52, fPycellEtSeed);
563 fPythia->SetPARU(53, fPycellMinEtJet);
564 fPythia->SetPARU(54, fPycellMaxRadius);
565 fPythia->SetMSTU(54, 2);
567 // This counts the total number of calls to Pyevnt() per run.
578 // Reset Lorentz boost if demanded
579 if(!fUseLorentzBoost) {
581 Warning("Init","Demand to discard Lorentz boost.\n");
588 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
590 fPythia->SetPARJ(200, 0.0);
591 fPythia->SetPARJ(199, 0.0);
592 fPythia->SetPARJ(198, 0.0);
593 fPythia->SetPARJ(197, 0.0);
596 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
599 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
602 // Nestor's change of the splittings
603 fPythia->SetPARJ(200, 0.8);
604 fPythia->SetMSTJ(41, 1); // QCD radiation only
605 fPythia->SetMSTJ(42, 2); // angular ordering
606 fPythia->SetMSTJ(44, 2); // option to run alpha_s
607 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
608 fPythia->SetMSTJ(50, 0); // No coherence in first branching
609 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
610 } else if (fQuench == 4) {
611 // Armesto-Cunqueiro-Salgado change of the splittings.
612 AliFastGlauber* glauber = AliFastGlauber::Instance();
614 //read and store transverse almonds corresponding to differnt
616 glauber->SetCentralityClass(0.,0.1);
617 fPythia->SetPARJ(200, 1.);
618 fPythia->SetPARJ(198, fQhat);
619 fPythia->SetPARJ(199, fLength);
620 fPythia->SetMSTJ(42, 2); // angular ordering
621 fPythia->SetMSTJ(44, 2); // option to run alpha_s
622 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
625 if ( AliLog::GetDebugLevel("","AliGenPythia") >= 1 ) {
631 void AliGenPythia::Generate()
633 // Generate one event
634 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
635 fDecayer->ForceDecay();
637 Double_t polar[3] = {0,0,0};
638 Double_t origin[3] = {0,0,0};
640 // converts from mm/c to s
641 const Float_t kconv=0.001/2.999792458e8;
651 // Set collision vertex position
652 if (fVertexSmear == kPerEvent) Vertex();
661 // Switch hadronisation off
663 fPythia->SetMSTJ(1, 0);
667 // Quenching comes through medium-modified splitting functions.
668 AliFastGlauber::Instance()->GetRandomBHard(bimp);
669 fPythia->SetPARJ(197, bimp);
674 // Either produce new event or read partons from file
676 if (!fReadFromFile) {
682 fNpartons = fPythia->GetN();
684 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
685 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
687 LoadEvent(fRL->Stack(), 0 , 1);
692 // Run quenching routine
696 } else if (fQuench == 2){
697 fPythia->Pyquen(208., 0, 0.);
698 } else if (fQuench == 3) {
699 // Quenching is via multiplicative correction of the splittings
703 // Switch hadronisation on
705 if (fHadronisation) {
706 fPythia->SetMSTJ(1, 1);
708 // .. and perform hadronisation
709 // printf("Calling hadronisation %d\n", fPythia->GetN());
711 if (fPatchOmegaDalitz) {
712 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
714 fPythia->DalitzDecays();
715 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
718 else if (fDecayerExodus) {
720 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 0);
721 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
722 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 0);
724 fPythia->OmegaDalitz();
725 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
726 fPythia->PizeroDalitz();
727 fPythia->PhiDalitz();
728 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 1);
729 fPythia->EtaDalitz();
730 fPythia->EtaprimeDalitz();
731 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 1);
732 fPythia->RhoDirect();
733 fPythia->OmegaDirect();
734 fPythia->PhiDirect();
735 fPythia->JPsiDirect();
741 fPythia->ImportParticles(&fParticles,"All");
743 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
744 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
752 Int_t np = fParticles.GetEntriesFast();
754 if (np == 0) continue;
758 Int_t* pParent = new Int_t[np];
759 Int_t* pSelected = new Int_t[np];
760 Int_t* trackIt = new Int_t[np];
761 for (i = 0; i < np; i++) {
767 Int_t nc = 0; // Total n. of selected particles
768 Int_t nParents = 0; // Selected parents
769 Int_t nTkbles = 0; // Trackable particles
770 if (fProcess != kPyMbDefault &&
772 fProcess != kPyMbAtlasTuneMC09 &&
773 fProcess != kPyMbWithDirectPhoton &&
774 fProcess != kPyJets &&
775 fProcess != kPyDirectGamma &&
776 fProcess != kPyMbNonDiffr &&
777 fProcess != kPyMbMSEL1 &&
780 fProcess != kPyZgamma &&
781 fProcess != kPyCharmppMNRwmi &&
782 fProcess != kPyBeautyppMNRwmi &&
783 fProcess != kPyBeautyJets &&
784 fProcess != kPyWPWHG &&
785 fProcess != kPyJetsPWHG &&
786 fProcess != kPyCharmPWHG &&
787 fProcess != kPyBeautyPWHG) {
789 for (i = 0; i < np; i++) {
790 TParticle* iparticle = (TParticle *) fParticles.At(i);
791 Int_t ks = iparticle->GetStatusCode();
792 kf = CheckPDGCode(iparticle->GetPdgCode());
793 // No initial state partons
794 if (ks==21) continue;
796 // Heavy Flavor Selection
803 if (kfl > 100000) kfl %= 100000;
804 if (kfl > 10000) kfl %= 10000;
806 if (kfl > 10) kfl/=100;
808 if (kfl > 10) kfl/=10;
809 Int_t ipa = iparticle->GetFirstMother()-1;
812 // Establish mother daughter relation between heavy quarks and mesons
814 if (kf >= fFlavorSelect && kf <= 6) {
815 Int_t idau = iparticle->GetFirstDaughter() - 1;
817 TParticle* daughter = (TParticle *) fParticles.At(idau);
818 Int_t pdgD = daughter->GetPdgCode();
819 if (pdgD == 91 || pdgD == 92) {
820 Int_t jmin = daughter->GetFirstDaughter() - 1;
821 Int_t jmax = daughter->GetLastDaughter() - 1;
822 for (Int_t jp = jmin; jp <= jmax; jp++)
823 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
824 } // is string or cluster
830 TParticle * mother = (TParticle *) fParticles.At(ipa);
831 kfMo = TMath::Abs(mother->GetPdgCode());
834 // What to keep in Stack?
835 Bool_t flavorOK = kFALSE;
836 Bool_t selectOK = kFALSE;
838 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
840 if (kfl > fFlavorSelect) {
844 if (kfl == fFlavorSelect) flavorOK = kTRUE;
846 switch (fStackFillOpt) {
848 case kFlavorSelection:
851 case kParentSelection:
852 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
855 if (flavorOK && selectOK) {
857 // Heavy flavor hadron or quark
859 // Kinematic seletion on final state heavy flavor mesons
860 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
865 if (ParentSelected(kf)) ++nParents; // Update parent count
866 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
868 // Kinematic seletion on decay products
869 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
870 && !KinematicSelection(iparticle, 1))
876 // Select if mother was selected and is not tracked
878 if (pSelected[ipa] &&
879 !trackIt[ipa] && // mother will be tracked ?
880 kfMo != 5 && // mother is b-quark, don't store fragments
881 kfMo != 4 && // mother is c-quark, don't store fragments
882 kf != 92) // don't store string
885 // Semi-stable or de-selected: diselect decay products:
888 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
890 Int_t ipF = iparticle->GetFirstDaughter();
891 Int_t ipL = iparticle->GetLastDaughter();
892 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
894 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
895 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
898 if (pSelected[i] == -1) pSelected[i] = 0;
899 if (!pSelected[i]) continue;
900 // Count quarks only if you did not include fragmentation
901 if (fFragmentation && kf <= 10) continue;
904 // Decision on tracking
907 // Track final state particle
908 if (ks == 1) trackIt[i] = 1;
909 // Track semi-stable particles
910 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
911 // Track particles selected by process if undecayed.
912 if (fForceDecay == kNoDecay) {
913 if (ParentSelected(kf)) trackIt[i] = 1;
915 if (ParentSelected(kf)) trackIt[i] = 0;
917 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
921 } // particle selection loop
923 for (i = 0; i<np; i++) {
924 if (!pSelected[i]) continue;
925 TParticle * iparticle = (TParticle *) fParticles.At(i);
926 kf = CheckPDGCode(iparticle->GetPdgCode());
927 Int_t ks = iparticle->GetStatusCode();
928 p[0] = iparticle->Px();
929 p[1] = iparticle->Py();
930 p[2] = iparticle->Pz();
931 p[3] = iparticle->Energy();
933 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
934 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
935 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
937 Float_t tof = fTime + kconv*iparticle->T();
938 Int_t ipa = iparticle->GetFirstMother()-1;
939 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
941 PushTrack(fTrackIt*trackIt[i], iparent, kf,
942 p[0], p[1], p[2], p[3],
943 origin[0], origin[1], origin[2], tof,
944 polar[0], polar[1], polar[2],
945 kPPrimary, nt, 1., ks);
962 switch (fCountMode) {
964 // printf(" Count all \n");
968 // printf(" Count parents \n");
971 case kCountTrackables:
972 // printf(" Count trackable \n");
976 if (jev >= fNpart || fNpart == -1) {
977 fKineBias=Float_t(fNpart)/Float_t(fTrials);
979 fQ += fPythia->GetVINT(51);
980 fX1 += fPythia->GetVINT(41);
981 fX2 += fPythia->GetVINT(42);
982 fTrialsRun += fTrials;
989 SetHighWaterMark(nt);
990 // adjust weight due to kinematic selection
993 fXsection=fPythia->GetPARI(1);
996 Int_t AliGenPythia::GenerateMB()
999 // Min Bias selection and other global selections
1001 Int_t i, kf, nt, iparent;
1004 Double_t polar[3] = {0,0,0};
1005 Double_t origin[3] = {0,0,0};
1006 // converts from mm/c to s
1007 const Float_t kconv=0.001/2.999792458e8;
1010 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1014 Int_t* pParent = new Int_t[np];
1015 for (i=0; i< np; i++) pParent[i] = -1;
1016 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1017 && fEtMinJet > 0.) {
1018 TParticle* jet1 = (TParticle *) fParticles.At(6);
1019 TParticle* jet2 = (TParticle *) fParticles.At(7);
1021 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
1028 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
1029 // implemented primaryly for kPyJets, but extended to any kind of process.
1030 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
1031 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
1032 Bool_t ok = TriggerOnSelectedParticles(np);
1040 // Check for diffraction
1042 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1043 if(!CheckDiffraction()) {
1050 // Check for minimum multiplicity
1051 if (fTriggerMultiplicity > 0) {
1052 Int_t multiplicity = 0;
1053 for (i = 0; i < np; i++) {
1054 TParticle * iparticle = (TParticle *) fParticles.At(i);
1056 Int_t statusCode = iparticle->GetStatusCode();
1058 // Initial state particle
1059 if (statusCode != 1)
1062 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1064 //multiplicity check for a given eta range
1065 if ((fTriggerMultiplicityEtaMin != fTriggerMultiplicityEtaMax) &&
1066 (iparticle->Eta() < fTriggerMultiplicityEtaMin || iparticle->Eta() > fTriggerMultiplicityEtaMax))
1069 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1072 TParticlePDG* pdgPart = iparticle->GetPDG();
1073 if (pdgPart && pdgPart->Charge() == 0)
1079 if (multiplicity < fTriggerMultiplicity) {
1083 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1087 if (fTriggerParticle) {
1088 Bool_t triggered = kFALSE;
1089 for (i = 0; i < np; i++) {
1090 TParticle * iparticle = (TParticle *) fParticles.At(i);
1091 kf = CheckPDGCode(iparticle->GetPdgCode());
1092 if (kf != fTriggerParticle) continue;
1093 if (iparticle->Pt() == 0.) continue;
1094 if (TMath::Abs(iparticle->Y()) > fTriggerY) continue;
1095 if (fTriggerEtaMin == fTriggerEta) {
1096 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1098 if (iparticle->Eta() > fTriggerEta || iparticle->Eta() < fTriggerEtaMin) continue;
1100 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1111 // Check if there is a ccbar or bbbar pair with at least one of the two
1112 // in fYMin < y < fYMax
1114 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1115 TParticle *partCheck;
1117 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1118 Bool_t theChild=kFALSE;
1119 Bool_t triggered=kFALSE;
1121 Int_t pdg, mpdg, mpdgUpperFamily;
1122 for(i = 0; i < np; i++) {
1123 partCheck = (TParticle*)fParticles.At(i);
1124 pdg = partCheck->GetPdgCode();
1125 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1126 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1127 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1128 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1129 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1131 if(fTriggerParticle) {
1132 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1134 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1135 Int_t mi = partCheck->GetFirstMother() - 1;
1137 mother = (TParticle*)fParticles.At(mi);
1138 mpdg=TMath::Abs(mother->GetPdgCode());
1139 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1140 if ( ParentSelected(mpdg) ||
1141 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1142 if (KinematicSelection(partCheck,1)) {
1148 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1152 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1156 if(fTriggerParticle && !triggered) { // particle requested is not produced
1163 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1165 fProcess == kPyWPWHG ||
1168 fProcess == kPyZgamma ||
1169 fProcess == kPyMbDefault ||
1170 fProcess == kPyMb ||
1171 fProcess == kPyMbAtlasTuneMC09 ||
1172 fProcess == kPyMbWithDirectPhoton ||
1173 fProcess == kPyMbNonDiffr)
1174 && (fCutOnChild == 1) ) {
1175 if ( !CheckKinematicsOnChild() ) {
1182 for (i = 0; i < np; i++) {
1184 TParticle * iparticle = (TParticle *) fParticles.At(i);
1185 kf = CheckPDGCode(iparticle->GetPdgCode());
1186 Int_t ks = iparticle->GetStatusCode();
1187 Int_t km = iparticle->GetFirstMother();
1189 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1190 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1194 if (ks == 1) trackIt = 1;
1195 Int_t ipa = iparticle->GetFirstMother()-1;
1197 iparent = (ipa > -1) ? pParent[ipa] : -1;
1200 // store track information
1201 p[0] = iparticle->Px();
1202 p[1] = iparticle->Py();
1203 p[2] = iparticle->Pz();
1204 p[3] = iparticle->Energy();
1207 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1208 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1209 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1211 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1213 PushTrack(fTrackIt*trackIt, iparent, kf,
1214 p[0], p[1], p[2], p[3],
1215 origin[0], origin[1], origin[2], tof,
1216 polar[0], polar[1], polar[2],
1217 kPPrimary, nt, 1., ks);
1221 SetHighWaterMark(nt);
1223 } // select particle
1232 void AliGenPythia::FinishRun()
1234 // Print x-section summary
1243 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1244 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1247 void AliGenPythia::AdjustWeights() const
1249 // Adjust the weights after generation of all events
1253 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1254 for (Int_t i=0; i<ntrack; i++) {
1255 part= gAlice->GetMCApp()->Particle(i);
1256 part->SetWeight(part->GetWeight()*fKineBias);
1261 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1263 // Treat protons as inside nuclei with mass numbers a1 and a2
1267 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1268 fUseNuclearPDF = kTRUE;
1273 void AliGenPythia::MakeHeader()
1276 // Make header for the simulated event
1279 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1280 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1283 // Builds the event header, to be called after each event
1284 if (fHeader) delete fHeader;
1285 fHeader = new AliGenPythiaEventHeader("Pythia");
1289 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1290 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1291 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1294 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1297 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1300 fHeader->SetPrimaryVertex(fVertex);
1301 fHeader->SetInteractionTime(fTime+fEventTime);
1303 // Number of primaries
1304 fHeader->SetNProduced(fNprimaries);
1307 fHeader->SetEventWeight(fPythia->GetVINT(97));
1309 // Jets that have triggered
1311 //Need to store jets for b-jet studies too!
1312 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1315 Float_t jets[4][10];
1316 GetJets(njet, ntrig, jets);
1319 for (Int_t i = 0; i < ntrig; i++) {
1320 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1325 // Copy relevant information from external header, if present.
1330 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1331 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1333 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1336 exHeader->TriggerJet(i, uqJet);
1337 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1341 // Store quenching parameters
1344 Double_t z[4] = {0.};
1350 fPythia->GetQuenchingParameters(xp, yp, z);
1351 } else if (fQuench == 2){
1353 Double_t r1 = PARIMP.rb1;
1354 Double_t r2 = PARIMP.rb2;
1355 Double_t b = PARIMP.b1;
1356 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1357 Double_t phi = PARIMP.psib1;
1358 xp = r * TMath::Cos(phi);
1359 yp = r * TMath::Sin(phi);
1361 } else if (fQuench == 4) {
1365 AliFastGlauber::Instance()->GetSavedXY(xy);
1366 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1369 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1372 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1373 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1376 // Store pt^hard and cross-section
1377 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1378 ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
1381 // Store Event Weight
1382 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
1391 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1393 // Check the kinematic trigger condition
1396 eta[0] = jet1->Eta();
1397 eta[1] = jet2->Eta();
1399 phi[0] = jet1->Phi();
1400 phi[1] = jet2->Phi();
1402 pdg[0] = jet1->GetPdgCode();
1403 pdg[1] = jet2->GetPdgCode();
1404 Bool_t triggered = kFALSE;
1406 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1409 Float_t jets[4][10];
1411 // Use Pythia clustering on parton level to determine jet axis
1413 GetJets(njets, ntrig, jets);
1415 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1420 if (pdg[0] == kGamma) {
1424 //Check eta range first...
1425 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1426 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1428 //Eta is okay, now check phi range
1429 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1430 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1441 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1443 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1445 Bool_t checking = kFALSE;
1446 Int_t j, kcode, ks, km;
1447 Int_t nPartAcc = 0; //number of particles in the acceptance range
1448 Int_t numberOfAcceptedParticles = 1;
1449 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1450 Int_t npart = fParticles.GetEntriesFast();
1452 for (j = 0; j<npart; j++) {
1453 TParticle * jparticle = (TParticle *) fParticles.At(j);
1454 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1455 ks = jparticle->GetStatusCode();
1456 km = jparticle->GetFirstMother();
1458 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1461 if( numberOfAcceptedParticles <= nPartAcc){
1470 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1473 // Load event into Pythia Common Block
1476 Int_t npart = stack -> GetNprimary();
1480 (fPythia->GetPyjets())->N = npart;
1482 n0 = (fPythia->GetPyjets())->N;
1483 (fPythia->GetPyjets())->N = n0 + npart;
1487 for (Int_t part = 0; part < npart; part++) {
1488 TParticle *mPart = stack->Particle(part);
1490 Int_t kf = mPart->GetPdgCode();
1491 Int_t ks = mPart->GetStatusCode();
1492 Int_t idf = mPart->GetFirstDaughter();
1493 Int_t idl = mPart->GetLastDaughter();
1496 if (ks == 11 || ks == 12) {
1503 Float_t px = mPart->Px();
1504 Float_t py = mPart->Py();
1505 Float_t pz = mPart->Pz();
1506 Float_t e = mPart->Energy();
1507 Float_t m = mPart->GetCalcMass();
1510 (fPythia->GetPyjets())->P[0][part+n0] = px;
1511 (fPythia->GetPyjets())->P[1][part+n0] = py;
1512 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1513 (fPythia->GetPyjets())->P[3][part+n0] = e;
1514 (fPythia->GetPyjets())->P[4][part+n0] = m;
1516 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1517 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1518 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1519 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1520 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1524 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1527 // Load event into Pythia Common Block
1530 Int_t npart = stack -> GetEntries();
1534 (fPythia->GetPyjets())->N = npart;
1536 n0 = (fPythia->GetPyjets())->N;
1537 (fPythia->GetPyjets())->N = n0 + npart;
1541 for (Int_t part = 0; part < npart; part++) {
1542 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1543 if (!mPart) continue;
1545 Int_t kf = mPart->GetPdgCode();
1546 Int_t ks = mPart->GetStatusCode();
1547 Int_t idf = mPart->GetFirstDaughter();
1548 Int_t idl = mPart->GetLastDaughter();
1551 if (ks == 11 || ks == 12) {
1558 Float_t px = mPart->Px();
1559 Float_t py = mPart->Py();
1560 Float_t pz = mPart->Pz();
1561 Float_t e = mPart->Energy();
1562 Float_t m = mPart->GetCalcMass();
1565 (fPythia->GetPyjets())->P[0][part+n0] = px;
1566 (fPythia->GetPyjets())->P[1][part+n0] = py;
1567 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1568 (fPythia->GetPyjets())->P[3][part+n0] = e;
1569 (fPythia->GetPyjets())->P[4][part+n0] = m;
1571 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1572 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1573 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1574 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1575 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1580 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1583 // Calls the Pythia jet finding algorithm to find jets in the current event
1588 Int_t n = fPythia->GetN();
1592 fPythia->Pycell(njets);
1594 for (i = 0; i < njets; i++) {
1595 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1596 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1597 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1598 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1609 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1612 // Calls the Pythia clustering algorithm to find jets in the current event
1614 Int_t n = fPythia->GetN();
1617 if (fJetReconstruction == kCluster) {
1619 // Configure cluster algorithm
1621 fPythia->SetPARU(43, 2.);
1622 fPythia->SetMSTU(41, 1);
1624 // Call cluster algorithm
1626 fPythia->Pyclus(nJets);
1628 // Loading jets from common block
1634 fPythia->Pycell(nJets);
1638 for (i = 0; i < nJets; i++) {
1639 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1640 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1641 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1642 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1643 Float_t pt = TMath::Sqrt(px * px + py * py);
1644 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1645 Float_t theta = TMath::ATan2(pt,pz);
1646 Float_t et = e * TMath::Sin(theta);
1647 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1649 eta > fEtaMinJet && eta < fEtaMaxJet &&
1650 phi > fPhiMinJet && phi < fPhiMaxJet &&
1651 et > fEtMinJet && et < fEtMaxJet
1654 jets[0][nJetsTrig] = px;
1655 jets[1][nJetsTrig] = py;
1656 jets[2][nJetsTrig] = pz;
1657 jets[3][nJetsTrig] = e;
1659 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1661 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1666 void AliGenPythia::GetSubEventTime()
1668 // Calculates time of the next subevent
1671 TArrayF &array = *fEventsTime;
1672 fEventTime = array[fCurSubEvent++];
1674 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1678 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1680 // Is particle in Central Barrel acceptance?
1682 if( eta < fTriggerEta )
1688 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1690 // Is particle in EMCAL acceptance?
1691 // phi in degrees, etamin=-etamax
1692 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1699 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1701 // Is particle in PHOS acceptance?
1702 // Acceptance slightly larger considered.
1703 // phi in degrees, etamin=-etamax
1704 // iparticle is the index of the particle to be checked, for PHOS rotation case
1706 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1711 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1717 void AliGenPythia::RotatePhi(Bool_t& okdd)
1719 //Rotate event in phi to enhance events in PHOS acceptance
1721 if(fPHOSRotateCandidate < 0) return ;
1723 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1724 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1725 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1726 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1728 //calculate deltaphi
1729 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1730 Double_t phphi = ph->Phi();
1731 Double_t deltaphi = phiPHOS - phphi;
1735 //loop for all particles and produce the phi rotation
1736 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1737 Double_t oldphi, newphi;
1738 Double_t newVx, newVy, r, vZ, time;
1739 Double_t newPx, newPy, pt, pz, e;
1740 for(Int_t i=0; i< np; i++) {
1741 TParticle* iparticle = (TParticle *) fParticles.At(i);
1742 oldphi = iparticle->Phi();
1743 newphi = oldphi + deltaphi;
1744 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1745 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1748 newVx = r * TMath::Cos(newphi);
1749 newVy = r * TMath::Sin(newphi);
1750 vZ = iparticle->Vz(); // don't transform
1751 time = iparticle->T(); // don't transform
1753 pt = iparticle->Pt();
1754 newPx = pt * TMath::Cos(newphi);
1755 newPy = pt * TMath::Sin(newphi);
1756 pz = iparticle->Pz(); // don't transform
1757 e = iparticle->Energy(); // don't transform
1760 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1761 iparticle->SetMomentum(newPx, newPy, pz, e);
1763 } //end particle loop
1765 // now let's check that we put correctly the candidate photon in PHOS
1766 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1767 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1768 if(IsInPHOS(phi,eta,-1))
1771 // reset the value for next event
1772 fPHOSRotateCandidate = -1;
1777 Bool_t AliGenPythia::CheckDiffraction()
1779 // use this method only with Perugia-0 tune!
1783 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1789 Double_t y2 = -1e10;
1791 const Int_t kNstable=20;
1792 const Int_t pdgStable[20] = {
1795 12, // Electron Neutrino
1797 14, // Muon Neutrino
1808 3112, // Sigma Minus
1815 for (Int_t i = 0; i < np; i++) {
1816 TParticle * part = (TParticle *) fParticles.At(i);
1818 Int_t statusCode = part->GetStatusCode();
1820 // Initial state particle
1821 if (statusCode != 1)
1824 Int_t pdg = TMath::Abs(part->GetPdgCode());
1825 Bool_t isStable = kFALSE;
1826 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1827 if (pdg == pdgStable[i1]) {
1835 Double_t y = part->Y();
1849 if(iPart1<0 || iPart2<0) return kFALSE;
1854 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1855 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1857 Int_t pdg1 = part1->GetPdgCode();
1858 Int_t pdg2 = part2->GetPdgCode();
1862 if (pdg1 == 2212 && pdg2 == 2212)
1870 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1873 else if (pdg1 == 2212)
1875 else if (pdg2 == 2212)
1884 TParticle * part = (TParticle *) fParticles.At(iPart);
1885 Double_t E= part->Energy();
1886 Double_t P= part->P();
1887 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1888 if(M2<0) return kFALSE;
1892 Double_t Mmin, Mmax, wSD, wDD, wND;
1893 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1895 if(M>-1 && M<Mmin) return kFALSE;
1898 Int_t procType=fPythia->GetMSTI(1);
1900 if(procType== 94) proc0=1;
1901 if(procType== 92 || procType== 93) proc0=0;
1905 else if(proc0==1) proc=1;
1907 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1908 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1911 // if(proc==1 || proc==2) return kFALSE;
1914 if(proc0!=0) fProcDiff = procType;
1915 else fProcDiff = 95;
1919 if(wSD<0) AliError("wSD<0 ! \n");
1921 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1923 // printf("iPart = %d\n", iPart);
1925 if(iPart==iPart1) fProcDiff=93;
1926 else if(iPart==iPart2) fProcDiff=92;
1928 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1937 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1938 Double_t &wSD, Double_t &wDD, Double_t &wND)
1942 if(TMath::Abs(fEnergyCMS-900)<1 ){
1944 const Int_t nbin=400;
1946 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1947 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1948 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1949 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1950 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1951 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1952 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1953 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1954 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1955 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1956 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1957 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1958 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1959 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1960 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1961 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1962 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1963 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1964 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1965 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1966 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1967 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1968 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1969 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1970 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1971 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1972 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1973 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1974 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1975 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1976 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1977 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1978 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1979 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1980 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1981 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1982 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1983 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1984 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1985 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1986 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1987 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1988 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1989 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1990 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1991 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1992 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1993 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1994 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1995 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1996 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1997 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1998 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1999 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2000 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2001 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2002 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2003 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2004 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2005 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2006 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2007 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2008 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2009 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2010 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2011 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2012 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2014 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
2015 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
2016 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
2017 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
2018 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
2019 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
2020 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
2021 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
2022 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
2023 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
2024 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
2025 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
2026 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
2027 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
2028 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
2029 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
2030 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
2031 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
2032 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
2033 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
2034 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
2035 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
2036 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
2037 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
2038 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
2039 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
2040 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
2041 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
2042 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
2043 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
2044 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
2045 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
2046 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
2047 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
2048 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
2049 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
2050 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
2051 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2052 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2053 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2054 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2055 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2056 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2057 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2058 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2059 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2060 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2061 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2062 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2063 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2064 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2065 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2066 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2067 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2068 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2069 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2070 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2071 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2072 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2073 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2074 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2075 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2076 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2077 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2078 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2079 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2080 0.386112, 0.364314, 0.434375, 0.334629};
2087 if(M<Mmin || M>Mmax) return kTRUE;
2090 for(Int_t i=1; i<=nbin; i++)
2093 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2099 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2101 const Int_t nbin=400;
2103 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2104 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2105 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2106 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2107 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2108 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2109 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2110 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2111 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2112 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2113 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2114 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2115 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2116 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2117 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2118 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2119 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2120 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2121 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2122 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2123 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2124 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2125 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2126 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2127 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2128 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2129 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2130 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2131 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2132 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2133 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2134 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2135 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2136 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2137 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2138 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2139 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2140 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2141 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2142 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2143 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2144 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2145 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2146 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2147 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2148 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2149 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2150 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2151 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2152 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2153 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2154 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2155 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2156 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2157 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2158 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2159 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2160 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2161 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2162 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2163 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2164 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2165 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2166 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2167 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2168 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2169 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2171 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2172 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2173 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2174 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2175 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2176 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2177 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2178 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2179 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2180 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2181 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2182 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2183 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2184 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2185 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2186 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2187 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2188 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2189 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2190 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2191 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2192 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2193 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2194 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2195 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2196 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2197 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2198 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2199 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2200 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2201 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2202 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2203 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2204 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2205 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2206 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2207 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2208 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2209 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2210 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2211 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2212 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2213 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2214 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2215 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2216 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2217 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2218 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2219 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2220 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2221 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2222 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2223 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2224 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2225 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2226 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2227 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2228 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2229 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2230 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2231 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2232 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2233 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2234 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2235 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2236 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2237 0.201712, 0.242225, 0.255565, 0.258738};
2244 if(M<Mmin || M>Mmax) return kTRUE;
2247 for(Int_t i=1; i<=nbin; i++)
2250 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2258 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2259 const Int_t nbin=400;
2261 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2262 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2263 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2264 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2265 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2266 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2267 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2268 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2269 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2270 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2271 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2272 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2273 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2274 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2275 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2276 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2277 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2278 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2279 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2280 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2281 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2282 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2283 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2284 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2285 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2286 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2287 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2288 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2289 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2290 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2291 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2292 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2293 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2294 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2295 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2296 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2297 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2298 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2299 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2300 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2301 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2302 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2303 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2304 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2305 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2306 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2307 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2308 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2309 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2310 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2311 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2312 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2313 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2314 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2315 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2316 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2317 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2318 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2319 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2320 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2321 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2322 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2323 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2324 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2325 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2326 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2327 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2329 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2330 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2331 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2332 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2333 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2334 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2335 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2336 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2337 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2338 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2339 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2340 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2341 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2342 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2343 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2344 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2345 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2346 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2347 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2348 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2349 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2350 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2351 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2352 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2353 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2354 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2355 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2356 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2357 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2358 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2359 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2360 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2361 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2362 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2363 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2364 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2365 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2366 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2367 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2368 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2369 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2370 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2371 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2372 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2373 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2374 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2375 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2376 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2377 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2378 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2379 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2380 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2381 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2382 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2383 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2384 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2385 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2386 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2387 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2388 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2389 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2390 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2391 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2392 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2393 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2394 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2395 0.175006, 0.223482, 0.202706, 0.218108};
2403 if(M<Mmin || M>Mmax) return kTRUE;
2406 for(Int_t i=1; i<=nbin; i++)
2409 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2419 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2421 // Check if this is a heavy flavor decay product
2422 TParticle * part = (TParticle *) fParticles.At(ipart);
2423 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2424 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2427 if (mfl >= 4 && mfl < 6) return kTRUE;
2429 Int_t imo = part->GetFirstMother()-1;
2430 TParticle* pm = part;
2432 // Heavy flavor hadron produced by generator
2434 pm = (TParticle*)fParticles.At(imo);
2435 mpdg = TMath::Abs(pm->GetPdgCode());
2436 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2437 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2438 imo = pm->GetFirstMother()-1;
2443 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2445 // check the eta/phi correspond to the detectors acceptance
2446 // iparticle is the index of the particle to be checked, for PHOS rotation case
2447 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2448 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2449 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2453 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2455 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2456 // implemented primaryly for kPyJets, but extended to any kind of process.
2458 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2459 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2462 for (Int_t i=0; i< np; i++) {
2464 TParticle* iparticle = (TParticle *) fParticles.At(i);
2466 Int_t pdg = iparticle->GetPdgCode();
2467 Int_t status = iparticle->GetStatusCode();
2468 Int_t imother = iparticle->GetFirstMother() - 1;
2470 TParticle* pmother = 0x0;
2471 Int_t momStatus = -1;
2474 pmother = (TParticle *) fParticles.At(imother);
2475 momStatus = pmother->GetStatusCode();
2476 momPdg = pmother->GetPdgCode();
2482 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2485 if (fHadronInCalo && status == 1)
2487 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2488 // (in case neutral mesons were declared stable)
2492 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2496 //Fragmentation photon
2497 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2499 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2502 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2504 if( momStatus == 11)
2506 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2507 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2508 ok = kTRUE ; // photon from hadron decay
2510 //In case only decays from pi0 or eta requested
2511 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2512 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2516 // Pi0 or Eta particle
2517 else if ((fPi0InCalo || fEtaInCalo))
2519 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2521 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2523 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2526 else if (fEtaInCalo && pdg == 221)
2528 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2535 // Check that the selected particle is in the calorimeter acceptance
2537 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2539 //Just check if the selected particle falls in the acceptance
2540 if(!fForceNeutralMeson2PhotonDecay )
2542 //printf("\t Check acceptance! \n");
2543 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2544 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2546 if(CheckDetectorAcceptance(phi,eta,i))
2549 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));
2550 //printf("\t Accept \n");
2555 //Mesons have several decay modes, select only those decaying into 2 photons
2556 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2558 // In case we want the pi0/eta trigger,
2559 // check the decay mode (2 photons)
2561 //printf("\t Force decay 2 gamma\n");
2563 Int_t ndaughters = iparticle->GetNDaughters();
2564 if(ndaughters != 2){
2569 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2570 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2576 //iparticle->Print();
2580 Int_t pdgD1 = d1->GetPdgCode();
2581 Int_t pdgD2 = d2->GetPdgCode();
2582 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2583 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2585 if(pdgD1 != 22 || pdgD2 != 22){
2590 //printf("\t accept decay\n");
2592 //Trigger on the meson, not on the daughter
2593 if(!fDecayPhotonInCalo){
2595 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2596 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2598 if(CheckDetectorAcceptance(phi,eta,i))
2600 //printf("\t Accept meson pdg %d\n",pdg);
2602 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));
2610 //printf("Check daughters acceptance\n");
2612 //Trigger on the meson daughters
2614 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2615 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2616 if(d1->Pt() > fTriggerParticleMinPt)
2618 //printf("\t Check acceptance photon 1! \n");
2619 if(CheckDetectorAcceptance(phi,eta,i))
2621 //printf("\t Accept Photon 1\n");
2623 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));
2631 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2632 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2634 if(d2->Pt() > fTriggerParticleMinPt)
2636 //printf("\t Check acceptance photon 2! \n");
2637 if(CheckDetectorAcceptance(phi,eta,i))
2639 //printf("\t Accept Photon 2\n");
2641 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));
2647 } // force 2 photon daughters in pi0/eta decays
2649 } else ok = kFALSE; // check acceptance
2653 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2654 // A particle passing all trigger conditions except phi position in PHOS, is used as reference