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():
98 fDecayer(new AliDecayerPythia()),
106 fPhiMaxJet(2.* TMath::Pi()),
107 fJetReconstruction(kCell),
111 fPhiMaxGamma(2. * TMath::Pi()),
115 fPycellThreshold(0.),
117 fPycellMinEtJet(10.),
118 fPycellMaxRadius(1.),
119 fStackFillOpt(kFlavorSelection),
121 fFragmentation(kTRUE),
123 fUseNuclearPDF(kFALSE),
124 fUseLorentzBoost(kTRUE),
134 fTriggerMultiplicity(0),
135 fTriggerMultiplicityEta(0),
136 fTriggerMultiplicityEtaMin(0),
137 fTriggerMultiplicityEtaMax(0),
138 fTriggerMultiplicityPtMin(0),
139 fCountMode(kCountAll),
144 fFragPhotonInCalo(kFALSE),
145 fHadronInCalo(kFALSE) ,
148 fPhotonInCalo(kFALSE), // not in use
149 fDecayPhotonInCalo(kFALSE),
150 fForceNeutralMeson2PhotonDecay(kFALSE),
152 fEleInEMCAL(kFALSE), // not in use
153 fCheckBarrel(kFALSE),
156 fCheckPHOSeta(kFALSE),
157 fPHOSRotateCandidate(-1),
158 fTriggerParticleMinPt(0),
159 fPhotonMinPt(0), // not in use
160 fElectronMinPt(0), // not in use
170 // Default Constructor
172 if (!AliPythiaRndm::GetPythiaRandom())
173 AliPythiaRndm::SetPythiaRandom(GetRandom());
176 AliGenPythia::AliGenPythia(Int_t npart)
188 fInteractionRate(0.),
204 fHadronisation(kTRUE),
205 fPatchOmegaDalitz(0),
208 fReadFromFile(kFALSE),
221 fDecayer(new AliDecayerPythia()),
222 fDebugEventFirst(-1),
229 fPhiMaxJet(2.* TMath::Pi()),
230 fJetReconstruction(kCell),
234 fPhiMaxGamma(2. * TMath::Pi()),
238 fPycellThreshold(0.),
240 fPycellMinEtJet(10.),
241 fPycellMaxRadius(1.),
242 fStackFillOpt(kFlavorSelection),
244 fFragmentation(kTRUE),
246 fUseNuclearPDF(kFALSE),
247 fUseLorentzBoost(kTRUE),
257 fTriggerMultiplicity(0),
258 fTriggerMultiplicityEta(0),
259 fTriggerMultiplicityEtaMin(0),
260 fTriggerMultiplicityEtaMax(0),
261 fTriggerMultiplicityPtMin(0),
262 fCountMode(kCountAll),
267 fFragPhotonInCalo(kFALSE),
268 fHadronInCalo(kFALSE) ,
271 fPhotonInCalo(kFALSE), // not in use
272 fDecayPhotonInCalo(kFALSE),
273 fForceNeutralMeson2PhotonDecay(kFALSE),
275 fEleInEMCAL(kFALSE), // not in use
276 fCheckBarrel(kFALSE),
279 fCheckPHOSeta(kFALSE),
280 fPHOSRotateCandidate(-1),
281 fTriggerParticleMinPt(0),
282 fPhotonMinPt(0), // not in use
283 fElectronMinPt(0), // not in use
293 // default charm production at 5. 5 TeV
295 // structure function GRVHO
299 fTitle= "Particle Generator using PYTHIA";
301 // Set random number generator
302 if (!AliPythiaRndm::GetPythiaRandom())
303 AliPythiaRndm::SetPythiaRandom(GetRandom());
306 AliGenPythia::~AliGenPythia()
309 if(fEventsTime) delete fEventsTime;
312 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
314 // Generate pileup using user specified rate
315 fInteractionRate = rate;
316 fTimeWindow = timewindow;
320 void AliGenPythia::GeneratePileup()
322 // Generate sub events time for pileup
324 if(fInteractionRate == 0.) {
325 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
329 Int_t npart = NumberParticles();
331 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
335 if(fEventsTime) delete fEventsTime;
336 fEventsTime = new TArrayF(npart);
337 TArrayF &array = *fEventsTime;
338 for(Int_t ipart = 0; ipart < npart; ipart++)
341 Float_t eventtime = 0.;
344 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
345 if(eventtime > fTimeWindow) break;
346 array.Set(array.GetSize()+1);
347 array[array.GetSize()-1] = eventtime;
353 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
354 if(TMath::Abs(eventtime) > fTimeWindow) break;
355 array.Set(array.GetSize()+1);
356 array[array.GetSize()-1] = eventtime;
359 SetNumberParticles(fEventsTime->GetSize());
362 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
363 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
365 // Set pycell parameters
366 fPycellEtaMax = etamax;
369 fPycellThreshold = thresh;
370 fPycellEtSeed = etseed;
371 fPycellMinEtJet = minet;
372 fPycellMaxRadius = r;
377 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
379 // Set a range of event numbers, for which a table
380 // of generated particle will be printed
381 fDebugEventFirst = eventFirst;
382 fDebugEventLast = eventLast;
383 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
386 void AliGenPythia::Init()
390 SetMC(AliPythia::Instance());
391 fPythia=(AliPythia*) fMCEvGen;
394 fParentWeight=1./Float_t(fNpart);
396 if (fWeightPower != 0)
397 fPythia->SetWeightPower(fWeightPower);
398 fPythia->SetCKIN(3,fPtHardMin);
399 fPythia->SetCKIN(4,fPtHardMax);
400 fPythia->SetCKIN(7,fYHardMin);
401 fPythia->SetCKIN(8,fYHardMax);
403 if (fProjectile != "p" || fTarget != "p") fPythia->SetCollisionSystem(fProjectile,fTarget);
406 fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
408 if (fFragmentation) {
409 fPythia->SetMSTP(111,1);
411 fPythia->SetMSTP(111,0);
415 // initial state radiation
416 fPythia->SetMSTP(61,fGinit);
417 // final state radiation
418 fPythia->SetMSTP(71,fGfinal);
419 //color reconnection strength
420 if(fCRoff==1)fPythia->SetMSTP(95,0);
423 fPythia->SetMSTP(91,1);
424 fPythia->SetPARP(91,fPtKick);
425 fPythia->SetPARP(93, 4. * fPtKick);
427 fPythia->SetMSTP(91,0);
430 if (fReadLHEF) fPythia->OpenFortranFile(97, const_cast<char*>(fkNameLHEF));
433 fRL = AliRunLoader::Open(fkFileName, "Partons");
434 fRL->LoadKinematics();
440 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
441 // Forward Paramters to the AliPythia object
442 fDecayer->SetForceDecay(fForceDecay);
443 // Switch off Heavy Flavors on request
445 // Maximum number of quark flavours used in pdf
446 fPythia->SetMSTP(58, 3);
447 // Maximum number of flavors that can be used in showers
448 fPythia->SetMSTJ(45, 3);
449 // Switch off g->QQbar splitting in decay table
450 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
456 // Parent and Children Selection
459 case kPyOldUEQ2ordered:
460 case kPyOldUEQ2ordered2:
464 case kPyCharmUnforced:
465 case kPyCharmPbPbMNR:
468 case kPyCharmppMNRwmi:
470 fParentSelect[0] = 411;
471 fParentSelect[1] = 421;
472 fParentSelect[2] = 431;
473 fParentSelect[3] = 4122;
474 fParentSelect[4] = 4232;
475 fParentSelect[5] = 4132;
476 fParentSelect[6] = 4332;
482 fParentSelect[0] = 421;
485 case kPyDPlusPbPbMNR:
488 fParentSelect[0] = 411;
491 case kPyDPlusStrangePbPbMNR:
492 case kPyDPlusStrangepPbMNR:
493 case kPyDPlusStrangeppMNR:
494 fParentSelect[0] = 431;
497 case kPyLambdacppMNR:
498 fParentSelect[0] = 4122;
503 case kPyBeautyPbPbMNR:
504 case kPyBeautypPbMNR:
506 case kPyBeautyppMNRwmi:
508 fParentSelect[0]= 511;
509 fParentSelect[1]= 521;
510 fParentSelect[2]= 531;
511 fParentSelect[3]= 5122;
512 fParentSelect[4]= 5132;
513 fParentSelect[5]= 5232;
514 fParentSelect[6]= 5332;
517 case kPyBeautyUnforced:
518 fParentSelect[0] = 511;
519 fParentSelect[1] = 521;
520 fParentSelect[2] = 531;
521 fParentSelect[3] = 5122;
522 fParentSelect[4] = 5132;
523 fParentSelect[5] = 5232;
524 fParentSelect[6] = 5332;
529 fParentSelect[0] = 443;
532 case kPyMbAtlasTuneMC09:
534 case kPyMbWithDirectPhoton:
546 case kPyMBRSingleDiffraction:
547 case kPyMBRDoubleDiffraction:
548 case kPyMBRCentralDiffraction:
553 // JetFinder for Trigger
555 // Configure detector (EMCAL like)
557 fPythia->SetPARU(51, fPycellEtaMax);
558 fPythia->SetMSTU(51, fPycellNEta);
559 fPythia->SetMSTU(52, fPycellNPhi);
561 // Configure Jet Finder
563 fPythia->SetPARU(58, fPycellThreshold);
564 fPythia->SetPARU(52, fPycellEtSeed);
565 fPythia->SetPARU(53, fPycellMinEtJet);
566 fPythia->SetPARU(54, fPycellMaxRadius);
567 fPythia->SetMSTU(54, 2);
569 // This counts the total number of calls to Pyevnt() per run.
580 // Reset Lorentz boost if demanded
581 if(!fUseLorentzBoost) {
583 Warning("Init","Demand to discard Lorentz boost.\n");
590 Warning("Init","Deprecated function SetNuclei() used (nPDFs + no boost). Use SetProjectile + SetTarget + SetUseNuclearPDF + SetUseLorentzBoost instead.\n");
592 fPythia->SetPARJ(200, 0.0);
593 fPythia->SetPARJ(199, 0.0);
594 fPythia->SetPARJ(198, 0.0);
595 fPythia->SetPARJ(197, 0.0);
598 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
601 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
604 // Nestor's change of the splittings
605 fPythia->SetPARJ(200, 0.8);
606 fPythia->SetMSTJ(41, 1); // QCD radiation only
607 fPythia->SetMSTJ(42, 2); // angular ordering
608 fPythia->SetMSTJ(44, 2); // option to run alpha_s
609 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
610 fPythia->SetMSTJ(50, 0); // No coherence in first branching
611 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
612 } else if (fQuench == 4) {
613 // Armesto-Cunqueiro-Salgado change of the splittings.
614 AliFastGlauber* glauber = AliFastGlauber::Instance();
616 //read and store transverse almonds corresponding to differnt
618 glauber->SetCentralityClass(0.,0.1);
619 fPythia->SetPARJ(200, 1.);
620 fPythia->SetPARJ(198, fQhat);
621 fPythia->SetPARJ(199, fLength);
622 fPythia->SetMSTJ(42, 2); // angular ordering
623 fPythia->SetMSTJ(44, 2); // option to run alpha_s
624 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
627 if ( AliLog::GetDebugLevel("","AliGenPythia") >= 1 ) {
633 void AliGenPythia::Generate()
635 // Generate one event
636 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
637 fDecayer->ForceDecay();
639 Double_t polar[3] = {0,0,0};
640 Double_t origin[3] = {0,0,0};
642 // converts from mm/c to s
643 const Float_t kconv=0.001/2.999792458e8;
653 // Set collision vertex position
654 if (fVertexSmear == kPerEvent) Vertex();
663 // Switch hadronisation off
665 fPythia->SetMSTJ(1, 0);
669 // Quenching comes through medium-modified splitting functions.
670 AliFastGlauber::Instance()->GetRandomBHard(bimp);
671 fPythia->SetPARJ(197, bimp);
676 // Either produce new event or read partons from file
678 if (!fReadFromFile) {
684 fNpartons = fPythia->GetN();
686 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
687 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
689 LoadEvent(fRL->Stack(), 0 , 1);
694 // Run quenching routine
698 } else if (fQuench == 2){
699 fPythia->Pyquen(208., 0, 0.);
700 } else if (fQuench == 3) {
701 // Quenching is via multiplicative correction of the splittings
705 // Switch hadronisation on
707 if (fHadronisation) {
708 fPythia->SetMSTJ(1, 1);
710 // .. and perform hadronisation
711 // printf("Calling hadronisation %d\n", fPythia->GetN());
713 if (fPatchOmegaDalitz) {
714 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
716 fPythia->DalitzDecays();
717 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
720 else if (fDecayerExodus) {
722 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 0);
723 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
724 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 0);
726 fPythia->OmegaDalitz();
727 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
728 fPythia->PizeroDalitz();
729 fPythia->PhiDalitz();
730 fPythia->SetMDCY(fPythia->Pycomp(221) ,1, 1);
731 fPythia->EtaDalitz();
732 fPythia->EtaprimeDalitz();
733 fPythia->SetMDCY(fPythia->Pycomp(22) ,1, 1);
734 fPythia->RhoDirect();
735 fPythia->OmegaDirect();
736 fPythia->PhiDirect();
737 fPythia->JPsiDirect();
743 fPythia->ImportParticles(&fParticles,"All");
745 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
746 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
754 Int_t np = fParticles.GetEntriesFast();
756 if (np == 0) continue;
760 Int_t* pParent = new Int_t[np];
761 Int_t* pSelected = new Int_t[np];
762 Int_t* trackIt = new Int_t[np];
763 for (i = 0; i < np; i++) {
769 Int_t nc = 0; // Total n. of selected particles
770 Int_t nParents = 0; // Selected parents
771 Int_t nTkbles = 0; // Trackable particles
772 if (fProcess != kPyMbDefault &&
774 fProcess != kPyMbAtlasTuneMC09 &&
775 fProcess != kPyMbWithDirectPhoton &&
776 fProcess != kPyJets &&
777 fProcess != kPyDirectGamma &&
778 fProcess != kPyMbNonDiffr &&
779 fProcess != kPyMbMSEL1 &&
782 fProcess != kPyZgamma &&
783 fProcess != kPyCharmppMNRwmi &&
784 fProcess != kPyBeautyppMNRwmi &&
785 fProcess != kPyBeautyJets &&
786 fProcess != kPyWPWHG &&
787 fProcess != kPyJetsPWHG &&
788 fProcess != kPyCharmPWHG &&
789 fProcess != kPyBeautyPWHG) {
791 for (i = 0; i < np; i++) {
792 TParticle* iparticle = (TParticle *) fParticles.At(i);
793 Int_t ks = iparticle->GetStatusCode();
794 kf = CheckPDGCode(iparticle->GetPdgCode());
795 // No initial state partons
796 if (ks==21) continue;
798 // Heavy Flavor Selection
805 if (kfl > 100000) kfl %= 100000;
806 if (kfl > 10000) kfl %= 10000;
808 if (kfl > 10) kfl/=100;
810 if (kfl > 10) kfl/=10;
811 Int_t ipa = iparticle->GetFirstMother()-1;
814 // Establish mother daughter relation between heavy quarks and mesons
816 if (kf >= fFlavorSelect && kf <= 6) {
817 Int_t idau = iparticle->GetFirstDaughter() - 1;
819 TParticle* daughter = (TParticle *) fParticles.At(idau);
820 Int_t pdgD = daughter->GetPdgCode();
821 if (pdgD == 91 || pdgD == 92) {
822 Int_t jmin = daughter->GetFirstDaughter() - 1;
823 Int_t jmax = daughter->GetLastDaughter() - 1;
824 for (Int_t jp = jmin; jp <= jmax; jp++)
825 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
826 } // is string or cluster
832 TParticle * mother = (TParticle *) fParticles.At(ipa);
833 kfMo = TMath::Abs(mother->GetPdgCode());
836 // What to keep in Stack?
837 Bool_t flavorOK = kFALSE;
838 Bool_t selectOK = kFALSE;
840 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
842 if (kfl > fFlavorSelect) {
846 if (kfl == fFlavorSelect) flavorOK = kTRUE;
848 switch (fStackFillOpt) {
850 case kFlavorSelection:
853 case kParentSelection:
854 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
857 if (flavorOK && selectOK) {
859 // Heavy flavor hadron or quark
861 // Kinematic seletion on final state heavy flavor mesons
862 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
867 if (ParentSelected(kf)) ++nParents; // Update parent count
868 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
870 // Kinematic seletion on decay products
871 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
872 && !KinematicSelection(iparticle, 1))
878 // Select if mother was selected and is not tracked
880 if (pSelected[ipa] &&
881 !trackIt[ipa] && // mother will be tracked ?
882 kfMo != 5 && // mother is b-quark, don't store fragments
883 kfMo != 4 && // mother is c-quark, don't store fragments
884 kf != 92) // don't store string
887 // Semi-stable or de-selected: diselect decay products:
890 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
892 Int_t ipF = iparticle->GetFirstDaughter();
893 Int_t ipL = iparticle->GetLastDaughter();
894 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
896 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
897 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
900 if (pSelected[i] == -1) pSelected[i] = 0;
901 if (!pSelected[i]) continue;
902 // Count quarks only if you did not include fragmentation
903 if (fFragmentation && kf <= 10) continue;
906 // Decision on tracking
909 // Track final state particle
910 if (ks == 1) trackIt[i] = 1;
911 // Track semi-stable particles
912 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
913 // Track particles selected by process if undecayed.
914 if (fForceDecay == kNoDecay) {
915 if (ParentSelected(kf)) trackIt[i] = 1;
917 if (ParentSelected(kf)) trackIt[i] = 0;
919 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
923 } // particle selection loop
925 for (i = 0; i<np; i++) {
926 if (!pSelected[i]) continue;
927 TParticle * iparticle = (TParticle *) fParticles.At(i);
928 kf = CheckPDGCode(iparticle->GetPdgCode());
929 Int_t ks = iparticle->GetStatusCode();
930 p[0] = iparticle->Px();
931 p[1] = iparticle->Py();
932 p[2] = iparticle->Pz();
933 p[3] = iparticle->Energy();
935 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
936 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
937 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
939 Float_t tof = fTime + kconv*iparticle->T();
940 Int_t ipa = iparticle->GetFirstMother()-1;
941 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
943 PushTrack(fTrackIt*trackIt[i], iparent, kf,
944 p[0], p[1], p[2], p[3],
945 origin[0], origin[1], origin[2], tof,
946 polar[0], polar[1], polar[2],
947 kPPrimary, nt, 1., ks);
964 switch (fCountMode) {
966 // printf(" Count all \n");
970 // printf(" Count parents \n");
973 case kCountTrackables:
974 // printf(" Count trackable \n");
978 if (jev >= fNpart || fNpart == -1) {
979 fKineBias=Float_t(fNpart)/Float_t(fTrials);
981 fQ += fPythia->GetVINT(51);
982 fX1 += fPythia->GetVINT(41);
983 fX2 += fPythia->GetVINT(42);
984 fTrialsRun += fTrials;
991 SetHighWaterMark(nt);
992 // adjust weight due to kinematic selection
995 fXsection=fPythia->GetPARI(1);
998 Int_t AliGenPythia::GenerateMB()
1001 // Min Bias selection and other global selections
1003 Int_t i, kf, nt, iparent;
1006 Double_t polar[3] = {0,0,0};
1007 Double_t origin[3] = {0,0,0};
1008 // converts from mm/c to s
1009 const Float_t kconv=0.001/2.999792458e8;
1012 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1016 Int_t* pParent = new Int_t[np];
1017 for (i=0; i< np; i++) pParent[i] = -1;
1018 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1019 && fEtMinJet > 0.) {
1020 TParticle* jet1 = (TParticle *) fParticles.At(6);
1021 TParticle* jet2 = (TParticle *) fParticles.At(7);
1023 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
1030 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
1031 // implemented primaryly for kPyJets, but extended to any kind of process.
1032 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
1033 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
1034 Bool_t ok = TriggerOnSelectedParticles(np);
1042 // Check for diffraction
1044 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
1045 if(!CheckDiffraction()) {
1052 // Check for minimum multiplicity
1053 if (fTriggerMultiplicity > 0) {
1054 Int_t multiplicity = 0;
1055 for (i = 0; i < np; i++) {
1056 TParticle * iparticle = (TParticle *) fParticles.At(i);
1058 Int_t statusCode = iparticle->GetStatusCode();
1060 // Initial state particle
1061 if (statusCode != 1)
1064 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
1066 //multiplicity check for a given eta range
1067 if ((fTriggerMultiplicityEtaMin != fTriggerMultiplicityEtaMax) &&
1068 (iparticle->Eta() < fTriggerMultiplicityEtaMin || iparticle->Eta() > fTriggerMultiplicityEtaMax))
1071 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1074 TParticlePDG* pdgPart = iparticle->GetPDG();
1075 if (pdgPart && pdgPart->Charge() == 0)
1081 if (multiplicity < fTriggerMultiplicity) {
1085 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1089 if (fTriggerParticle) {
1090 Bool_t triggered = kFALSE;
1091 for (i = 0; i < np; i++) {
1092 TParticle * iparticle = (TParticle *) fParticles.At(i);
1093 kf = CheckPDGCode(iparticle->GetPdgCode());
1094 if (kf != fTriggerParticle) continue;
1095 if (iparticle->Pt() == 0.) continue;
1096 if (TMath::Abs(iparticle->Y()) > fTriggerY) continue;
1097 if (fTriggerEtaMin == fTriggerEta) {
1098 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1100 if (iparticle->Eta() > fTriggerEta || iparticle->Eta() < fTriggerEtaMin) continue;
1102 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1113 // Check if there is a ccbar or bbbar pair with at least one of the two
1114 // in fYMin < y < fYMax
1116 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1117 TParticle *partCheck;
1119 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1120 Bool_t theChild=kFALSE;
1121 Bool_t triggered=kFALSE;
1123 Int_t pdg, mpdg, mpdgUpperFamily;
1124 for(i = 0; i < np; i++) {
1125 partCheck = (TParticle*)fParticles.At(i);
1126 pdg = partCheck->GetPdgCode();
1127 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1128 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1129 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1130 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1131 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1133 if(fTriggerParticle) {
1134 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1136 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1137 Int_t mi = partCheck->GetFirstMother() - 1;
1139 mother = (TParticle*)fParticles.At(mi);
1140 mpdg=TMath::Abs(mother->GetPdgCode());
1141 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1142 if ( ParentSelected(mpdg) ||
1143 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1144 if (KinematicSelection(partCheck,1)) {
1150 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1154 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1158 if(fTriggerParticle && !triggered) { // particle requested is not produced
1165 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1167 fProcess == kPyWPWHG ||
1170 fProcess == kPyZgamma ||
1171 fProcess == kPyMbDefault ||
1172 fProcess == kPyMb ||
1173 fProcess == kPyMbAtlasTuneMC09 ||
1174 fProcess == kPyMbWithDirectPhoton ||
1175 fProcess == kPyMbNonDiffr)
1176 && (fCutOnChild == 1) ) {
1177 if ( !CheckKinematicsOnChild() ) {
1184 for (i = 0; i < np; i++) {
1186 TParticle * iparticle = (TParticle *) fParticles.At(i);
1187 kf = CheckPDGCode(iparticle->GetPdgCode());
1188 Int_t ks = iparticle->GetStatusCode();
1189 Int_t km = iparticle->GetFirstMother();
1191 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1192 ((fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) && ks == 21 && km == 0 && i>1)
1196 if (ks == 1) trackIt = 1;
1197 Int_t ipa = iparticle->GetFirstMother()-1;
1199 iparent = (ipa > -1) ? pParent[ipa] : -1;
1202 // store track information
1203 p[0] = iparticle->Px();
1204 p[1] = iparticle->Py();
1205 p[2] = iparticle->Pz();
1206 p[3] = iparticle->Energy();
1209 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1210 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1211 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1213 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1215 PushTrack(fTrackIt*trackIt, iparent, kf,
1216 p[0], p[1], p[2], p[3],
1217 origin[0], origin[1], origin[2], tof,
1218 polar[0], polar[1], polar[2],
1219 kPPrimary, nt, 1., ks);
1223 SetHighWaterMark(nt);
1225 } // select particle
1234 void AliGenPythia::FinishRun()
1236 // Print x-section summary
1245 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1246 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1249 void AliGenPythia::AdjustWeights() const
1251 // Adjust the weights after generation of all events
1255 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1256 for (Int_t i=0; i<ntrack; i++) {
1257 part= gAlice->GetMCApp()->Particle(i);
1258 part->SetWeight(part->GetWeight()*fKineBias);
1263 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1265 // Treat protons as inside nuclei with mass numbers a1 and a2
1269 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1270 fUseNuclearPDF = kTRUE;
1275 void AliGenPythia::MakeHeader()
1278 // Make header for the simulated event
1281 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1282 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1285 // Builds the event header, to be called after each event
1286 if (fHeader) delete fHeader;
1287 fHeader = new AliGenPythiaEventHeader("Pythia");
1291 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1292 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1293 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1296 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1299 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1302 fHeader->SetPrimaryVertex(fVertex);
1303 fHeader->SetInteractionTime(fTime+fEventTime);
1305 // Number of primaries
1306 fHeader->SetNProduced(fNprimaries);
1309 fHeader->SetEventWeight(fPythia->GetVINT(97));
1311 // Jets that have triggered
1313 //Need to store jets for b-jet studies too!
1314 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG)
1317 Float_t jets[4][10];
1318 GetJets(njet, ntrig, jets);
1321 for (Int_t i = 0; i < ntrig; i++) {
1322 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1327 // Copy relevant information from external header, if present.
1332 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1333 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1335 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1338 exHeader->TriggerJet(i, uqJet);
1339 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1343 // Store quenching parameters
1346 Double_t z[4] = {0.};
1352 fPythia->GetQuenchingParameters(xp, yp, z);
1353 } else if (fQuench == 2){
1355 Double_t r1 = PARIMP.rb1;
1356 Double_t r2 = PARIMP.rb2;
1357 Double_t b = PARIMP.b1;
1358 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1359 Double_t phi = PARIMP.psib1;
1360 xp = r * TMath::Cos(phi);
1361 yp = r * TMath::Sin(phi);
1363 } else if (fQuench == 4) {
1367 AliFastGlauber::Instance()->GetSavedXY(xy);
1368 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1371 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1374 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1375 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1378 // Store pt^hard and cross-section
1379 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1380 ((AliGenPythiaEventHeader*) fHeader)->SetXsection(fPythia->GetPARI(1));
1383 // Store Event Weight
1384 ((AliGenPythiaEventHeader*) fHeader)->SetEventWeight(fPythia->GetPARI(7)*fPythia->GetPARI(10));
1385 // PARI(7) is 1 or -1, for weighted generation with accept/reject, e.g. POWHEG
1386 // PARI(10) is a weight associated with reweighted generation, using Pyevwt
1394 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1396 // Check the kinematic trigger condition
1399 eta[0] = jet1->Eta();
1400 eta[1] = jet2->Eta();
1402 phi[0] = jet1->Phi();
1403 phi[1] = jet2->Phi();
1405 pdg[0] = jet1->GetPdgCode();
1406 pdg[1] = jet2->GetPdgCode();
1407 Bool_t triggered = kFALSE;
1409 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi || fProcess == kPyJetsPWHG || fProcess == kPyCharmPWHG || fProcess == kPyBeautyPWHG) {
1412 Float_t jets[4][10];
1414 // Use Pythia clustering on parton level to determine jet axis
1416 GetJets(njets, ntrig, jets);
1418 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1423 if (pdg[0] == kGamma) {
1427 //Check eta range first...
1428 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1429 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1431 //Eta is okay, now check phi range
1432 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1433 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1444 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1446 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1448 Bool_t checking = kFALSE;
1449 Int_t j, kcode, ks, km;
1450 Int_t nPartAcc = 0; //number of particles in the acceptance range
1451 Int_t numberOfAcceptedParticles = 1;
1452 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1453 Int_t npart = fParticles.GetEntriesFast();
1455 for (j = 0; j<npart; j++) {
1456 TParticle * jparticle = (TParticle *) fParticles.At(j);
1457 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1458 ks = jparticle->GetStatusCode();
1459 km = jparticle->GetFirstMother();
1461 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1464 if( numberOfAcceptedParticles <= nPartAcc){
1473 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1476 // Load event into Pythia Common Block
1479 Int_t npart = stack -> GetNprimary();
1483 (fPythia->GetPyjets())->N = npart;
1485 n0 = (fPythia->GetPyjets())->N;
1486 (fPythia->GetPyjets())->N = n0 + npart;
1490 for (Int_t part = 0; part < npart; part++) {
1491 TParticle *mPart = stack->Particle(part);
1493 Int_t kf = mPart->GetPdgCode();
1494 Int_t ks = mPart->GetStatusCode();
1495 Int_t idf = mPart->GetFirstDaughter();
1496 Int_t idl = mPart->GetLastDaughter();
1499 if (ks == 11 || ks == 12) {
1506 Float_t px = mPart->Px();
1507 Float_t py = mPart->Py();
1508 Float_t pz = mPart->Pz();
1509 Float_t e = mPart->Energy();
1510 Float_t m = mPart->GetCalcMass();
1513 (fPythia->GetPyjets())->P[0][part+n0] = px;
1514 (fPythia->GetPyjets())->P[1][part+n0] = py;
1515 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1516 (fPythia->GetPyjets())->P[3][part+n0] = e;
1517 (fPythia->GetPyjets())->P[4][part+n0] = m;
1519 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1520 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1521 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1522 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1523 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1527 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1530 // Load event into Pythia Common Block
1533 Int_t npart = stack -> GetEntries();
1537 (fPythia->GetPyjets())->N = npart;
1539 n0 = (fPythia->GetPyjets())->N;
1540 (fPythia->GetPyjets())->N = n0 + npart;
1544 for (Int_t part = 0; part < npart; part++) {
1545 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1546 if (!mPart) continue;
1548 Int_t kf = mPart->GetPdgCode();
1549 Int_t ks = mPart->GetStatusCode();
1550 Int_t idf = mPart->GetFirstDaughter();
1551 Int_t idl = mPart->GetLastDaughter();
1554 if (ks == 11 || ks == 12) {
1561 Float_t px = mPart->Px();
1562 Float_t py = mPart->Py();
1563 Float_t pz = mPart->Pz();
1564 Float_t e = mPart->Energy();
1565 Float_t m = mPart->GetCalcMass();
1568 (fPythia->GetPyjets())->P[0][part+n0] = px;
1569 (fPythia->GetPyjets())->P[1][part+n0] = py;
1570 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1571 (fPythia->GetPyjets())->P[3][part+n0] = e;
1572 (fPythia->GetPyjets())->P[4][part+n0] = m;
1574 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1575 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1576 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1577 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1578 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1583 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1586 // Calls the Pythia jet finding algorithm to find jets in the current event
1591 Int_t n = fPythia->GetN();
1595 fPythia->Pycell(njets);
1597 for (i = 0; i < njets; i++) {
1598 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1599 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1600 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1601 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1612 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1615 // Calls the Pythia clustering algorithm to find jets in the current event
1617 Int_t n = fPythia->GetN();
1620 if (fJetReconstruction == kCluster) {
1622 // Configure cluster algorithm
1624 fPythia->SetPARU(43, 2.);
1625 fPythia->SetMSTU(41, 1);
1627 // Call cluster algorithm
1629 fPythia->Pyclus(nJets);
1631 // Loading jets from common block
1637 fPythia->Pycell(nJets);
1641 for (i = 0; i < nJets; i++) {
1642 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1643 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1644 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1645 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1646 Float_t pt = TMath::Sqrt(px * px + py * py);
1647 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1648 Float_t theta = TMath::ATan2(pt,pz);
1649 Float_t et = e * TMath::Sin(theta);
1650 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1652 eta > fEtaMinJet && eta < fEtaMaxJet &&
1653 phi > fPhiMinJet && phi < fPhiMaxJet &&
1654 et > fEtMinJet && et < fEtMaxJet
1657 jets[0][nJetsTrig] = px;
1658 jets[1][nJetsTrig] = py;
1659 jets[2][nJetsTrig] = pz;
1660 jets[3][nJetsTrig] = e;
1662 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1664 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1669 void AliGenPythia::GetSubEventTime()
1671 // Calculates time of the next subevent
1674 TArrayF &array = *fEventsTime;
1675 fEventTime = array[fCurSubEvent++];
1677 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1681 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1683 // Is particle in Central Barrel acceptance?
1685 if( eta < fTriggerEta )
1691 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1693 // Is particle in EMCAL acceptance?
1694 // phi in degrees, etamin=-etamax
1695 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1702 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1704 // Is particle in PHOS acceptance?
1705 // Acceptance slightly larger considered.
1706 // phi in degrees, etamin=-etamax
1707 // iparticle is the index of the particle to be checked, for PHOS rotation case
1709 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1714 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1720 void AliGenPythia::RotatePhi(Bool_t& okdd)
1722 //Rotate event in phi to enhance events in PHOS acceptance
1724 if(fPHOSRotateCandidate < 0) return ;
1726 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1727 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1728 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1729 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1731 //calculate deltaphi
1732 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1733 Double_t phphi = ph->Phi();
1734 Double_t deltaphi = phiPHOS - phphi;
1738 //loop for all particles and produce the phi rotation
1739 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1740 Double_t oldphi, newphi;
1741 Double_t newVx, newVy, r, vZ, time;
1742 Double_t newPx, newPy, pt, pz, e;
1743 for(Int_t i=0; i< np; i++) {
1744 TParticle* iparticle = (TParticle *) fParticles.At(i);
1745 oldphi = iparticle->Phi();
1746 newphi = oldphi + deltaphi;
1747 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1748 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1751 newVx = r * TMath::Cos(newphi);
1752 newVy = r * TMath::Sin(newphi);
1753 vZ = iparticle->Vz(); // don't transform
1754 time = iparticle->T(); // don't transform
1756 pt = iparticle->Pt();
1757 newPx = pt * TMath::Cos(newphi);
1758 newPy = pt * TMath::Sin(newphi);
1759 pz = iparticle->Pz(); // don't transform
1760 e = iparticle->Energy(); // don't transform
1763 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1764 iparticle->SetMomentum(newPx, newPy, pz, e);
1766 } //end particle loop
1768 // now let's check that we put correctly the candidate photon in PHOS
1769 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1770 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1771 if(IsInPHOS(phi,eta,-1))
1774 // reset the value for next event
1775 fPHOSRotateCandidate = -1;
1780 Bool_t AliGenPythia::CheckDiffraction()
1782 // use this method only with Perugia-0 tune!
1786 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1792 Double_t y2 = -1e10;
1794 const Int_t kNstable=20;
1795 const Int_t pdgStable[20] = {
1798 12, // Electron Neutrino
1800 14, // Muon Neutrino
1811 3112, // Sigma Minus
1818 for (Int_t i = 0; i < np; i++) {
1819 TParticle * part = (TParticle *) fParticles.At(i);
1821 Int_t statusCode = part->GetStatusCode();
1823 // Initial state particle
1824 if (statusCode != 1)
1827 Int_t pdg = TMath::Abs(part->GetPdgCode());
1828 Bool_t isStable = kFALSE;
1829 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1830 if (pdg == pdgStable[i1]) {
1838 Double_t y = part->Y();
1852 if(iPart1<0 || iPart2<0) return kFALSE;
1857 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1858 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1860 Int_t pdg1 = part1->GetPdgCode();
1861 Int_t pdg2 = part2->GetPdgCode();
1865 if (pdg1 == 2212 && pdg2 == 2212)
1873 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1876 else if (pdg1 == 2212)
1878 else if (pdg2 == 2212)
1887 TParticle * part = (TParticle *) fParticles.At(iPart);
1888 Double_t E= part->Energy();
1889 Double_t P= part->P();
1890 Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
1891 if(M2<0) return kFALSE;
1895 Double_t Mmin, Mmax, wSD, wDD, wND;
1896 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1898 if(M>-1 && M<Mmin) return kFALSE;
1901 Int_t procType=fPythia->GetMSTI(1);
1903 if(procType== 94) proc0=1;
1904 if(procType== 92 || procType== 93) proc0=0;
1908 else if(proc0==1) proc=1;
1910 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1911 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1914 // if(proc==1 || proc==2) return kFALSE;
1917 if(proc0!=0) fProcDiff = procType;
1918 else fProcDiff = 95;
1922 if(wSD<0) AliError("wSD<0 ! \n");
1924 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1926 // printf("iPart = %d\n", iPart);
1928 if(iPart==iPart1) fProcDiff=93;
1929 else if(iPart==iPart2) fProcDiff=92;
1931 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1940 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1941 Double_t &wSD, Double_t &wDD, Double_t &wND)
1945 if(TMath::Abs(fEnergyCMS-900)<1 ){
1947 const Int_t nbin=400;
1949 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1950 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1951 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1952 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1953 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1954 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1955 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1956 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1957 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1958 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1959 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1960 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1961 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1962 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1963 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1964 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1965 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1966 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1967 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1968 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1969 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1970 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1971 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1972 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1973 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1974 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1975 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1976 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1977 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1978 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1979 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1980 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1981 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1982 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1983 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1984 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1985 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1986 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1987 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1988 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1989 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1990 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1991 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1992 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1993 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1994 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1995 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1996 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1997 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1998 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1999 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2000 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2001 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2002 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2003 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2004 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2005 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2006 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2007 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2008 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2009 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2010 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2011 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2012 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2013 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2014 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2015 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2017 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
2018 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
2019 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
2020 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
2021 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
2022 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
2023 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
2024 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
2025 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
2026 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
2027 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
2028 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
2029 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
2030 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
2031 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
2032 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
2033 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
2034 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
2035 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
2036 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
2037 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
2038 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
2039 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
2040 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
2041 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
2042 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
2043 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
2044 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
2045 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
2046 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
2047 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
2048 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
2049 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
2050 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
2051 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
2052 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
2053 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
2054 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
2055 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
2056 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
2057 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
2058 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
2059 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
2060 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
2061 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
2062 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
2063 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
2064 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
2065 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
2066 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
2067 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
2068 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
2069 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
2070 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
2071 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
2072 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
2073 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
2074 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
2075 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
2076 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
2077 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
2078 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
2079 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
2080 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
2081 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
2082 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
2083 0.386112, 0.364314, 0.434375, 0.334629};
2090 if(M<Mmin || M>Mmax) return kTRUE;
2093 for(Int_t i=1; i<=nbin; i++)
2096 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2102 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2104 const Int_t nbin=400;
2106 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2107 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2108 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2109 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2110 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2111 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2112 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2113 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2114 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2115 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2116 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2117 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2118 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2119 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2120 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2121 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2122 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2123 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2124 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2125 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2126 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2127 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2128 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2129 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2130 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2131 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2132 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2133 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2134 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2135 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2136 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2137 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2138 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2139 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2140 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2141 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2142 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2143 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2144 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2145 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2146 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2147 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2148 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2149 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2150 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2151 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2152 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2153 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2154 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2155 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2156 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2157 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2158 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2159 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2160 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2161 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2162 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2163 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2164 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2165 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2166 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2167 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2168 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2169 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2170 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2171 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2172 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2174 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2175 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2176 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2177 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2178 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2179 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2180 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2181 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2182 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2183 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2184 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2185 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2186 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2187 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2188 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2189 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2190 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2191 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2192 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2193 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2194 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2195 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2196 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2197 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2198 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2199 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2200 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2201 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2202 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2203 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2204 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2205 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2206 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2207 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2208 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2209 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2210 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2211 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2212 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2213 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2214 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2215 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2216 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2217 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2218 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2219 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2220 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2221 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2222 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2223 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2224 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2225 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2226 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2227 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2228 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2229 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2230 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2231 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2232 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2233 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2234 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2235 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2236 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2237 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2238 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2239 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2240 0.201712, 0.242225, 0.255565, 0.258738};
2247 if(M<Mmin || M>Mmax) return kTRUE;
2250 for(Int_t i=1; i<=nbin; i++)
2253 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2261 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2262 const Int_t nbin=400;
2264 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2265 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2266 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2267 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2268 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2269 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2270 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2271 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2272 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2273 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2274 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2275 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2276 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2277 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2278 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2279 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2280 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2281 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2282 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2283 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2284 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2285 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2286 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2287 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2288 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2289 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2290 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2291 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2292 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2293 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2294 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2295 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2296 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2297 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2298 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2299 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2300 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2301 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2302 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2303 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2304 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2305 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2306 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2307 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2308 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2309 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2310 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2311 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2312 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2313 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2314 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2315 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2316 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2317 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2318 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2319 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2320 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2321 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2322 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2323 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2324 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2325 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2326 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2327 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2328 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2329 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2330 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2332 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2333 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2334 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2335 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2336 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2337 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2338 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2339 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2340 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2341 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2342 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2343 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2344 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2345 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2346 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2347 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2348 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2349 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2350 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2351 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2352 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2353 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2354 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2355 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2356 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2357 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2358 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2359 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2360 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2361 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2362 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2363 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2364 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2365 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2366 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2367 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2368 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2369 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2370 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2371 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2372 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2373 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2374 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2375 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2376 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2377 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2378 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2379 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2380 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2381 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2382 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2383 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2384 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2385 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2386 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2387 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2388 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2389 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2390 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2391 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2392 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2393 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2394 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2395 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2396 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2397 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2398 0.175006, 0.223482, 0.202706, 0.218108};
2406 if(M<Mmin || M>Mmax) return kTRUE;
2409 for(Int_t i=1; i<=nbin; i++)
2412 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2422 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2424 // Check if this is a heavy flavor decay product
2425 TParticle * part = (TParticle *) fParticles.At(ipart);
2426 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2427 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2430 if (mfl >= 4 && mfl < 6) return kTRUE;
2432 Int_t imo = part->GetFirstMother()-1;
2433 TParticle* pm = part;
2435 // Heavy flavor hadron produced by generator
2437 pm = (TParticle*)fParticles.At(imo);
2438 mpdg = TMath::Abs(pm->GetPdgCode());
2439 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2440 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2441 imo = pm->GetFirstMother()-1;
2446 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2448 // check the eta/phi correspond to the detectors acceptance
2449 // iparticle is the index of the particle to be checked, for PHOS rotation case
2450 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2451 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2452 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2456 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2458 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2459 // implemented primaryly for kPyJets, but extended to any kind of process.
2461 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2462 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2465 for (Int_t i=0; i< np; i++) {
2467 TParticle* iparticle = (TParticle *) fParticles.At(i);
2469 Int_t pdg = iparticle->GetPdgCode();
2470 Int_t status = iparticle->GetStatusCode();
2471 Int_t imother = iparticle->GetFirstMother() - 1;
2473 TParticle* pmother = 0x0;
2474 Int_t momStatus = -1;
2477 pmother = (TParticle *) fParticles.At(imother);
2478 momStatus = pmother->GetStatusCode();
2479 momPdg = pmother->GetPdgCode();
2485 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2488 if (fHadronInCalo && status == 1)
2490 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2491 // (in case neutral mesons were declared stable)
2495 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2499 //Fragmentation photon
2500 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2502 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2505 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2507 if( momStatus == 11)
2509 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2510 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2511 ok = kTRUE ; // photon from hadron decay
2513 //In case only decays from pi0 or eta requested
2514 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2515 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2519 // Pi0 or Eta particle
2520 else if ((fPi0InCalo || fEtaInCalo))
2522 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2524 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2526 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2529 else if (fEtaInCalo && pdg == 221)
2531 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2538 // Check that the selected particle is in the calorimeter acceptance
2540 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2542 //Just check if the selected particle falls in the acceptance
2543 if(!fForceNeutralMeson2PhotonDecay )
2545 //printf("\t Check acceptance! \n");
2546 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2547 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2549 if(CheckDetectorAcceptance(phi,eta,i))
2552 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));
2553 //printf("\t Accept \n");
2558 //Mesons have several decay modes, select only those decaying into 2 photons
2559 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2561 // In case we want the pi0/eta trigger,
2562 // check the decay mode (2 photons)
2564 //printf("\t Force decay 2 gamma\n");
2566 Int_t ndaughters = iparticle->GetNDaughters();
2567 if(ndaughters != 2){
2572 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2573 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2579 //iparticle->Print();
2583 Int_t pdgD1 = d1->GetPdgCode();
2584 Int_t pdgD2 = d2->GetPdgCode();
2585 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2586 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2588 if(pdgD1 != 22 || pdgD2 != 22){
2593 //printf("\t accept decay\n");
2595 //Trigger on the meson, not on the daughter
2596 if(!fDecayPhotonInCalo){
2598 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2599 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2601 if(CheckDetectorAcceptance(phi,eta,i))
2603 //printf("\t Accept meson pdg %d\n",pdg);
2605 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));
2613 //printf("Check daughters acceptance\n");
2615 //Trigger on the meson daughters
2617 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2618 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2619 if(d1->Pt() > fTriggerParticleMinPt)
2621 //printf("\t Check acceptance photon 1! \n");
2622 if(CheckDetectorAcceptance(phi,eta,i))
2624 //printf("\t Accept Photon 1\n");
2626 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));
2634 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2635 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2637 if(d2->Pt() > fTriggerParticleMinPt)
2639 //printf("\t Check acceptance photon 2! \n");
2640 if(CheckDetectorAcceptance(phi,eta,i))
2642 //printf("\t Accept Photon 2\n");
2644 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));
2650 } // force 2 photon daughters in pi0/eta decays
2652 } else ok = kFALSE; // check acceptance
2656 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2657 // A particle passing all trigger conditions except phi position in PHOS, is used as reference