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),
132 fTriggerMultiplicity(0),
133 fTriggerMultiplicityEta(0),
134 fTriggerMultiplicityEtaMin(0),
135 fTriggerMultiplicityEtaMax(0),
136 fTriggerMultiplicityPtMin(0),
137 fCountMode(kCountAll),
142 fFragPhotonInCalo(kFALSE),
143 fHadronInCalo(kFALSE) ,
146 fPhotonInCalo(kFALSE), // not in use
147 fDecayPhotonInCalo(kFALSE),
148 fForceNeutralMeson2PhotonDecay(kFALSE),
150 fEleInEMCAL(kFALSE), // not in use
151 fCheckBarrel(kFALSE),
154 fCheckPHOSeta(kFALSE),
155 fPHOSRotateCandidate(-1),
156 fTriggerParticleMinPt(0),
157 fPhotonMinPt(0), // not in use
158 fElectronMinPt(0), // not in use
168 // Default Constructor
170 if (!AliPythiaRndm::GetPythiaRandom())
171 AliPythiaRndm::SetPythiaRandom(GetRandom());
174 AliGenPythia::AliGenPythia(Int_t npart)
186 fInteractionRate(0.),
201 fHadronisation(kTRUE),
202 fPatchOmegaDalitz(0),
205 fReadFromFile(kFALSE),
218 fDecayer(new AliDecayerPythia()),
219 fDebugEventFirst(-1),
226 fPhiMaxJet(2.* TMath::Pi()),
227 fJetReconstruction(kCell),
231 fPhiMaxGamma(2. * TMath::Pi()),
235 fPycellThreshold(0.),
237 fPycellMinEtJet(10.),
238 fPycellMaxRadius(1.),
239 fStackFillOpt(kFlavorSelection),
241 fFragmentation(kTRUE),
243 fUseNuclearPDF(kFALSE),
244 fUseLorentzBoost(kTRUE),
253 fTriggerMultiplicity(0),
254 fTriggerMultiplicityEta(0),
255 fTriggerMultiplicityEtaMin(0),
256 fTriggerMultiplicityEtaMax(0),
257 fTriggerMultiplicityPtMin(0),
258 fCountMode(kCountAll),
263 fFragPhotonInCalo(kFALSE),
264 fHadronInCalo(kFALSE) ,
267 fPhotonInCalo(kFALSE), // not in use
268 fDecayPhotonInCalo(kFALSE),
269 fForceNeutralMeson2PhotonDecay(kFALSE),
271 fEleInEMCAL(kFALSE), // not in use
272 fCheckBarrel(kFALSE),
275 fCheckPHOSeta(kFALSE),
276 fPHOSRotateCandidate(-1),
277 fTriggerParticleMinPt(0),
278 fPhotonMinPt(0), // not in use
279 fElectronMinPt(0), // not in use
289 // default charm production at 5. 5 TeV
291 // structure function GRVHO
295 fTitle= "Particle Generator using PYTHIA";
297 // Set random number generator
298 if (!AliPythiaRndm::GetPythiaRandom())
299 AliPythiaRndm::SetPythiaRandom(GetRandom());
302 AliGenPythia::~AliGenPythia()
305 if(fEventsTime) delete fEventsTime;
308 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
310 // Generate pileup using user specified rate
311 fInteractionRate = rate;
312 fTimeWindow = timewindow;
316 void AliGenPythia::GeneratePileup()
318 // Generate sub events time for pileup
320 if(fInteractionRate == 0.) {
321 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
325 Int_t npart = NumberParticles();
327 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
331 if(fEventsTime) delete fEventsTime;
332 fEventsTime = new TArrayF(npart);
333 TArrayF &array = *fEventsTime;
334 for(Int_t ipart = 0; ipart < npart; ipart++)
337 Float_t eventtime = 0.;
340 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
341 if(eventtime > fTimeWindow) break;
342 array.Set(array.GetSize()+1);
343 array[array.GetSize()-1] = eventtime;
349 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
350 if(TMath::Abs(eventtime) > fTimeWindow) break;
351 array.Set(array.GetSize()+1);
352 array[array.GetSize()-1] = eventtime;
355 SetNumberParticles(fEventsTime->GetSize());
358 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
359 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
361 // Set pycell parameters
362 fPycellEtaMax = etamax;
365 fPycellThreshold = thresh;
366 fPycellEtSeed = etseed;
367 fPycellMinEtJet = minet;
368 fPycellMaxRadius = r;
373 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
375 // Set a range of event numbers, for which a table
376 // of generated particle will be printed
377 fDebugEventFirst = eventFirst;
378 fDebugEventLast = eventLast;
379 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
382 void AliGenPythia::Init()
386 SetMC(AliPythia::Instance());
387 fPythia=(AliPythia*) fMCEvGen;
390 fParentWeight=1./Float_t(fNpart);
394 fPythia->SetCKIN(3,fPtHardMin);
395 fPythia->SetCKIN(4,fPtHardMax);
396 fPythia->SetCKIN(7,fYHardMin);
397 fPythia->SetCKIN(8,fYHardMax);
399 if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
402 fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
404 if (fFragmentation) {
405 fPythia->SetMSTP(111,1);
407 fPythia->SetMSTP(111,0);
411 // initial state radiation
412 fPythia->SetMSTP(61,fGinit);
413 // final state radiation
414 fPythia->SetMSTP(71,fGfinal);
415 //color reconnection strength
416 if(fCRoff==1)fPythia->SetMSTP(95,0);
419 fPythia->SetMSTP(91,1);
420 fPythia->SetPARP(91,fPtKick);
421 fPythia->SetPARP(93, 4. * fPtKick);
423 fPythia->SetMSTP(91,0);
426 if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
429 fRL = AliRunLoader::Open(fkFileName, "Partons");
430 fRL->LoadKinematics();
436 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
437 // Forward Paramters to the AliPythia object
438 fDecayer->SetForceDecay(fForceDecay);
439 // Switch off Heavy Flavors on request
441 // Maximum number of quark flavours used in pdf
442 fPythia->SetMSTP(58, 3);
443 // Maximum number of flavors that can be used in showers
444 fPythia->SetMSTJ(45, 3);
445 // Switch off g->QQbar splitting in decay table
446 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
452 // Parent and Children Selection
455 case kPyOldUEQ2ordered:
456 case kPyOldUEQ2ordered2:
460 case kPyCharmUnforced:
461 case kPyCharmPbPbMNR:
464 case kPyCharmppMNRwmi:
466 fParentSelect[0] = 411;
467 fParentSelect[1] = 421;
468 fParentSelect[2] = 431;
469 fParentSelect[3] = 4122;
470 fParentSelect[4] = 4232;
471 fParentSelect[5] = 4132;
472 fParentSelect[6] = 4332;
478 fParentSelect[0] = 421;
481 case kPyDPlusPbPbMNR:
484 fParentSelect[0] = 411;
487 case kPyDPlusStrangePbPbMNR:
488 case kPyDPlusStrangepPbMNR:
489 case kPyDPlusStrangeppMNR:
490 fParentSelect[0] = 431;
493 case kPyLambdacppMNR:
494 fParentSelect[0] = 4122;
499 case kPyBeautyPbPbMNR:
500 case kPyBeautypPbMNR:
502 case kPyBeautyppMNRwmi:
504 fParentSelect[0]= 511;
505 fParentSelect[1]= 521;
506 fParentSelect[2]= 531;
507 fParentSelect[3]= 5122;
508 fParentSelect[4]= 5132;
509 fParentSelect[5]= 5232;
510 fParentSelect[6]= 5332;
513 case kPyBeautyUnforced:
514 fParentSelect[0] = 511;
515 fParentSelect[1] = 521;
516 fParentSelect[2] = 531;
517 fParentSelect[3] = 5122;
518 fParentSelect[4] = 5132;
519 fParentSelect[5] = 5232;
520 fParentSelect[6] = 5332;
525 fParentSelect[0] = 443;
528 case kPyMbAtlasTuneMC09:
530 case kPyMbWithDirectPhoton:
542 case kPyMBRSingleDiffraction:
543 case kPyMBRDoubleDiffraction:
544 case kPyMBRCentralDiffraction:
549 // JetFinder for Trigger
551 // Configure detector (EMCAL like)
553 fPythia->SetPARU(51, fPycellEtaMax);
554 fPythia->SetMSTU(51, fPycellNEta);
555 fPythia->SetMSTU(52, fPycellNPhi);
557 // Configure Jet Finder
559 fPythia->SetPARU(58, fPycellThreshold);
560 fPythia->SetPARU(52, fPycellEtSeed);
561 fPythia->SetPARU(53, fPycellMinEtJet);
562 fPythia->SetPARU(54, fPycellMaxRadius);
563 fPythia->SetMSTU(54, 2);
565 // This counts the total number of calls to Pyevnt() per run.
576 // Reset Lorentz boost if demanded
577 if(!fUseLorentzBoost) {
579 Warning("Init","Demand to discard Lorentz boost.\n");
586 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
588 fPythia->SetPARJ(200, 0.0);
589 fPythia->SetPARJ(199, 0.0);
590 fPythia->SetPARJ(198, 0.0);
591 fPythia->SetPARJ(197, 0.0);
594 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
597 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
600 // Nestor's change of the splittings
601 fPythia->SetPARJ(200, 0.8);
602 fPythia->SetMSTJ(41, 1); // QCD radiation only
603 fPythia->SetMSTJ(42, 2); // angular ordering
604 fPythia->SetMSTJ(44, 2); // option to run alpha_s
605 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
606 fPythia->SetMSTJ(50, 0); // No coherence in first branching
607 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
608 } else if (fQuench == 4) {
609 // Armesto-Cunqueiro-Salgado change of the splittings.
610 AliFastGlauber* glauber = AliFastGlauber::Instance();
612 //read and store transverse almonds corresponding to differnt
614 glauber->SetCentralityClass(0.,0.1);
615 fPythia->SetPARJ(200, 1.);
616 fPythia->SetPARJ(198, fQhat);
617 fPythia->SetPARJ(199, fLength);
618 fPythia->SetMSTJ(42, 2); // angular ordering
619 fPythia->SetMSTJ(44, 2); // option to run alpha_s
620 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
623 if ( AliLog::GetDebugLevel("","AliGenPythia") >= 1 ) {
629 void AliGenPythia::Generate()
631 // Generate one event
632 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
633 fDecayer->ForceDecay();
635 Double_t polar[3] = {0,0,0};
636 Double_t origin[3] = {0,0,0};
638 // converts from mm/c to s
639 const Float_t kconv=0.001/2.999792458e8;
649 // Set collision vertex position
650 if (fVertexSmear == kPerEvent) Vertex();
659 // Switch hadronisation off
661 fPythia->SetMSTJ(1, 0);
665 // Quenching comes through medium-modified splitting functions.
666 AliFastGlauber::Instance()->GetRandomBHard(bimp);
667 fPythia->SetPARJ(197, bimp);
672 // Either produce new event or read partons from file
674 if (!fReadFromFile) {
680 fNpartons = fPythia->GetN();
682 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
683 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
685 LoadEvent(fRL->Stack(), 0 , 1);
690 // Run quenching routine
694 } else if (fQuench == 2){
695 fPythia->Pyquen(208., 0, 0.);
696 } else if (fQuench == 3) {
697 // Quenching is via multiplicative correction of the splittings
701 // Switch hadronisation on
703 if (fHadronisation) {
704 fPythia->SetMSTJ(1, 1);
706 // .. and perform hadronisation
707 // printf("Calling hadronisation %d\n", fPythia->GetN());
709 if (fPatchOmegaDalitz) {
710 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
712 fPythia->DalitzDecays();
713 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
716 else if (fDecayerExodus) {
718 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 0);
719 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
720 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 0);
722 fPythia->OmegaDalitz();
723 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
724 fPythia->PizeroDalitz();
725 fPythia->PhiDalitz();
726 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 1);
727 fPythia->EtaDalitz();
728 fPythia->EtaprimeDalitz();
729 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 1);
730 fPythia->RhoDirect();
731 fPythia->OmegaDirect();
732 fPythia->PhiDirect();
733 fPythia->JPsiDirect();
739 fPythia->ImportParticles(&fParticles,"All");
741 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
742 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
750 Int_t np = fParticles.GetEntriesFast();
752 if (np == 0) continue;
756 Int_t* pParent = new Int_t[np];
757 Int_t* pSelected = new Int_t[np];
758 Int_t* trackIt = new Int_t[np];
759 for (i = 0; i < np; i++) {
765 Int_t nc = 0; // Total n. of selected particles
766 Int_t nParents = 0; // Selected parents
767 Int_t nTkbles = 0; // Trackable particles
768 if (fProcess != kPyMbDefault &&
770 fProcess != kPyMbAtlasTuneMC09 &&
771 fProcess != kPyMbWithDirectPhoton &&
772 fProcess != kPyJets &&
773 fProcess != kPyDirectGamma &&
774 fProcess != kPyMbNonDiffr &&
775 fProcess != kPyMbMSEL1 &&
778 fProcess != kPyZgamma &&
779 fProcess != kPyCharmppMNRwmi &&
780 fProcess != kPyBeautyppMNRwmi &&
781 fProcess != kPyBeautyJets &&
782 fProcess != kPyWPWHG &&
783 fProcess != kPyJetsPWHG &&
784 fProcess != kPyCharmPWHG &&
785 fProcess != kPyBeautyPWHG) {
787 for (i = 0; i < np; i++) {
788 TParticle* iparticle = (TParticle *) fParticles.At(i);
789 Int_t ks = iparticle->GetStatusCode();
790 kf = CheckPDGCode(iparticle->GetPdgCode());
791 // No initial state partons
792 if (ks==21) continue;
794 // Heavy Flavor Selection
801 if (kfl > 100000) kfl %= 100000;
802 if (kfl > 10000) kfl %= 10000;
804 if (kfl > 10) kfl/=100;
806 if (kfl > 10) kfl/=10;
807 Int_t ipa = iparticle->GetFirstMother()-1;
810 // Establish mother daughter relation between heavy quarks and mesons
812 if (kf >= fFlavorSelect && kf <= 6) {
813 Int_t idau = iparticle->GetFirstDaughter() - 1;
815 TParticle* daughter = (TParticle *) fParticles.At(idau);
816 Int_t pdgD = daughter->GetPdgCode();
817 if (pdgD == 91 || pdgD == 92) {
818 Int_t jmin = daughter->GetFirstDaughter() - 1;
819 Int_t jmax = daughter->GetLastDaughter() - 1;
820 for (Int_t jp = jmin; jp <= jmax; jp++)
821 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
822 } // is string or cluster
828 TParticle * mother = (TParticle *) fParticles.At(ipa);
829 kfMo = TMath::Abs(mother->GetPdgCode());
832 // What to keep in Stack?
833 Bool_t flavorOK = kFALSE;
834 Bool_t selectOK = kFALSE;
836 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
838 if (kfl > fFlavorSelect) {
842 if (kfl == fFlavorSelect) flavorOK = kTRUE;
844 switch (fStackFillOpt) {
846 case kFlavorSelection:
849 case kParentSelection:
850 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
853 if (flavorOK && selectOK) {
855 // Heavy flavor hadron or quark
857 // Kinematic seletion on final state heavy flavor mesons
858 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
863 if (ParentSelected(kf)) ++nParents; // Update parent count
864 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
866 // Kinematic seletion on decay products
867 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
868 && !KinematicSelection(iparticle, 1))
874 // Select if mother was selected and is not tracked
876 if (pSelected[ipa] &&
877 !trackIt[ipa] && // mother will be tracked ?
878 kfMo != 5 && // mother is b-quark, don't store fragments
879 kfMo != 4 && // mother is c-quark, don't store fragments
880 kf != 92) // don't store string
883 // Semi-stable or de-selected: diselect decay products:
886 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
888 Int_t ipF = iparticle->GetFirstDaughter();
889 Int_t ipL = iparticle->GetLastDaughter();
890 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
892 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
893 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
896 if (pSelected[i] == -1) pSelected[i] = 0;
897 if (!pSelected[i]) continue;
898 // Count quarks only if you did not include fragmentation
899 if (fFragmentation && kf <= 10) continue;
902 // Decision on tracking
905 // Track final state particle
906 if (ks == 1) trackIt[i] = 1;
907 // Track semi-stable particles
908 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
909 // Track particles selected by process if undecayed.
910 if (fForceDecay == kNoDecay) {
911 if (ParentSelected(kf)) trackIt[i] = 1;
913 if (ParentSelected(kf)) trackIt[i] = 0;
915 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
919 } // particle selection loop
921 for (i = 0; i<np; i++) {
922 if (!pSelected[i]) continue;
923 TParticle * iparticle = (TParticle *) fParticles.At(i);
924 kf = CheckPDGCode(iparticle->GetPdgCode());
925 Int_t ks = iparticle->GetStatusCode();
926 p[0] = iparticle->Px();
927 p[1] = iparticle->Py();
928 p[2] = iparticle->Pz();
929 p[3] = iparticle->Energy();
931 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
932 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
933 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
935 Float_t tof = fTime + kconv*iparticle->T();
936 Int_t ipa = iparticle->GetFirstMother()-1;
937 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
939 PushTrack(fTrackIt*trackIt[i], iparent, kf,
940 p[0], p[1], p[2], p[3],
941 origin[0], origin[1], origin[2], tof,
942 polar[0], polar[1], polar[2],
943 kPPrimary, nt, 1., ks);
960 switch (fCountMode) {
962 // printf(" Count all \n");
966 // printf(" Count parents \n");
969 case kCountTrackables:
970 // printf(" Count trackable \n");
974 if (jev >= fNpart || fNpart == -1) {
975 fKineBias=Float_t(fNpart)/Float_t(fTrials);
977 fQ += fPythia->GetVINT(51);
978 fX1 += fPythia->GetVINT(41);
979 fX2 += fPythia->GetVINT(42);
980 fTrialsRun += fTrials;
987 SetHighWaterMark(nt);
988 // adjust weight due to kinematic selection
991 fXsection=fPythia->GetPARI(1);
994 Int_t AliGenPythia::GenerateMB()
997 // Min Bias selection and other global selections
999 Int_t i, kf, nt, iparent;
1002 Double_t polar[3] = {0,0,0};
1003 Double_t origin[3] = {0,0,0};
1004 // converts from mm/c to s
1005 const Float_t kconv=0.001/2.999792458e8;
1008 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1012 Int_t* pParent = new Int_t[np];
1013 for (i=0; i< np; i++) pParent[i] = -1;
1014 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1015 && fEtMinJet > 0.) {
1016 TParticle* jet1 = (TParticle *) fParticles.At(6);
1017 TParticle* jet2 = (TParticle *) fParticles.At(7);
1019 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
1026 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
1027 // implemented primaryly for kPyJets, but extended to any kind of process.
1028 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
1029 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
1030 Bool_t ok = TriggerOnSelectedParticles(np);
1038 // Check for diffraction
1040 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1041 if(!CheckDiffraction()) {
1048 // Check for minimum multiplicity
1049 if (fTriggerMultiplicity > 0) {
1050 Int_t multiplicity = 0;
1051 for (i = 0; i < np; i++) {
1052 TParticle * iparticle = (TParticle *) fParticles.At(i);
1054 Int_t statusCode = iparticle->GetStatusCode();
1056 // Initial state particle
1057 if (statusCode != 1)
1060 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1062 //multiplicity check for a given eta range
1063 if ((fTriggerMultiplicityEtaMin != fTriggerMultiplicityEtaMax) &&
1064 (iparticle->Eta() < fTriggerMultiplicityEtaMin || iparticle->Eta() > fTriggerMultiplicityEtaMax))
1067 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1070 TParticlePDG* pdgPart = iparticle->GetPDG();
1071 if (pdgPart && pdgPart->Charge() == 0)
1077 if (multiplicity < fTriggerMultiplicity) {
1081 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1085 if (fTriggerParticle) {
1086 Bool_t triggered = kFALSE;
1087 for (i = 0; i < np; i++) {
1088 TParticle * iparticle = (TParticle *) fParticles.At(i);
1089 kf = CheckPDGCode(iparticle->GetPdgCode());
1090 if (kf != fTriggerParticle) continue;
1091 if (iparticle->Pt() == 0.) continue;
1092 if (fTriggerEtaMin == fTriggerEta) {
1093 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1095 if (iparticle->Eta() > fTriggerEta || iparticle->Eta() < fTriggerEtaMin) continue;
1097 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1108 // Check if there is a ccbar or bbbar pair with at least one of the two
1109 // in fYMin < y < fYMax
1111 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1112 TParticle *partCheck;
1114 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1115 Bool_t theChild=kFALSE;
1116 Bool_t triggered=kFALSE;
1118 Int_t pdg, mpdg, mpdgUpperFamily;
1119 for(i = 0; i < np; i++) {
1120 partCheck = (TParticle*)fParticles.At(i);
1121 pdg = partCheck->GetPdgCode();
1122 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1123 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1124 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1125 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1126 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1128 if(fTriggerParticle) {
1129 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1131 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1132 Int_t mi = partCheck->GetFirstMother() - 1;
1134 mother = (TParticle*)fParticles.At(mi);
1135 mpdg=TMath::Abs(mother->GetPdgCode());
1136 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1137 if ( ParentSelected(mpdg) ||
1138 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1139 if (KinematicSelection(partCheck,1)) {
1145 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1149 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1153 if(fTriggerParticle && !triggered) { // particle requested is not produced
1160 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1162 fProcess == kPyWPWHG ||
1165 fProcess == kPyZgamma ||
1166 fProcess == kPyMbDefault ||
1167 fProcess == kPyMb ||
1168 fProcess == kPyMbAtlasTuneMC09 ||
1169 fProcess == kPyMbWithDirectPhoton ||
1170 fProcess == kPyMbNonDiffr)
1171 && (fCutOnChild == 1) ) {
1172 if ( !CheckKinematicsOnChild() ) {
1179 for (i = 0; i < np; i++) {
1181 TParticle * iparticle = (TParticle *) fParticles.At(i);
1182 kf = CheckPDGCode(iparticle->GetPdgCode());
1183 Int_t ks = iparticle->GetStatusCode();
1184 Int_t km = iparticle->GetFirstMother();
1186 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1187 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1191 if (ks == 1) trackIt = 1;
1192 Int_t ipa = iparticle->GetFirstMother()-1;
1194 iparent = (ipa > -1) ? pParent[ipa] : -1;
1197 // store track information
1198 p[0] = iparticle->Px();
1199 p[1] = iparticle->Py();
1200 p[2] = iparticle->Pz();
1201 p[3] = iparticle->Energy();
1204 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1205 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1206 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1208 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1210 PushTrack(fTrackIt*trackIt, iparent, kf,
1211 p[0], p[1], p[2], p[3],
1212 origin[0], origin[1], origin[2], tof,
1213 polar[0], polar[1], polar[2],
1214 kPPrimary, nt, 1., ks);
1218 SetHighWaterMark(nt);
1220 } // select particle
1229 void AliGenPythia::FinishRun()
1231 // Print x-section summary
1240 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1241 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1244 void AliGenPythia::AdjustWeights() const
1246 // Adjust the weights after generation of all events
1250 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1251 for (Int_t i=0; i<ntrack; i++) {
1252 part= gAlice->GetMCApp()->Particle(i);
1253 part->SetWeight(part->GetWeight()*fKineBias);
1258 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1260 // Treat protons as inside nuclei with mass numbers a1 and a2
1264 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1265 fUseNuclearPDF = kTRUE;
1270 void AliGenPythia::MakeHeader()
1273 // Make header for the simulated event
1276 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1277 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1280 // Builds the event header, to be called after each event
1281 if (fHeader) delete fHeader;
1282 fHeader = new AliGenPythiaEventHeader("Pythia");
1286 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1287 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1288 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1291 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1294 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1297 fHeader->SetPrimaryVertex(fVertex);
1298 fHeader->SetInteractionTime(fTime+fEventTime);
1300 // Number of primaries
1301 fHeader->SetNProduced(fNprimaries);
1304 fHeader->SetEventWeight(fPythia->GetVINT(97));
1306 // Jets that have triggered
1308 //Need to store jets for b-jet studies too!
1309 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1312 Float_t jets[4][10];
1313 GetJets(njet, ntrig, jets);
1316 for (Int_t i = 0; i < ntrig; i++) {
1317 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1322 // Copy relevant information from external header, if present.
1327 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1328 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1330 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1333 exHeader->TriggerJet(i, uqJet);
1334 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1338 // Store quenching parameters
1341 Double_t z[4] = {0.};
1347 fPythia->GetQuenchingParameters(xp, yp, z);
1348 } else if (fQuench == 2){
1350 Double_t r1 = PARIMP.rb1;
1351 Double_t r2 = PARIMP.rb2;
1352 Double_t b = PARIMP.b1;
1353 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1354 Double_t phi = PARIMP.psib1;
1355 xp = r * TMath::Cos(phi);
1356 yp = r * TMath::Sin(phi);
1358 } else if (fQuench == 4) {
1362 AliFastGlauber::Instance()->GetSavedXY(xy);
1363 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1366 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1369 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1370 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1373 // Store pt^hard and cross-section
1374 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1375 ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
1378 // Store Event Weight
1379 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
1388 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1390 // Check the kinematic trigger condition
1393 eta[0] = jet1->Eta();
1394 eta[1] = jet2->Eta();
1396 phi[0] = jet1->Phi();
1397 phi[1] = jet2->Phi();
1399 pdg[0] = jet1->GetPdgCode();
1400 pdg[1] = jet2->GetPdgCode();
1401 Bool_t triggered = kFALSE;
1403 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1406 Float_t jets[4][10];
1408 // Use Pythia clustering on parton level to determine jet axis
1410 GetJets(njets, ntrig, jets);
1412 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1417 if (pdg[0] == kGamma) {
1421 //Check eta range first...
1422 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1423 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1425 //Eta is okay, now check phi range
1426 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1427 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1438 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1440 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1442 Bool_t checking = kFALSE;
1443 Int_t j, kcode, ks, km;
1444 Int_t nPartAcc = 0; //number of particles in the acceptance range
1445 Int_t numberOfAcceptedParticles = 1;
1446 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1447 Int_t npart = fParticles.GetEntriesFast();
1449 for (j = 0; j<npart; j++) {
1450 TParticle * jparticle = (TParticle *) fParticles.At(j);
1451 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1452 ks = jparticle->GetStatusCode();
1453 km = jparticle->GetFirstMother();
1455 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1458 if( numberOfAcceptedParticles <= nPartAcc){
1467 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1470 // Load event into Pythia Common Block
1473 Int_t npart = stack -> GetNprimary();
1477 (fPythia->GetPyjets())->N = npart;
1479 n0 = (fPythia->GetPyjets())->N;
1480 (fPythia->GetPyjets())->N = n0 + npart;
1484 for (Int_t part = 0; part < npart; part++) {
1485 TParticle *mPart = stack->Particle(part);
1487 Int_t kf = mPart->GetPdgCode();
1488 Int_t ks = mPart->GetStatusCode();
1489 Int_t idf = mPart->GetFirstDaughter();
1490 Int_t idl = mPart->GetLastDaughter();
1493 if (ks == 11 || ks == 12) {
1500 Float_t px = mPart->Px();
1501 Float_t py = mPart->Py();
1502 Float_t pz = mPart->Pz();
1503 Float_t e = mPart->Energy();
1504 Float_t m = mPart->GetCalcMass();
1507 (fPythia->GetPyjets())->P[0][part+n0] = px;
1508 (fPythia->GetPyjets())->P[1][part+n0] = py;
1509 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1510 (fPythia->GetPyjets())->P[3][part+n0] = e;
1511 (fPythia->GetPyjets())->P[4][part+n0] = m;
1513 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1514 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1515 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1516 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1517 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1521 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1524 // Load event into Pythia Common Block
1527 Int_t npart = stack -> GetEntries();
1531 (fPythia->GetPyjets())->N = npart;
1533 n0 = (fPythia->GetPyjets())->N;
1534 (fPythia->GetPyjets())->N = n0 + npart;
1538 for (Int_t part = 0; part < npart; part++) {
1539 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1540 if (!mPart) continue;
1542 Int_t kf = mPart->GetPdgCode();
1543 Int_t ks = mPart->GetStatusCode();
1544 Int_t idf = mPart->GetFirstDaughter();
1545 Int_t idl = mPart->GetLastDaughter();
1548 if (ks == 11 || ks == 12) {
1555 Float_t px = mPart->Px();
1556 Float_t py = mPart->Py();
1557 Float_t pz = mPart->Pz();
1558 Float_t e = mPart->Energy();
1559 Float_t m = mPart->GetCalcMass();
1562 (fPythia->GetPyjets())->P[0][part+n0] = px;
1563 (fPythia->GetPyjets())->P[1][part+n0] = py;
1564 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1565 (fPythia->GetPyjets())->P[3][part+n0] = e;
1566 (fPythia->GetPyjets())->P[4][part+n0] = m;
1568 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1569 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1570 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1571 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1572 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1577 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1580 // Calls the Pythia jet finding algorithm to find jets in the current event
1585 Int_t n = fPythia->GetN();
1589 fPythia->Pycell(njets);
1591 for (i = 0; i < njets; i++) {
1592 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1593 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1594 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1595 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1606 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1609 // Calls the Pythia clustering algorithm to find jets in the current event
1611 Int_t n = fPythia->GetN();
1614 if (fJetReconstruction == kCluster) {
1616 // Configure cluster algorithm
1618 fPythia->SetPARU(43, 2.);
1619 fPythia->SetMSTU(41, 1);
1621 // Call cluster algorithm
1623 fPythia->Pyclus(nJets);
1625 // Loading jets from common block
1631 fPythia->Pycell(nJets);
1635 for (i = 0; i < nJets; i++) {
1636 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1637 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1638 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1639 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1640 Float_t pt = TMath::Sqrt(px * px + py * py);
1641 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1642 Float_t theta = TMath::ATan2(pt,pz);
1643 Float_t et = e * TMath::Sin(theta);
1644 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1646 eta > fEtaMinJet && eta < fEtaMaxJet &&
1647 phi > fPhiMinJet && phi < fPhiMaxJet &&
1648 et > fEtMinJet && et < fEtMaxJet
1651 jets[0][nJetsTrig] = px;
1652 jets[1][nJetsTrig] = py;
1653 jets[2][nJetsTrig] = pz;
1654 jets[3][nJetsTrig] = e;
1656 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1658 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1663 void AliGenPythia::GetSubEventTime()
1665 // Calculates time of the next subevent
1668 TArrayF &array = *fEventsTime;
1669 fEventTime = array[fCurSubEvent++];
1671 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1675 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1677 // Is particle in Central Barrel acceptance?
1679 if( eta < fTriggerEta )
1685 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1687 // Is particle in EMCAL acceptance?
1688 // phi in degrees, etamin=-etamax
1689 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1696 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1698 // Is particle in PHOS acceptance?
1699 // Acceptance slightly larger considered.
1700 // phi in degrees, etamin=-etamax
1701 // iparticle is the index of the particle to be checked, for PHOS rotation case
1703 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1708 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1714 void AliGenPythia::RotatePhi(Bool_t& okdd)
1716 //Rotate event in phi to enhance events in PHOS acceptance
1718 if(fPHOSRotateCandidate < 0) return ;
1720 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1721 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1722 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1723 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1725 //calculate deltaphi
1726 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1727 Double_t phphi = ph->Phi();
1728 Double_t deltaphi = phiPHOS - phphi;
1732 //loop for all particles and produce the phi rotation
1733 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1734 Double_t oldphi, newphi;
1735 Double_t newVx, newVy, r, vZ, time;
1736 Double_t newPx, newPy, pt, pz, e;
1737 for(Int_t i=0; i< np; i++) {
1738 TParticle* iparticle = (TParticle *) fParticles.At(i);
1739 oldphi = iparticle->Phi();
1740 newphi = oldphi + deltaphi;
1741 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1742 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1745 newVx = r * TMath::Cos(newphi);
1746 newVy = r * TMath::Sin(newphi);
1747 vZ = iparticle->Vz(); // don't transform
1748 time = iparticle->T(); // don't transform
1750 pt = iparticle->Pt();
1751 newPx = pt * TMath::Cos(newphi);
1752 newPy = pt * TMath::Sin(newphi);
1753 pz = iparticle->Pz(); // don't transform
1754 e = iparticle->Energy(); // don't transform
1757 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1758 iparticle->SetMomentum(newPx, newPy, pz, e);
1760 } //end particle loop
1762 // now let's check that we put correctly the candidate photon in PHOS
1763 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1764 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1765 if(IsInPHOS(phi,eta,-1))
1768 // reset the value for next event
1769 fPHOSRotateCandidate = -1;
1774 Bool_t AliGenPythia::CheckDiffraction()
1776 // use this method only with Perugia-0 tune!
1780 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1786 Double_t y2 = -1e10;
1788 const Int_t kNstable=20;
1789 const Int_t pdgStable[20] = {
1792 12, // Electron Neutrino
1794 14, // Muon Neutrino
1805 3112, // Sigma Minus
1812 for (Int_t i = 0; i < np; i++) {
1813 TParticle * part = (TParticle *) fParticles.At(i);
1815 Int_t statusCode = part->GetStatusCode();
1817 // Initial state particle
1818 if (statusCode != 1)
1821 Int_t pdg = TMath::Abs(part->GetPdgCode());
1822 Bool_t isStable = kFALSE;
1823 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1824 if (pdg == pdgStable[i1]) {
1832 Double_t y = part->Y();
1846 if(iPart1<0 || iPart2<0) return kFALSE;
1851 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1852 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1854 Int_t pdg1 = part1->GetPdgCode();
1855 Int_t pdg2 = part2->GetPdgCode();
1859 if (pdg1 == 2212 && pdg2 == 2212)
1867 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1870 else if (pdg1 == 2212)
1872 else if (pdg2 == 2212)
1881 TParticle * part = (TParticle *) fParticles.At(iPart);
1882 Double_t E= part->Energy();
1883 Double_t P= part->P();
1884 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1885 if(M2<0) return kFALSE;
1889 Double_t Mmin, Mmax, wSD, wDD, wND;
1890 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1892 if(M>-1 && M<Mmin) return kFALSE;
1895 Int_t procType=fPythia->GetMSTI(1);
1897 if(procType== 94) proc0=1;
1898 if(procType== 92 || procType== 93) proc0=0;
1902 else if(proc0==1) proc=1;
1904 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1905 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1908 // if(proc==1 || proc==2) return kFALSE;
1911 if(proc0!=0) fProcDiff = procType;
1912 else fProcDiff = 95;
1916 if(wSD<0) AliError("wSD<0 ! \n");
1918 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1920 // printf("iPart = %d\n", iPart);
1922 if(iPart==iPart1) fProcDiff=93;
1923 else if(iPart==iPart2) fProcDiff=92;
1925 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1934 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1935 Double_t &wSD, Double_t &wDD, Double_t &wND)
1939 if(TMath::Abs(fEnergyCMS-900)<1 ){
1941 const Int_t nbin=400;
1943 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1944 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1945 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1946 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1947 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1948 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1949 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1950 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1951 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1952 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1953 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1954 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1955 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1956 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1957 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1958 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1959 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1960 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1961 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1962 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1963 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1964 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1965 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1966 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1967 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1968 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1969 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1970 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1971 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1972 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1973 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1974 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1975 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1976 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1977 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1978 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1979 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1980 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1981 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1982 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1983 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1984 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1985 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1986 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1987 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1988 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1989 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1990 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1991 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1992 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1993 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1994 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1995 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1996 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
1997 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
1998 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
1999 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2000 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2001 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2002 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2003 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2004 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2005 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2006 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2007 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2008 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2009 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2011 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
2012 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
2013 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
2014 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
2015 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
2016 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
2017 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
2018 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
2019 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
2020 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
2021 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
2022 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
2023 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
2024 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
2025 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
2026 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
2027 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
2028 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
2029 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
2030 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
2031 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
2032 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
2033 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
2034 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
2035 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
2036 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
2037 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
2038 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
2039 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
2040 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
2041 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
2042 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
2043 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
2044 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
2045 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
2046 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
2047 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
2048 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2049 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2050 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2051 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2052 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2053 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2054 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2055 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2056 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2057 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2058 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2059 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2060 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2061 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2062 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2063 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2064 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2065 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2066 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2067 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2068 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2069 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2070 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2071 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2072 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2073 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2074 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2075 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2076 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2077 0.386112, 0.364314, 0.434375, 0.334629};
2084 if(M<Mmin || M>Mmax) return kTRUE;
2087 for(Int_t i=1; i<=nbin; i++)
2090 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2096 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2098 const Int_t nbin=400;
2100 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2101 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2102 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2103 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2104 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2105 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2106 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2107 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2108 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2109 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2110 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2111 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2112 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2113 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2114 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2115 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2116 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2117 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2118 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2119 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2120 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2121 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2122 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2123 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2124 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2125 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2126 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2127 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2128 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2129 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2130 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2131 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2132 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2133 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2134 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2135 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2136 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2137 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2138 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2139 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2140 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2141 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2142 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2143 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2144 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2145 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2146 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2147 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2148 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2149 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2150 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2151 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2152 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2153 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2154 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2155 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2156 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2157 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2158 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2159 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2160 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2161 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2162 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2163 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2164 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2165 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2166 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2168 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2169 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2170 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2171 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2172 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2173 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2174 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2175 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2176 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2177 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2178 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2179 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2180 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2181 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2182 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2183 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2184 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2185 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2186 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2187 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2188 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2189 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2190 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2191 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2192 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2193 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2194 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2195 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2196 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2197 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2198 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2199 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2200 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2201 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2202 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2203 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2204 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2205 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2206 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2207 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2208 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2209 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2210 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2211 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2212 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2213 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2214 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2215 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2216 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2217 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2218 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2219 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2220 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2221 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2222 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2223 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2224 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2225 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2226 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2227 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2228 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2229 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2230 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2231 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2232 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2233 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2234 0.201712, 0.242225, 0.255565, 0.258738};
2241 if(M<Mmin || M>Mmax) return kTRUE;
2244 for(Int_t i=1; i<=nbin; i++)
2247 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2255 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2256 const Int_t nbin=400;
2258 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2259 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2260 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2261 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2262 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2263 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2264 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2265 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2266 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2267 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2268 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2269 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2270 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2271 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2272 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2273 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2274 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2275 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2276 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2277 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2278 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2279 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2280 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2281 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2282 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2283 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2284 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2285 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2286 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2287 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2288 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2289 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2290 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2291 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2292 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2293 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2294 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2295 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2296 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2297 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2298 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2299 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2300 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2301 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2302 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2303 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2304 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2305 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2306 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2307 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2308 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2309 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2310 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2311 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2312 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2313 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2314 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2315 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2316 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2317 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2318 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2319 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2320 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2321 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2322 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2323 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2324 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2326 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2327 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2328 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2329 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2330 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2331 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2332 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2333 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2334 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2335 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2336 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2337 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2338 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2339 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2340 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2341 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2342 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2343 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2344 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2345 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2346 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2347 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2348 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2349 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2350 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2351 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2352 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2353 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2354 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2355 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2356 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2357 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2358 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2359 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2360 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2361 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2362 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2363 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2364 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2365 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2366 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2367 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2368 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2369 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2370 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2371 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2372 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2373 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2374 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2375 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2376 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2377 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2378 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2379 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2380 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2381 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2382 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2383 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2384 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2385 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2386 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2387 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2388 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2389 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2390 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2391 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2392 0.175006, 0.223482, 0.202706, 0.218108};
2400 if(M<Mmin || M>Mmax) return kTRUE;
2403 for(Int_t i=1; i<=nbin; i++)
2406 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2416 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2418 // Check if this is a heavy flavor decay product
2419 TParticle * part = (TParticle *) fParticles.At(ipart);
2420 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2421 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2424 if (mfl >= 4 && mfl < 6) return kTRUE;
2426 Int_t imo = part->GetFirstMother()-1;
2427 TParticle* pm = part;
2429 // Heavy flavor hadron produced by generator
2431 pm = (TParticle*)fParticles.At(imo);
2432 mpdg = TMath::Abs(pm->GetPdgCode());
2433 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2434 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2435 imo = pm->GetFirstMother()-1;
2440 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2442 // check the eta/phi correspond to the detectors acceptance
2443 // iparticle is the index of the particle to be checked, for PHOS rotation case
2444 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2445 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2446 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2450 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2452 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2453 // implemented primaryly for kPyJets, but extended to any kind of process.
2455 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2456 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2459 for (Int_t i=0; i< np; i++) {
2461 TParticle* iparticle = (TParticle *) fParticles.At(i);
2463 Int_t pdg = iparticle->GetPdgCode();
2464 Int_t status = iparticle->GetStatusCode();
2465 Int_t imother = iparticle->GetFirstMother() - 1;
2467 TParticle* pmother = 0x0;
2468 Int_t momStatus = -1;
2471 pmother = (TParticle *) fParticles.At(imother);
2472 momStatus = pmother->GetStatusCode();
2473 momPdg = pmother->GetPdgCode();
2479 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2482 if (fHadronInCalo && status == 1)
2484 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2485 // (in case neutral mesons were declared stable)
2489 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2493 //Fragmentation photon
2494 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2496 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2499 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2501 if( momStatus == 11)
2503 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2504 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2505 ok = kTRUE ; // photon from hadron decay
2507 //In case only decays from pi0 or eta requested
2508 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2509 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2513 // Pi0 or Eta particle
2514 else if ((fPi0InCalo || fEtaInCalo))
2516 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2518 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2520 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2523 else if (fEtaInCalo && pdg == 221)
2525 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2532 // Check that the selected particle is in the calorimeter acceptance
2534 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2536 //Just check if the selected particle falls in the acceptance
2537 if(!fForceNeutralMeson2PhotonDecay )
2539 //printf("\t Check acceptance! \n");
2540 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2541 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2543 if(CheckDetectorAcceptance(phi,eta,i))
2546 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));
2547 //printf("\t Accept \n");
2552 //Mesons have several decay modes, select only those decaying into 2 photons
2553 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2555 // In case we want the pi0/eta trigger,
2556 // check the decay mode (2 photons)
2558 //printf("\t Force decay 2 gamma\n");
2560 Int_t ndaughters = iparticle->GetNDaughters();
2561 if(ndaughters != 2){
2566 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2567 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2573 //iparticle->Print();
2577 Int_t pdgD1 = d1->GetPdgCode();
2578 Int_t pdgD2 = d2->GetPdgCode();
2579 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2580 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2582 if(pdgD1 != 22 || pdgD2 != 22){
2587 //printf("\t accept decay\n");
2589 //Trigger on the meson, not on the daughter
2590 if(!fDecayPhotonInCalo){
2592 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2593 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2595 if(CheckDetectorAcceptance(phi,eta,i))
2597 //printf("\t Accept meson pdg %d\n",pdg);
2599 AliDebug(1,Form("Selected trigger pdg %d (decay), status %d, pt %2.2f, eta %2.2f, phi %2.2f\n",pdg,status,iparticle->Pt(), eta, phi));
2607 //printf("Check daughters acceptance\n");
2609 //Trigger on the meson daughters
2611 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2612 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2613 if(d1->Pt() > fTriggerParticleMinPt)
2615 //printf("\t Check acceptance photon 1! \n");
2616 if(CheckDetectorAcceptance(phi,eta,i))
2618 //printf("\t Accept Photon 1\n");
2620 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));
2628 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2629 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2631 if(d2->Pt() > fTriggerParticleMinPt)
2633 //printf("\t Check acceptance photon 2! \n");
2634 if(CheckDetectorAcceptance(phi,eta,i))
2636 //printf("\t Accept Photon 2\n");
2638 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));
2644 } // force 2 photon daughters in pi0/eta decays
2646 } else ok = kFALSE; // check acceptance
2650 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2651 // A particle passing all trigger conditions except phi position in PHOS, is used as reference