1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
19 // Generator using the TPythia interface (via AliPythia)
20 // to generate pp collisions.
21 // Using SetNuclei() also nuclear modifications to the structure functions
22 // can be taken into account. This makes, of course, only sense for the
23 // generation of the products of hard processes (heavy flavor, jets ...)
25 // andreas.morsch@cern.ch
28 #include <TClonesArray.h>
29 #include <TDatabasePDG.h>
30 #include <TParticle.h>
32 #include <TObjArray.h>
36 #include "AliDecayerPythia.h"
37 #include "AliGenPythia.h"
38 #include "AliFastGlauber.h"
39 #include "AliHeader.h"
40 #include "AliGenPythiaEventHeader.h"
41 #include "AliPythia.h"
42 #include "AliPythiaRndm.h"
45 #include "AliRunLoader.h"
48 #include "PyquenCommon.h"
50 ClassImp(AliGenPythia)
53 AliGenPythia::AliGenPythia():
97 fDecayer(new AliDecayerPythia()),
105 fPhiMaxJet(2.* TMath::Pi()),
106 fJetReconstruction(kCell),
110 fPhiMaxGamma(2. * TMath::Pi()),
114 fPycellThreshold(0.),
116 fPycellMinEtJet(10.),
117 fPycellMaxRadius(1.),
118 fStackFillOpt(kFlavorSelection),
120 fFragmentation(kTRUE),
122 fUseNuclearPDF(kFALSE),
123 fUseLorentzBoost(kTRUE),
131 fTriggerMultiplicity(0),
132 fTriggerMultiplicityEta(0),
133 fTriggerMultiplicityEtaMin(0),
134 fTriggerMultiplicityEtaMax(0),
135 fTriggerMultiplicityPtMin(0),
136 fCountMode(kCountAll),
141 fFragPhotonInCalo(kFALSE),
142 fHadronInCalo(kFALSE) ,
145 fPhotonInCalo(kFALSE), // not in use
146 fDecayPhotonInCalo(kFALSE),
147 fForceNeutralMeson2PhotonDecay(kFALSE),
149 fEleInEMCAL(kFALSE), // not in use
150 fCheckBarrel(kFALSE),
153 fCheckPHOSeta(kFALSE),
154 fPHOSRotateCandidate(-1),
155 fTriggerParticleMinPt(0),
156 fPhotonMinPt(0), // not in use
157 fElectronMinPt(0), // not in use
167 // Default Constructor
169 if (!AliPythiaRndm::GetPythiaRandom())
170 AliPythiaRndm::SetPythiaRandom(GetRandom());
173 AliGenPythia::AliGenPythia(Int_t npart)
185 fInteractionRate(0.),
200 fHadronisation(kTRUE),
201 fPatchOmegaDalitz(0),
204 fReadFromFile(kFALSE),
217 fDecayer(new AliDecayerPythia()),
218 fDebugEventFirst(-1),
225 fPhiMaxJet(2.* TMath::Pi()),
226 fJetReconstruction(kCell),
230 fPhiMaxGamma(2. * TMath::Pi()),
234 fPycellThreshold(0.),
236 fPycellMinEtJet(10.),
237 fPycellMaxRadius(1.),
238 fStackFillOpt(kFlavorSelection),
240 fFragmentation(kTRUE),
242 fUseNuclearPDF(kFALSE),
243 fUseLorentzBoost(kTRUE),
251 fTriggerMultiplicity(0),
252 fTriggerMultiplicityEta(0),
253 fTriggerMultiplicityEtaMin(0),
254 fTriggerMultiplicityEtaMax(0),
255 fTriggerMultiplicityPtMin(0),
256 fCountMode(kCountAll),
261 fFragPhotonInCalo(kFALSE),
262 fHadronInCalo(kFALSE) ,
265 fPhotonInCalo(kFALSE), // not in use
266 fDecayPhotonInCalo(kFALSE),
267 fForceNeutralMeson2PhotonDecay(kFALSE),
269 fEleInEMCAL(kFALSE), // not in use
270 fCheckBarrel(kFALSE),
273 fCheckPHOSeta(kFALSE),
274 fPHOSRotateCandidate(-1),
275 fTriggerParticleMinPt(0),
276 fPhotonMinPt(0), // not in use
277 fElectronMinPt(0), // not in use
287 // default charm production at 5. 5 TeV
289 // structure function GRVHO
293 fTitle= "Particle Generator using PYTHIA";
295 // Set random number generator
296 if (!AliPythiaRndm::GetPythiaRandom())
297 AliPythiaRndm::SetPythiaRandom(GetRandom());
300 AliGenPythia::~AliGenPythia()
303 if(fEventsTime) delete fEventsTime;
306 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
308 // Generate pileup using user specified rate
309 fInteractionRate = rate;
310 fTimeWindow = timewindow;
314 void AliGenPythia::GeneratePileup()
316 // Generate sub events time for pileup
318 if(fInteractionRate == 0.) {
319 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
323 Int_t npart = NumberParticles();
325 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
329 if(fEventsTime) delete fEventsTime;
330 fEventsTime = new TArrayF(npart);
331 TArrayF &array = *fEventsTime;
332 for(Int_t ipart = 0; ipart < npart; ipart++)
335 Float_t eventtime = 0.;
338 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
339 if(eventtime > fTimeWindow) break;
340 array.Set(array.GetSize()+1);
341 array[array.GetSize()-1] = eventtime;
347 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
348 if(TMath::Abs(eventtime) > fTimeWindow) break;
349 array.Set(array.GetSize()+1);
350 array[array.GetSize()-1] = eventtime;
353 SetNumberParticles(fEventsTime->GetSize());
356 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
357 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
359 // Set pycell parameters
360 fPycellEtaMax = etamax;
363 fPycellThreshold = thresh;
364 fPycellEtSeed = etseed;
365 fPycellMinEtJet = minet;
366 fPycellMaxRadius = r;
371 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
373 // Set a range of event numbers, for which a table
374 // of generated particle will be printed
375 fDebugEventFirst = eventFirst;
376 fDebugEventLast = eventLast;
377 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
380 void AliGenPythia::Init()
384 SetMC(AliPythia::Instance());
385 fPythia=(AliPythia*) fMCEvGen;
388 fParentWeight=1./Float_t(fNpart);
392 fPythia->SetCKIN(3,fPtHardMin);
393 fPythia->SetCKIN(4,fPtHardMax);
394 fPythia->SetCKIN(7,fYHardMin);
395 fPythia->SetCKIN(8,fYHardMax);
397 if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
400 fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
402 if (fFragmentation) {
403 fPythia->SetMSTP(111,1);
405 fPythia->SetMSTP(111,0);
409 // initial state radiation
410 fPythia->SetMSTP(61,fGinit);
411 // final state radiation
412 fPythia->SetMSTP(71,fGfinal);
413 //color reconnection strength
414 if(fCRoff==1)fPythia->SetMSTP(95,0);
417 fPythia->SetMSTP(91,1);
418 fPythia->SetPARP(91,fPtKick);
419 fPythia->SetPARP(93, 4. * fPtKick);
421 fPythia->SetMSTP(91,0);
424 if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
427 fRL = AliRunLoader::Open(fkFileName, "Partons");
428 fRL->LoadKinematics();
434 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
435 // Forward Paramters to the AliPythia object
436 fDecayer->SetForceDecay(fForceDecay);
437 // Switch off Heavy Flavors on request
439 // Maximum number of quark flavours used in pdf
440 fPythia->SetMSTP(58, 3);
441 // Maximum number of flavors that can be used in showers
442 fPythia->SetMSTJ(45, 3);
443 // Switch off g->QQbar splitting in decay table
444 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
450 // Parent and Children Selection
453 case kPyOldUEQ2ordered:
454 case kPyOldUEQ2ordered2:
458 case kPyCharmUnforced:
459 case kPyCharmPbPbMNR:
462 case kPyCharmppMNRwmi:
464 fParentSelect[0] = 411;
465 fParentSelect[1] = 421;
466 fParentSelect[2] = 431;
467 fParentSelect[3] = 4122;
468 fParentSelect[4] = 4232;
469 fParentSelect[5] = 4132;
470 fParentSelect[6] = 4332;
476 fParentSelect[0] = 421;
479 case kPyDPlusPbPbMNR:
482 fParentSelect[0] = 411;
485 case kPyDPlusStrangePbPbMNR:
486 case kPyDPlusStrangepPbMNR:
487 case kPyDPlusStrangeppMNR:
488 fParentSelect[0] = 431;
491 case kPyLambdacppMNR:
492 fParentSelect[0] = 4122;
497 case kPyBeautyPbPbMNR:
498 case kPyBeautypPbMNR:
500 case kPyBeautyppMNRwmi:
502 fParentSelect[0]= 511;
503 fParentSelect[1]= 521;
504 fParentSelect[2]= 531;
505 fParentSelect[3]= 5122;
506 fParentSelect[4]= 5132;
507 fParentSelect[5]= 5232;
508 fParentSelect[6]= 5332;
511 case kPyBeautyUnforced:
512 fParentSelect[0] = 511;
513 fParentSelect[1] = 521;
514 fParentSelect[2] = 531;
515 fParentSelect[3] = 5122;
516 fParentSelect[4] = 5132;
517 fParentSelect[5] = 5232;
518 fParentSelect[6] = 5332;
523 fParentSelect[0] = 443;
526 case kPyMbAtlasTuneMC09:
528 case kPyMbWithDirectPhoton:
540 case kPyMBRSingleDiffraction:
541 case kPyMBRDoubleDiffraction:
542 case kPyMBRCentralDiffraction:
547 // JetFinder for Trigger
549 // Configure detector (EMCAL like)
551 fPythia->SetPARU(51, fPycellEtaMax);
552 fPythia->SetMSTU(51, fPycellNEta);
553 fPythia->SetMSTU(52, fPycellNPhi);
555 // Configure Jet Finder
557 fPythia->SetPARU(58, fPycellThreshold);
558 fPythia->SetPARU(52, fPycellEtSeed);
559 fPythia->SetPARU(53, fPycellMinEtJet);
560 fPythia->SetPARU(54, fPycellMaxRadius);
561 fPythia->SetMSTU(54, 2);
563 // This counts the total number of calls to Pyevnt() per run.
574 // Reset Lorentz boost if demanded
575 if(!fUseLorentzBoost) {
577 Warning("Init","Demand to discard Lorentz boost.\n");
584 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
586 fPythia->SetPARJ(200, 0.0);
587 fPythia->SetPARJ(199, 0.0);
588 fPythia->SetPARJ(198, 0.0);
589 fPythia->SetPARJ(197, 0.0);
592 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
595 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
598 // Nestor's change of the splittings
599 fPythia->SetPARJ(200, 0.8);
600 fPythia->SetMSTJ(41, 1); // QCD radiation only
601 fPythia->SetMSTJ(42, 2); // angular ordering
602 fPythia->SetMSTJ(44, 2); // option to run alpha_s
603 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
604 fPythia->SetMSTJ(50, 0); // No coherence in first branching
605 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
606 } else if (fQuench == 4) {
607 // Armesto-Cunqueiro-Salgado change of the splittings.
608 AliFastGlauber* glauber = AliFastGlauber::Instance();
610 //read and store transverse almonds corresponding to differnt
612 glauber->SetCentralityClass(0.,0.1);
613 fPythia->SetPARJ(200, 1.);
614 fPythia->SetPARJ(198, fQhat);
615 fPythia->SetPARJ(199, fLength);
616 fPythia->SetMSTJ(42, 2); // angular ordering
617 fPythia->SetMSTJ(44, 2); // option to run alpha_s
618 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
621 if ( AliLog::GetDebugLevel("","AliGenPythia") >= 1 ) {
627 void AliGenPythia::Generate()
629 // Generate one event
630 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
631 fDecayer->ForceDecay();
633 Double_t polar[3] = {0,0,0};
634 Double_t origin[3] = {0,0,0};
636 // converts from mm/c to s
637 const Float_t kconv=0.001/2.999792458e8;
647 // Set collision vertex position
648 if (fVertexSmear == kPerEvent) Vertex();
657 // Switch hadronisation off
659 fPythia->SetMSTJ(1, 0);
663 // Quenching comes through medium-modified splitting functions.
664 AliFastGlauber::Instance()->GetRandomBHard(bimp);
665 fPythia->SetPARJ(197, bimp);
670 // Either produce new event or read partons from file
672 if (!fReadFromFile) {
678 fNpartons = fPythia->GetN();
680 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
681 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
683 LoadEvent(fRL->Stack(), 0 , 1);
688 // Run quenching routine
692 } else if (fQuench == 2){
693 fPythia->Pyquen(208., 0, 0.);
694 } else if (fQuench == 3) {
695 // Quenching is via multiplicative correction of the splittings
699 // Switch hadronisation on
701 if (fHadronisation) {
702 fPythia->SetMSTJ(1, 1);
704 // .. and perform hadronisation
705 // printf("Calling hadronisation %d\n", fPythia->GetN());
707 if (fPatchOmegaDalitz) {
708 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
710 fPythia->DalitzDecays();
711 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
714 else if (fDecayerExodus) {
716 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 0);
717 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
718 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 0);
720 fPythia->OmegaDalitz();
721 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
722 fPythia->PizeroDalitz();
723 fPythia->PhiDalitz();
724 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 1);
725 fPythia->EtaDalitz();
726 fPythia->EtaprimeDalitz();
727 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 1);
728 fPythia->RhoDirect();
729 fPythia->OmegaDirect();
730 fPythia->PhiDirect();
731 fPythia->JPsiDirect();
737 fPythia->ImportParticles(&fParticles,"All");
739 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
740 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
748 Int_t np = fParticles.GetEntriesFast();
750 if (np == 0) continue;
754 Int_t* pParent = new Int_t[np];
755 Int_t* pSelected = new Int_t[np];
756 Int_t* trackIt = new Int_t[np];
757 for (i = 0; i < np; i++) {
763 Int_t nc = 0; // Total n. of selected particles
764 Int_t nParents = 0; // Selected parents
765 Int_t nTkbles = 0; // Trackable particles
766 if (fProcess != kPyMbDefault &&
768 fProcess != kPyMbAtlasTuneMC09 &&
769 fProcess != kPyMbWithDirectPhoton &&
770 fProcess != kPyJets &&
771 fProcess != kPyDirectGamma &&
772 fProcess != kPyMbNonDiffr &&
773 fProcess != kPyMbMSEL1 &&
776 fProcess != kPyZgamma &&
777 fProcess != kPyCharmppMNRwmi &&
778 fProcess != kPyBeautyppMNRwmi &&
779 fProcess != kPyBeautyJets &&
780 fProcess != kPyWPWHG &&
781 fProcess != kPyJetsPWHG &&
782 fProcess != kPyCharmPWHG &&
783 fProcess != kPyBeautyPWHG) {
785 for (i = 0; i < np; i++) {
786 TParticle* iparticle = (TParticle *) fParticles.At(i);
787 Int_t ks = iparticle->GetStatusCode();
788 kf = CheckPDGCode(iparticle->GetPdgCode());
789 // No initial state partons
790 if (ks==21) continue;
792 // Heavy Flavor Selection
799 if (kfl > 100000) kfl %= 100000;
800 if (kfl > 10000) kfl %= 10000;
802 if (kfl > 10) kfl/=100;
804 if (kfl > 10) kfl/=10;
805 Int_t ipa = iparticle->GetFirstMother()-1;
808 // Establish mother daughter relation between heavy quarks and mesons
810 if (kf >= fFlavorSelect && kf <= 6) {
811 Int_t idau = iparticle->GetFirstDaughter() - 1;
813 TParticle* daughter = (TParticle *) fParticles.At(idau);
814 Int_t pdgD = daughter->GetPdgCode();
815 if (pdgD == 91 || pdgD == 92) {
816 Int_t jmin = daughter->GetFirstDaughter() - 1;
817 Int_t jmax = daughter->GetLastDaughter() - 1;
818 for (Int_t jp = jmin; jp <= jmax; jp++)
819 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
820 } // is string or cluster
826 TParticle * mother = (TParticle *) fParticles.At(ipa);
827 kfMo = TMath::Abs(mother->GetPdgCode());
830 // What to keep in Stack?
831 Bool_t flavorOK = kFALSE;
832 Bool_t selectOK = kFALSE;
834 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
836 if (kfl > fFlavorSelect) {
840 if (kfl == fFlavorSelect) flavorOK = kTRUE;
842 switch (fStackFillOpt) {
844 case kFlavorSelection:
847 case kParentSelection:
848 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
851 if (flavorOK && selectOK) {
853 // Heavy flavor hadron or quark
855 // Kinematic seletion on final state heavy flavor mesons
856 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
861 if (ParentSelected(kf)) ++nParents; // Update parent count
862 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
864 // Kinematic seletion on decay products
865 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
866 && !KinematicSelection(iparticle, 1))
872 // Select if mother was selected and is not tracked
874 if (pSelected[ipa] &&
875 !trackIt[ipa] && // mother will be tracked ?
876 kfMo != 5 && // mother is b-quark, don't store fragments
877 kfMo != 4 && // mother is c-quark, don't store fragments
878 kf != 92) // don't store string
881 // Semi-stable or de-selected: diselect decay products:
884 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
886 Int_t ipF = iparticle->GetFirstDaughter();
887 Int_t ipL = iparticle->GetLastDaughter();
888 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
890 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
891 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
894 if (pSelected[i] == -1) pSelected[i] = 0;
895 if (!pSelected[i]) continue;
896 // Count quarks only if you did not include fragmentation
897 if (fFragmentation && kf <= 10) continue;
900 // Decision on tracking
903 // Track final state particle
904 if (ks == 1) trackIt[i] = 1;
905 // Track semi-stable particles
906 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
907 // Track particles selected by process if undecayed.
908 if (fForceDecay == kNoDecay) {
909 if (ParentSelected(kf)) trackIt[i] = 1;
911 if (ParentSelected(kf)) trackIt[i] = 0;
913 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
917 } // particle selection loop
919 for (i = 0; i<np; i++) {
920 if (!pSelected[i]) continue;
921 TParticle * iparticle = (TParticle *) fParticles.At(i);
922 kf = CheckPDGCode(iparticle->GetPdgCode());
923 Int_t ks = iparticle->GetStatusCode();
924 p[0] = iparticle->Px();
925 p[1] = iparticle->Py();
926 p[2] = iparticle->Pz();
927 p[3] = iparticle->Energy();
929 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
930 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
931 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
933 Float_t tof = fTime + kconv*iparticle->T();
934 Int_t ipa = iparticle->GetFirstMother()-1;
935 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
937 PushTrack(fTrackIt*trackIt[i], iparent, kf,
938 p[0], p[1], p[2], p[3],
939 origin[0], origin[1], origin[2], tof,
940 polar[0], polar[1], polar[2],
941 kPPrimary, nt, 1., ks);
958 switch (fCountMode) {
960 // printf(" Count all \n");
964 // printf(" Count parents \n");
967 case kCountTrackables:
968 // printf(" Count trackable \n");
972 if (jev >= fNpart || fNpart == -1) {
973 fKineBias=Float_t(fNpart)/Float_t(fTrials);
975 fQ += fPythia->GetVINT(51);
976 fX1 += fPythia->GetVINT(41);
977 fX2 += fPythia->GetVINT(42);
978 fTrialsRun += fTrials;
985 SetHighWaterMark(nt);
986 // adjust weight due to kinematic selection
989 fXsection=fPythia->GetPARI(1);
992 Int_t AliGenPythia::GenerateMB()
995 // Min Bias selection and other global selections
997 Int_t i, kf, nt, iparent;
1000 Double_t polar[3] = {0,0,0};
1001 Double_t origin[3] = {0,0,0};
1002 // converts from mm/c to s
1003 const Float_t kconv=0.001/2.999792458e8;
1006 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1010 Int_t* pParent = new Int_t[np];
1011 for (i=0; i< np; i++) pParent[i] = -1;
1012 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1013 && fEtMinJet > 0.) {
1014 TParticle* jet1 = (TParticle *) fParticles.At(6);
1015 TParticle* jet2 = (TParticle *) fParticles.At(7);
1017 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
1024 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
1025 // implemented primaryly for kPyJets, but extended to any kind of process.
1026 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
1027 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
1028 Bool_t ok = TriggerOnSelectedParticles(np);
1036 // Check for diffraction
1038 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1039 if(!CheckDiffraction()) {
1046 // Check for minimum multiplicity
1047 if (fTriggerMultiplicity > 0) {
1048 Int_t multiplicity = 0;
1049 for (i = 0; i < np; i++) {
1050 TParticle * iparticle = (TParticle *) fParticles.At(i);
1052 Int_t statusCode = iparticle->GetStatusCode();
1054 // Initial state particle
1055 if (statusCode != 1)
1058 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1060 //multiplicity check for a given eta range
1061 if ((fTriggerMultiplicityEtaMin != fTriggerMultiplicityEtaMax) &&
1062 (iparticle->Eta() < fTriggerMultiplicityEtaMin || iparticle->Eta() > fTriggerMultiplicityEtaMax))
1065 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1068 TParticlePDG* pdgPart = iparticle->GetPDG();
1069 if (pdgPart && pdgPart->Charge() == 0)
1075 if (multiplicity < fTriggerMultiplicity) {
1079 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1083 if (fTriggerParticle) {
1084 Bool_t triggered = kFALSE;
1085 for (i = 0; i < np; i++) {
1086 TParticle * iparticle = (TParticle *) fParticles.At(i);
1087 kf = CheckPDGCode(iparticle->GetPdgCode());
1088 if (kf != fTriggerParticle) continue;
1089 if (iparticle->Pt() == 0.) continue;
1090 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1091 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1102 // Check if there is a ccbar or bbbar pair with at least one of the two
1103 // in fYMin < y < fYMax
1105 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1106 TParticle *partCheck;
1108 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1109 Bool_t theChild=kFALSE;
1110 Bool_t triggered=kFALSE;
1112 Int_t pdg,mpdg,mpdgUpperFamily;
1113 for(i=0; i<np; i++) {
1114 partCheck = (TParticle*)fParticles.At(i);
1115 pdg = partCheck->GetPdgCode();
1116 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1117 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1118 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1119 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1120 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1122 if(fTriggerParticle) {
1123 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1125 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1126 Int_t mi = partCheck->GetFirstMother() - 1;
1128 mother = (TParticle*)fParticles.At(mi);
1129 mpdg=TMath::Abs(mother->GetPdgCode());
1130 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1131 if ( ParentSelected(mpdg) ||
1132 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1133 if (KinematicSelection(partCheck,1)) {
1139 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1143 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1147 if(fTriggerParticle && !triggered) { // particle requested is not produced
1154 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1156 fProcess == kPyWPWHG ||
1159 fProcess == kPyZgamma ||
1160 fProcess == kPyMbDefault ||
1161 fProcess == kPyMb ||
1162 fProcess == kPyMbAtlasTuneMC09 ||
1163 fProcess == kPyMbWithDirectPhoton ||
1164 fProcess == kPyMbNonDiffr)
1165 && (fCutOnChild == 1) ) {
1166 if ( !CheckKinematicsOnChild() ) {
1173 for (i = 0; i < np; i++) {
1175 TParticle * iparticle = (TParticle *) fParticles.At(i);
1176 kf = CheckPDGCode(iparticle->GetPdgCode());
1177 Int_t ks = iparticle->GetStatusCode();
1178 Int_t km = iparticle->GetFirstMother();
1180 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1181 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1185 if (ks == 1) trackIt = 1;
1186 Int_t ipa = iparticle->GetFirstMother()-1;
1188 iparent = (ipa > -1) ? pParent[ipa] : -1;
1191 // store track information
1192 p[0] = iparticle->Px();
1193 p[1] = iparticle->Py();
1194 p[2] = iparticle->Pz();
1195 p[3] = iparticle->Energy();
1198 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1199 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1200 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1202 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1204 PushTrack(fTrackIt*trackIt, iparent, kf,
1205 p[0], p[1], p[2], p[3],
1206 origin[0], origin[1], origin[2], tof,
1207 polar[0], polar[1], polar[2],
1208 kPPrimary, nt, 1., ks);
1212 SetHighWaterMark(nt);
1214 } // select particle
1223 void AliGenPythia::FinishRun()
1225 // Print x-section summary
1234 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1235 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1238 void AliGenPythia::AdjustWeights() const
1240 // Adjust the weights after generation of all events
1244 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1245 for (Int_t i=0; i<ntrack; i++) {
1246 part= gAlice->GetMCApp()->Particle(i);
1247 part->SetWeight(part->GetWeight()*fKineBias);
1252 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1254 // Treat protons as inside nuclei with mass numbers a1 and a2
1258 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1259 fUseNuclearPDF = kTRUE;
1264 void AliGenPythia::MakeHeader()
1267 // Make header for the simulated event
1270 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1271 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1274 // Builds the event header, to be called after each event
1275 if (fHeader) delete fHeader;
1276 fHeader = new AliGenPythiaEventHeader("Pythia");
1280 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1281 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1282 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1285 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1288 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1291 fHeader->SetPrimaryVertex(fVertex);
1292 fHeader->SetInteractionTime(fTime+fEventTime);
1294 // Number of primaries
1295 fHeader->SetNProduced(fNprimaries);
1298 fHeader->SetEventWeight(fPythia->GetVINT(97));
1300 // Jets that have triggered
1302 //Need to store jets for b-jet studies too!
1303 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1306 Float_t jets[4][10];
1307 GetJets(njet, ntrig, jets);
1310 for (Int_t i = 0; i < ntrig; i++) {
1311 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1316 // Copy relevant information from external header, if present.
1321 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1322 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1324 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1327 exHeader->TriggerJet(i, uqJet);
1328 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1332 // Store quenching parameters
1335 Double_t z[4] = {0.};
1341 fPythia->GetQuenchingParameters(xp, yp, z);
1342 } else if (fQuench == 2){
1344 Double_t r1 = PARIMP.rb1;
1345 Double_t r2 = PARIMP.rb2;
1346 Double_t b = PARIMP.b1;
1347 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1348 Double_t phi = PARIMP.psib1;
1349 xp = r * TMath::Cos(phi);
1350 yp = r * TMath::Sin(phi);
1352 } else if (fQuench == 4) {
1356 AliFastGlauber::Instance()->GetSavedXY(xy);
1357 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1360 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1363 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1364 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1367 // Store pt^hard and cross-section
1368 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1369 ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
1372 // Store Event Weight
1373 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7));
1382 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1384 // Check the kinematic trigger condition
1387 eta[0] = jet1->Eta();
1388 eta[1] = jet2->Eta();
1390 phi[0] = jet1->Phi();
1391 phi[1] = jet2->Phi();
1393 pdg[0] = jet1->GetPdgCode();
1394 pdg[1] = jet2->GetPdgCode();
1395 Bool_t triggered = kFALSE;
1397 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1400 Float_t jets[4][10];
1402 // Use Pythia clustering on parton level to determine jet axis
1404 GetJets(njets, ntrig, jets);
1406 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1411 if (pdg[0] == kGamma) {
1415 //Check eta range first...
1416 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1417 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1419 //Eta is okay, now check phi range
1420 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1421 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1432 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1434 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1436 Bool_t checking = kFALSE;
1437 Int_t j, kcode, ks, km;
1438 Int_t nPartAcc = 0; //number of particles in the acceptance range
1439 Int_t numberOfAcceptedParticles = 1;
1440 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1441 Int_t npart = fParticles.GetEntriesFast();
1443 for (j = 0; j<npart; j++) {
1444 TParticle * jparticle = (TParticle *) fParticles.At(j);
1445 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1446 ks = jparticle->GetStatusCode();
1447 km = jparticle->GetFirstMother();
1449 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1452 if( numberOfAcceptedParticles <= nPartAcc){
1461 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1464 // Load event into Pythia Common Block
1467 Int_t npart = stack -> GetNprimary();
1471 (fPythia->GetPyjets())->N = npart;
1473 n0 = (fPythia->GetPyjets())->N;
1474 (fPythia->GetPyjets())->N = n0 + npart;
1478 for (Int_t part = 0; part < npart; part++) {
1479 TParticle *mPart = stack->Particle(part);
1481 Int_t kf = mPart->GetPdgCode();
1482 Int_t ks = mPart->GetStatusCode();
1483 Int_t idf = mPart->GetFirstDaughter();
1484 Int_t idl = mPart->GetLastDaughter();
1487 if (ks == 11 || ks == 12) {
1494 Float_t px = mPart->Px();
1495 Float_t py = mPart->Py();
1496 Float_t pz = mPart->Pz();
1497 Float_t e = mPart->Energy();
1498 Float_t m = mPart->GetCalcMass();
1501 (fPythia->GetPyjets())->P[0][part+n0] = px;
1502 (fPythia->GetPyjets())->P[1][part+n0] = py;
1503 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1504 (fPythia->GetPyjets())->P[3][part+n0] = e;
1505 (fPythia->GetPyjets())->P[4][part+n0] = m;
1507 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1508 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1509 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1510 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1511 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1515 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1518 // Load event into Pythia Common Block
1521 Int_t npart = stack -> GetEntries();
1525 (fPythia->GetPyjets())->N = npart;
1527 n0 = (fPythia->GetPyjets())->N;
1528 (fPythia->GetPyjets())->N = n0 + npart;
1532 for (Int_t part = 0; part < npart; part++) {
1533 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1534 if (!mPart) continue;
1536 Int_t kf = mPart->GetPdgCode();
1537 Int_t ks = mPart->GetStatusCode();
1538 Int_t idf = mPart->GetFirstDaughter();
1539 Int_t idl = mPart->GetLastDaughter();
1542 if (ks == 11 || ks == 12) {
1549 Float_t px = mPart->Px();
1550 Float_t py = mPart->Py();
1551 Float_t pz = mPart->Pz();
1552 Float_t e = mPart->Energy();
1553 Float_t m = mPart->GetCalcMass();
1556 (fPythia->GetPyjets())->P[0][part+n0] = px;
1557 (fPythia->GetPyjets())->P[1][part+n0] = py;
1558 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1559 (fPythia->GetPyjets())->P[3][part+n0] = e;
1560 (fPythia->GetPyjets())->P[4][part+n0] = m;
1562 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1563 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1564 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1565 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1566 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1571 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1574 // Calls the Pythia jet finding algorithm to find jets in the current event
1579 Int_t n = fPythia->GetN();
1583 fPythia->Pycell(njets);
1585 for (i = 0; i < njets; i++) {
1586 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1587 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1588 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1589 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1600 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1603 // Calls the Pythia clustering algorithm to find jets in the current event
1605 Int_t n = fPythia->GetN();
1608 if (fJetReconstruction == kCluster) {
1610 // Configure cluster algorithm
1612 fPythia->SetPARU(43, 2.);
1613 fPythia->SetMSTU(41, 1);
1615 // Call cluster algorithm
1617 fPythia->Pyclus(nJets);
1619 // Loading jets from common block
1625 fPythia->Pycell(nJets);
1629 for (i = 0; i < nJets; i++) {
1630 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1631 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1632 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1633 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1634 Float_t pt = TMath::Sqrt(px * px + py * py);
1635 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1636 Float_t theta = TMath::ATan2(pt,pz);
1637 Float_t et = e * TMath::Sin(theta);
1638 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1640 eta > fEtaMinJet && eta < fEtaMaxJet &&
1641 phi > fPhiMinJet && phi < fPhiMaxJet &&
1642 et > fEtMinJet && et < fEtMaxJet
1645 jets[0][nJetsTrig] = px;
1646 jets[1][nJetsTrig] = py;
1647 jets[2][nJetsTrig] = pz;
1648 jets[3][nJetsTrig] = e;
1650 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1652 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1657 void AliGenPythia::GetSubEventTime()
1659 // Calculates time of the next subevent
1662 TArrayF &array = *fEventsTime;
1663 fEventTime = array[fCurSubEvent++];
1665 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1669 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1671 // Is particle in Central Barrel acceptance?
1673 if( eta < fTriggerEta )
1679 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1681 // Is particle in EMCAL acceptance?
1682 // phi in degrees, etamin=-etamax
1683 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1690 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1692 // Is particle in PHOS acceptance?
1693 // Acceptance slightly larger considered.
1694 // phi in degrees, etamin=-etamax
1695 // iparticle is the index of the particle to be checked, for PHOS rotation case
1697 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1702 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1708 void AliGenPythia::RotatePhi(Bool_t& okdd)
1710 //Rotate event in phi to enhance events in PHOS acceptance
1712 if(fPHOSRotateCandidate < 0) return ;
1714 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1715 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1716 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1717 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1719 //calculate deltaphi
1720 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1721 Double_t phphi = ph->Phi();
1722 Double_t deltaphi = phiPHOS - phphi;
1726 //loop for all particles and produce the phi rotation
1727 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1728 Double_t oldphi, newphi;
1729 Double_t newVx, newVy, r, vZ, time;
1730 Double_t newPx, newPy, pt, pz, e;
1731 for(Int_t i=0; i< np; i++) {
1732 TParticle* iparticle = (TParticle *) fParticles.At(i);
1733 oldphi = iparticle->Phi();
1734 newphi = oldphi + deltaphi;
1735 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1736 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1739 newVx = r * TMath::Cos(newphi);
1740 newVy = r * TMath::Sin(newphi);
1741 vZ = iparticle->Vz(); // don't transform
1742 time = iparticle->T(); // don't transform
1744 pt = iparticle->Pt();
1745 newPx = pt * TMath::Cos(newphi);
1746 newPy = pt * TMath::Sin(newphi);
1747 pz = iparticle->Pz(); // don't transform
1748 e = iparticle->Energy(); // don't transform
1751 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1752 iparticle->SetMomentum(newPx, newPy, pz, e);
1754 } //end particle loop
1756 // now let's check that we put correctly the candidate photon in PHOS
1757 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1758 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1759 if(IsInPHOS(phi,eta,-1))
1762 // reset the value for next event
1763 fPHOSRotateCandidate = -1;
1768 Bool_t AliGenPythia::CheckDiffraction()
1770 // use this method only with Perugia-0 tune!
1774 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1780 Double_t y2 = -1e10;
1782 const Int_t kNstable=20;
1783 const Int_t pdgStable[20] = {
1786 12, // Electron Neutrino
1788 14, // Muon Neutrino
1799 3112, // Sigma Minus
1806 for (Int_t i = 0; i < np; i++) {
1807 TParticle * part = (TParticle *) fParticles.At(i);
1809 Int_t statusCode = part->GetStatusCode();
1811 // Initial state particle
1812 if (statusCode != 1)
1815 Int_t pdg = TMath::Abs(part->GetPdgCode());
1816 Bool_t isStable = kFALSE;
1817 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1818 if (pdg == pdgStable[i1]) {
1826 Double_t y = part->Y();
1840 if(iPart1<0 || iPart2<0) return kFALSE;
1845 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1846 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1848 Int_t pdg1 = part1->GetPdgCode();
1849 Int_t pdg2 = part2->GetPdgCode();
1853 if (pdg1 == 2212 && pdg2 == 2212)
1861 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1864 else if (pdg1 == 2212)
1866 else if (pdg2 == 2212)
1875 TParticle * part = (TParticle *) fParticles.At(iPart);
1876 Double_t E= part->Energy();
1877 Double_t P= part->P();
1878 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1879 if(M2<0) return kFALSE;
1883 Double_t Mmin, Mmax, wSD, wDD, wND;
1884 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1886 if(M>-1 && M<Mmin) return kFALSE;
1889 Int_t procType=fPythia->GetMSTI(1);
1891 if(procType== 94) proc0=1;
1892 if(procType== 92 || procType== 93) proc0=0;
1896 else if(proc0==1) proc=1;
1898 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1899 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1902 // if(proc==1 || proc==2) return kFALSE;
1905 if(proc0!=0) fProcDiff = procType;
1906 else fProcDiff = 95;
1910 if(wSD<0) AliError("wSD<0 ! \n");
1912 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1914 // printf("iPart = %d\n", iPart);
1916 if(iPart==iPart1) fProcDiff=93;
1917 else if(iPart==iPart2) fProcDiff=92;
1919 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1928 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1929 Double_t &wSD, Double_t &wDD, Double_t &wND)
1933 if(TMath::Abs(fEnergyCMS-900)<1 ){
1935 const Int_t nbin=400;
1937 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1938 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1939 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1940 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1941 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1942 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1943 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1944 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1945 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1946 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1947 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1948 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1949 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1950 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1951 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1952 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1953 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1954 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1955 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1956 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1957 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1958 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1959 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1960 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1961 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1962 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1963 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1964 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1965 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1966 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1967 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1968 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1969 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1970 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1971 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1972 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1973 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1974 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1975 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1976 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1977 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1978 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1979 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1980 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1981 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1982 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1983 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1984 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1985 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1986 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1987 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1988 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1989 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1990 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
1991 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
1992 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
1993 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
1994 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
1995 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
1996 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
1997 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
1998 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
1999 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2000 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2001 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2002 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2003 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2005 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
2006 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
2007 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
2008 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
2009 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
2010 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
2011 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
2012 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
2013 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
2014 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
2015 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
2016 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
2017 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
2018 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
2019 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
2020 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
2021 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
2022 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
2023 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
2024 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
2025 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
2026 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
2027 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
2028 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
2029 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
2030 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
2031 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
2032 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
2033 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
2034 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
2035 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
2036 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
2037 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
2038 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
2039 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
2040 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
2041 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
2042 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2043 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2044 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2045 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2046 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2047 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2048 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2049 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2050 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2051 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2052 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2053 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2054 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2055 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2056 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2057 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2058 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2059 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2060 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2061 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2062 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2063 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2064 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2065 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2066 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2067 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2068 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2069 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2070 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2071 0.386112, 0.364314, 0.434375, 0.334629};
2078 if(M<Mmin || M>Mmax) return kTRUE;
2081 for(Int_t i=1; i<=nbin; i++)
2084 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2090 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2092 const Int_t nbin=400;
2094 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2095 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2096 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2097 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2098 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2099 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2100 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2101 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2102 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2103 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2104 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2105 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2106 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2107 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2108 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2109 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2110 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2111 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2112 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2113 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2114 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2115 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2116 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2117 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2118 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2119 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2120 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2121 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2122 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2123 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2124 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2125 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2126 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2127 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2128 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2129 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2130 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2131 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2132 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2133 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2134 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2135 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2136 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2137 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2138 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2139 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2140 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2141 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2142 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2143 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2144 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2145 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2146 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2147 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2148 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2149 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2150 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2151 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2152 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2153 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2154 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2155 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2156 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2157 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2158 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2159 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2160 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2162 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2163 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2164 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2165 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2166 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2167 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2168 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2169 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2170 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2171 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2172 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2173 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2174 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2175 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2176 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2177 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2178 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2179 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2180 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2181 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2182 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2183 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2184 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2185 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2186 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2187 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2188 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2189 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2190 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2191 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2192 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2193 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2194 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2195 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2196 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2197 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2198 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2199 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2200 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2201 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2202 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2203 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2204 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2205 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2206 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2207 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2208 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2209 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2210 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2211 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2212 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2213 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2214 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2215 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2216 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2217 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2218 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2219 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2220 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2221 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2222 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2223 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2224 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2225 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2226 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2227 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2228 0.201712, 0.242225, 0.255565, 0.258738};
2235 if(M<Mmin || M>Mmax) return kTRUE;
2238 for(Int_t i=1; i<=nbin; i++)
2241 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2249 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2250 const Int_t nbin=400;
2252 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2253 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2254 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2255 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2256 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2257 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2258 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2259 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2260 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2261 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2262 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2263 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2264 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2265 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2266 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2267 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2268 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2269 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2270 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2271 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2272 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2273 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2274 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2275 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2276 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2277 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2278 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2279 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2280 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2281 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2282 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2283 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2284 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2285 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2286 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2287 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2288 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2289 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2290 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2291 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2292 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2293 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2294 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2295 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2296 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2297 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2298 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2299 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2300 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2301 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2302 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2303 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2304 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2305 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2306 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2307 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2308 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2309 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2310 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2311 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2312 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2313 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2314 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2315 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2316 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2317 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2318 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2320 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2321 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2322 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2323 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2324 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2325 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2326 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2327 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2328 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2329 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2330 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2331 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2332 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2333 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2334 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2335 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2336 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2337 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2338 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2339 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2340 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2341 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2342 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2343 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2344 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2345 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2346 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2347 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2348 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2349 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2350 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2351 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2352 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2353 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2354 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2355 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2356 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2357 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2358 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2359 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2360 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2361 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2362 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2363 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2364 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2365 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2366 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2367 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2368 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2369 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2370 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2371 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2372 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2373 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2374 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2375 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2376 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2377 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2378 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2379 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2380 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2381 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2382 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2383 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2384 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2385 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2386 0.175006, 0.223482, 0.202706, 0.218108};
2394 if(M<Mmin || M>Mmax) return kTRUE;
2397 for(Int_t i=1; i<=nbin; i++)
2400 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2410 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2412 // Check if this is a heavy flavor decay product
2413 TParticle * part = (TParticle *) fParticles.At(ipart);
2414 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2415 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2418 if (mfl >= 4 && mfl < 6) return kTRUE;
2420 Int_t imo = part->GetFirstMother()-1;
2421 TParticle* pm = part;
2423 // Heavy flavor hadron produced by generator
2425 pm = (TParticle*)fParticles.At(imo);
2426 mpdg = TMath::Abs(pm->GetPdgCode());
2427 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2428 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2429 imo = pm->GetFirstMother()-1;
2434 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2436 // check the eta/phi correspond to the detectors acceptance
2437 // iparticle is the index of the particle to be checked, for PHOS rotation case
2438 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2439 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2440 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2444 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2446 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2447 // implemented primaryly for kPyJets, but extended to any kind of process.
2449 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2450 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2453 for (Int_t i=0; i< np; i++) {
2455 TParticle* iparticle = (TParticle *) fParticles.At(i);
2457 Int_t pdg = iparticle->GetPdgCode();
2458 Int_t status = iparticle->GetStatusCode();
2459 Int_t imother = iparticle->GetFirstMother() - 1;
2461 TParticle* pmother = 0x0;
2462 Int_t momStatus = -1;
2465 pmother = (TParticle *) fParticles.At(imother);
2466 momStatus = pmother->GetStatusCode();
2467 momPdg = pmother->GetPdgCode();
2473 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2476 if (fHadronInCalo && status == 1)
2478 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2479 // (in case neutral mesons were declared stable)
2483 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2487 //Fragmentation photon
2488 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2490 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2493 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2495 if( momStatus == 11)
2497 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2498 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2499 ok = kTRUE ; // photon from hadron decay
2501 //In case only decays from pi0 or eta requested
2502 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2503 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2507 // Pi0 or Eta particle
2508 else if ((fPi0InCalo || fEtaInCalo))
2510 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2512 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2514 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2517 else if (fEtaInCalo && pdg == 221)
2519 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2526 // Check that the selected particle is in the calorimeter acceptance
2528 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2530 //Just check if the selected particle falls in the acceptance
2531 if(!fForceNeutralMeson2PhotonDecay )
2533 //printf("\t Check acceptance! \n");
2534 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2535 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2537 if(CheckDetectorAcceptance(phi,eta,i))
2540 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));
2541 //printf("\t Accept \n");
2546 //Mesons have several decay modes, select only those decaying into 2 photons
2547 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2549 // In case we want the pi0/eta trigger,
2550 // check the decay mode (2 photons)
2552 //printf("\t Force decay 2 gamma\n");
2554 Int_t ndaughters = iparticle->GetNDaughters();
2555 if(ndaughters != 2){
2560 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2561 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2567 //iparticle->Print();
2571 Int_t pdgD1 = d1->GetPdgCode();
2572 Int_t pdgD2 = d2->GetPdgCode();
2573 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2574 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2576 if(pdgD1 != 22 || pdgD2 != 22){
2581 //printf("\t accept decay\n");
2583 //Trigger on the meson, not on the daughter
2584 if(!fDecayPhotonInCalo){
2586 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2587 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2589 if(CheckDetectorAcceptance(phi,eta,i))
2591 //printf("\t Accept meson pdg %d\n",pdg);
2593 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));
2601 //printf("Check daughters acceptance\n");
2603 //Trigger on the meson daughters
2605 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2606 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2607 if(d1->Pt() > fTriggerParticleMinPt)
2609 //printf("\t Check acceptance photon 1! \n");
2610 if(CheckDetectorAcceptance(phi,eta,i))
2612 //printf("\t Accept Photon 1\n");
2614 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));
2622 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2623 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2625 if(d2->Pt() > fTriggerParticleMinPt)
2627 //printf("\t Check acceptance photon 2! \n");
2628 if(CheckDetectorAcceptance(phi,eta,i))
2630 //printf("\t Accept Photon 2\n");
2632 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));
2638 } // force 2 photon daughters in pi0/eta decays
2640 } else ok = kFALSE; // check acceptance
2644 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2645 // A particle passing all trigger conditions except phi position in PHOS, is used as reference