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"
51 ClassImp(AliGenPythia)
54 AliGenPythia::AliGenPythia():
95 fDecayer(new AliDecayerPythia()),
103 fPhiMaxJet(2.* TMath::Pi()),
104 fJetReconstruction(kCell),
108 fPhiMaxGamma(2. * TMath::Pi()),
112 fPycellThreshold(0.),
114 fPycellMinEtJet(10.),
115 fPycellMaxRadius(1.),
116 fStackFillOpt(kFlavorSelection),
118 fFragmentation(kTRUE),
127 fTriggerMultiplicity(0),
128 fTriggerMultiplicityEta(0),
129 fTriggerMultiplicityPtMin(0),
130 fCountMode(kCountAll),
134 fFragPhotonInCalo(kFALSE),
135 fHadronInCalo(kFALSE) ,
138 fPhotonInCalo(kFALSE), // not in use
139 fDecayPhotonInCalo(kFALSE),
140 fForceNeutralMeson2PhotonDecay(kFALSE),
142 fEleInEMCAL(kFALSE), // not in use
143 fCheckBarrel(kFALSE),
146 fCheckPHOSeta(kFALSE),
147 fPHOSRotateCandidate(-1),
148 fTriggerParticleMinPt(0),
149 fPhotonMinPt(0), // not in use
150 fElectronMinPt(0), // not in use
160 // Default Constructor
162 if (!AliPythiaRndm::GetPythiaRandom())
163 AliPythiaRndm::SetPythiaRandom(GetRandom());
166 AliGenPythia::AliGenPythia(Int_t npart)
178 fInteractionRate(0.),
192 fHadronisation(kTRUE),
193 fPatchOmegaDalitz(0),
195 fReadFromFile(kFALSE),
207 fDecayer(new AliDecayerPythia()),
208 fDebugEventFirst(-1),
215 fPhiMaxJet(2.* TMath::Pi()),
216 fJetReconstruction(kCell),
220 fPhiMaxGamma(2. * TMath::Pi()),
224 fPycellThreshold(0.),
226 fPycellMinEtJet(10.),
227 fPycellMaxRadius(1.),
228 fStackFillOpt(kFlavorSelection),
230 fFragmentation(kTRUE),
239 fTriggerMultiplicity(0),
240 fTriggerMultiplicityEta(0),
241 fTriggerMultiplicityPtMin(0),
242 fCountMode(kCountAll),
246 fFragPhotonInCalo(kFALSE),
247 fHadronInCalo(kFALSE) ,
250 fPhotonInCalo(kFALSE), // not in use
251 fDecayPhotonInCalo(kFALSE),
252 fForceNeutralMeson2PhotonDecay(kFALSE),
254 fEleInEMCAL(kFALSE), // not in use
255 fCheckBarrel(kFALSE),
258 fCheckPHOSeta(kFALSE),
259 fPHOSRotateCandidate(-1),
260 fTriggerParticleMinPt(0),
261 fPhotonMinPt(0), // not in use
262 fElectronMinPt(0), // not in use
272 // default charm production at 5. 5 TeV
274 // structure function GRVHO
278 fTitle= "Particle Generator using PYTHIA";
280 // Set random number generator
281 if (!AliPythiaRndm::GetPythiaRandom())
282 AliPythiaRndm::SetPythiaRandom(GetRandom());
285 AliGenPythia::~AliGenPythia()
288 if(fEventsTime) delete fEventsTime;
291 void AliGenPythia::SetInteractionRate(Float_t rate,Float_t timewindow)
293 // Generate pileup using user specified rate
294 fInteractionRate = rate;
295 fTimeWindow = timewindow;
299 void AliGenPythia::GeneratePileup()
301 // Generate sub events time for pileup
303 if(fInteractionRate == 0.) {
304 Warning("GeneratePileup","Zero interaction specified. Skipping pileup generation.\n");
308 Int_t npart = NumberParticles();
310 Warning("GeneratePileup","Negative number of particles. Skipping pileup generation.\n");
314 if(fEventsTime) delete fEventsTime;
315 fEventsTime = new TArrayF(npart);
316 TArrayF &array = *fEventsTime;
317 for(Int_t ipart = 0; ipart < npart; ipart++)
320 Float_t eventtime = 0.;
323 eventtime += (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
324 if(eventtime > fTimeWindow) break;
325 array.Set(array.GetSize()+1);
326 array[array.GetSize()-1] = eventtime;
332 eventtime -= (AliPythiaRndm::GetPythiaRandom())->Exp(1./fInteractionRate);
333 if(TMath::Abs(eventtime) > fTimeWindow) break;
334 array.Set(array.GetSize()+1);
335 array[array.GetSize()-1] = eventtime;
338 SetNumberParticles(fEventsTime->GetSize());
341 void AliGenPythia::SetPycellParameters(Float_t etamax, Int_t neta, Int_t nphi,
342 Float_t thresh, Float_t etseed, Float_t minet, Float_t r)
344 // Set pycell parameters
345 fPycellEtaMax = etamax;
348 fPycellThreshold = thresh;
349 fPycellEtSeed = etseed;
350 fPycellMinEtJet = minet;
351 fPycellMaxRadius = r;
356 void AliGenPythia::SetEventListRange(Int_t eventFirst, Int_t eventLast)
358 // Set a range of event numbers, for which a table
359 // of generated particle will be printed
360 fDebugEventFirst = eventFirst;
361 fDebugEventLast = eventLast;
362 if (fDebugEventLast==-1) fDebugEventLast=fDebugEventFirst;
365 void AliGenPythia::Init()
369 SetMC(AliPythia::Instance());
370 fPythia=(AliPythia*) fMCEvGen;
373 fParentWeight=1./Float_t(fNpart);
377 fPythia->SetCKIN(3,fPtHardMin);
378 fPythia->SetCKIN(4,fPtHardMax);
379 fPythia->SetCKIN(7,fYHardMin);
380 fPythia->SetCKIN(8,fYHardMax);
382 if (fAProjectile > 0 && fATarget > 0) fPythia->SetNuclei(fAProjectile, fATarget, fNucPdf);
384 if (fFragmentation) {
385 fPythia->SetMSTP(111,1);
387 fPythia->SetMSTP(111,0);
391 // initial state radiation
392 fPythia->SetMSTP(61,fGinit);
393 // final state radiation
394 fPythia->SetMSTP(71,fGfinal);
397 fPythia->SetMSTP(91,1);
398 fPythia->SetPARP(91,fPtKick);
399 fPythia->SetPARP(93, 4. * fPtKick);
401 fPythia->SetMSTP(91,0);
406 fRL = AliRunLoader::Open(fkFileName, "Partons");
407 fRL->LoadKinematics();
413 fPythia->ProcInit(fProcess,fEnergyCMS,fStrucFunc, fItune);
414 // Forward Paramters to the AliPythia object
415 fDecayer->SetForceDecay(fForceDecay);
416 // Switch off Heavy Flavors on request
418 // Maximum number of quark flavours used in pdf
419 fPythia->SetMSTP(58, 3);
420 // Maximum number of flavors that can be used in showers
421 fPythia->SetMSTJ(45, 3);
422 // Switch off g->QQbar splitting in decay table
423 ((AliDecayerPythia*) fDecayer)->HeavyFlavourOff();
429 // Parent and Children Selection
432 case kPyOldUEQ2ordered:
433 case kPyOldUEQ2ordered2:
437 case kPyCharmUnforced:
438 case kPyCharmPbPbMNR:
441 case kPyCharmppMNRwmi:
442 fParentSelect[0] = 411;
443 fParentSelect[1] = 421;
444 fParentSelect[2] = 431;
445 fParentSelect[3] = 4122;
446 fParentSelect[4] = 4232;
447 fParentSelect[5] = 4132;
448 fParentSelect[6] = 4332;
454 fParentSelect[0] = 421;
457 case kPyDPlusPbPbMNR:
460 fParentSelect[0] = 411;
463 case kPyDPlusStrangePbPbMNR:
464 case kPyDPlusStrangepPbMNR:
465 case kPyDPlusStrangeppMNR:
466 fParentSelect[0] = 431;
469 case kPyLambdacppMNR:
470 fParentSelect[0] = 4122;
475 case kPyBeautyPbPbMNR:
476 case kPyBeautypPbMNR:
478 case kPyBeautyppMNRwmi:
479 fParentSelect[0]= 511;
480 fParentSelect[1]= 521;
481 fParentSelect[2]= 531;
482 fParentSelect[3]= 5122;
483 fParentSelect[4]= 5132;
484 fParentSelect[5]= 5232;
485 fParentSelect[6]= 5332;
488 case kPyBeautyUnforced:
489 fParentSelect[0] = 511;
490 fParentSelect[1] = 521;
491 fParentSelect[2] = 531;
492 fParentSelect[3] = 5122;
493 fParentSelect[4] = 5132;
494 fParentSelect[5] = 5232;
495 fParentSelect[6] = 5332;
500 fParentSelect[0] = 443;
503 case kPyMbAtlasTuneMC09:
505 case kPyMbWithDirectPhoton:
514 case kPyMBRSingleDiffraction:
515 case kPyMBRDoubleDiffraction:
516 case kPyMBRCentralDiffraction:
521 // JetFinder for Trigger
523 // Configure detector (EMCAL like)
525 fPythia->SetPARU(51, fPycellEtaMax);
526 fPythia->SetMSTU(51, fPycellNEta);
527 fPythia->SetMSTU(52, fPycellNPhi);
529 // Configure Jet Finder
531 fPythia->SetPARU(58, fPycellThreshold);
532 fPythia->SetPARU(52, fPycellEtSeed);
533 fPythia->SetPARU(53, fPycellMinEtJet);
534 fPythia->SetPARU(54, fPycellMaxRadius);
535 fPythia->SetMSTU(54, 2);
537 // This counts the total number of calls to Pyevnt() per run.
552 Warning("Init","SetNuclei used. Use SetProjectile + SetTarget instead. fDyBoost has been reset to 0\n");
555 fPythia->SetPARJ(200, 0.0);
556 fPythia->SetPARJ(199, 0.0);
557 fPythia->SetPARJ(198, 0.0);
558 fPythia->SetPARJ(197, 0.0);
561 fPythia->InitQuenching(0., 0.1, 0.6e6, 0);
564 if(fQuench ==2){fPythia->SetPyquenParameters(fpyquenT,fpyquenTau,fpyquenNf,fpyquenEloss,fpyquenAngle);}
567 // Nestor's change of the splittings
568 fPythia->SetPARJ(200, 0.8);
569 fPythia->SetMSTJ(41, 1); // QCD radiation only
570 fPythia->SetMSTJ(42, 2); // angular ordering
571 fPythia->SetMSTJ(44, 2); // option to run alpha_s
572 fPythia->SetMSTJ(47, 0); // No correction back to hard scattering element
573 fPythia->SetMSTJ(50, 0); // No coherence in first branching
574 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
575 } else if (fQuench == 4) {
576 // Armesto-Cunqueiro-Salgado change of the splittings.
577 AliFastGlauber* glauber = AliFastGlauber::Instance();
579 //read and store transverse almonds corresponding to differnt
581 glauber->SetCentralityClass(0.,0.1);
582 fPythia->SetPARJ(200, 1.);
583 fPythia->SetPARJ(198, fQhat);
584 fPythia->SetPARJ(199, fLength);
585 fPythia->SetMSTJ(42, 2); // angular ordering
586 fPythia->SetMSTJ(44, 2); // option to run alpha_s
587 fPythia->SetPARJ(82, 1.); // Cut off for parton showers
591 void AliGenPythia::Generate()
593 // Generate one event
594 if (!fPythia) fPythia=(AliPythia*) fMCEvGen;
595 fDecayer->ForceDecay();
597 Double_t polar[3] = {0,0,0};
598 Double_t origin[3] = {0,0,0};
600 // converts from mm/c to s
601 const Float_t kconv=0.001/2.999792458e8;
611 // Set collision vertex position
612 if (fVertexSmear == kPerEvent) Vertex();
621 // Switch hadronisation off
623 fPythia->SetMSTJ(1, 0);
627 // Quenching comes through medium-modified splitting functions.
628 AliFastGlauber::Instance()->GetRandomBHard(bimp);
629 fPythia->SetPARJ(197, bimp);
634 // Either produce new event or read partons from file
636 if (!fReadFromFile) {
642 fNpartons = fPythia->GetN();
644 printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber());
645 fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber());
647 LoadEvent(fRL->Stack(), 0 , 1);
652 // Run quenching routine
656 } else if (fQuench == 2){
657 fPythia->Pyquen(208., 0, 0.);
658 } else if (fQuench == 3) {
659 // Quenching is via multiplicative correction of the splittings
663 // Switch hadronisation on
665 if (fHadronisation) {
666 fPythia->SetMSTJ(1, 1);
668 // .. and perform hadronisation
669 // printf("Calling hadronisation %d\n", fPythia->GetN());
671 if (fPatchOmegaDalitz) {
672 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 0);
674 fPythia->DalitzDecays();
675 fPythia->SetMDCY(fPythia->Pycomp(111) ,1, 1);
680 fPythia->ImportParticles(&fParticles,"All");
682 if (TMath::Abs(fDyBoost) > 1.e-4) Boost();
683 if(TMath::Abs(fXingAngleY) > 1.e-10) BeamCrossAngle();
691 Int_t np = fParticles.GetEntriesFast();
693 if (np == 0) continue;
697 Int_t* pParent = new Int_t[np];
698 Int_t* pSelected = new Int_t[np];
699 Int_t* trackIt = new Int_t[np];
700 for (i = 0; i < np; i++) {
706 Int_t nc = 0; // Total n. of selected particles
707 Int_t nParents = 0; // Selected parents
708 Int_t nTkbles = 0; // Trackable particles
709 if (fProcess != kPyMbDefault &&
711 fProcess != kPyMbAtlasTuneMC09 &&
712 fProcess != kPyMbWithDirectPhoton &&
713 fProcess != kPyJets &&
714 fProcess != kPyDirectGamma &&
715 fProcess != kPyMbNonDiffr &&
716 fProcess != kPyMbMSEL1 &&
719 fProcess != kPyCharmppMNRwmi &&
720 fProcess != kPyBeautyppMNRwmi &&
721 fProcess != kPyBeautyJets) {
723 for (i = 0; i < np; i++) {
724 TParticle* iparticle = (TParticle *) fParticles.At(i);
725 Int_t ks = iparticle->GetStatusCode();
726 kf = CheckPDGCode(iparticle->GetPdgCode());
727 // No initial state partons
728 if (ks==21) continue;
730 // Heavy Flavor Selection
737 if (kfl > 100000) kfl %= 100000;
738 if (kfl > 10000) kfl %= 10000;
740 if (kfl > 10) kfl/=100;
742 if (kfl > 10) kfl/=10;
743 Int_t ipa = iparticle->GetFirstMother()-1;
746 // Establish mother daughter relation between heavy quarks and mesons
748 if (kf >= fFlavorSelect && kf <= 6) {
749 Int_t idau = iparticle->GetFirstDaughter() - 1;
751 TParticle* daughter = (TParticle *) fParticles.At(idau);
752 Int_t pdgD = daughter->GetPdgCode();
753 if (pdgD == 91 || pdgD == 92) {
754 Int_t jmin = daughter->GetFirstDaughter() - 1;
755 Int_t jmax = daughter->GetLastDaughter() - 1;
756 for (Int_t jp = jmin; jp <= jmax; jp++)
757 ((TParticle *) fParticles.At(jp))->SetFirstMother(i+1);
758 } // is string or cluster
764 TParticle * mother = (TParticle *) fParticles.At(ipa);
765 kfMo = TMath::Abs(mother->GetPdgCode());
768 // What to keep in Stack?
769 Bool_t flavorOK = kFALSE;
770 Bool_t selectOK = kFALSE;
772 if (kfl >= fFlavorSelect) flavorOK = kTRUE;
774 if (kfl > fFlavorSelect) {
778 if (kfl == fFlavorSelect) flavorOK = kTRUE;
780 switch (fStackFillOpt) {
782 case kFlavorSelection:
785 case kParentSelection:
786 if (ParentSelected(kf) || kf <= 10) selectOK = kTRUE;
789 if (flavorOK && selectOK) {
791 // Heavy flavor hadron or quark
793 // Kinematic seletion on final state heavy flavor mesons
794 if (ParentSelected(kf) && !KinematicSelection(iparticle, 0))
799 if (ParentSelected(kf)) ++nParents; // Update parent count
800 // printf("\n particle (HF) %d %d %d", i, pSelected[i], kf);
802 // Kinematic seletion on decay products
803 if (fCutOnChild && ParentSelected(kfMo) && ChildSelected(kf)
804 && !KinematicSelection(iparticle, 1))
810 // Select if mother was selected and is not tracked
812 if (pSelected[ipa] &&
813 !trackIt[ipa] && // mother will be tracked ?
814 kfMo != 5 && // mother is b-quark, don't store fragments
815 kfMo != 4 && // mother is c-quark, don't store fragments
816 kf != 92) // don't store string
819 // Semi-stable or de-selected: diselect decay products:
822 if (pSelected[i] == -1 || fDecayer->GetLifetime(kf) > fMaxLifeTime)
824 Int_t ipF = iparticle->GetFirstDaughter();
825 Int_t ipL = iparticle->GetLastDaughter();
826 if (ipF > 0) for (j = ipF-1; j < ipL; j++) pSelected[j] = -1;
828 // printf("\n particle (decay) %d %d %d", i, pSelected[i], kf);
829 pSelected[i] = (pSelected[i] == -1) ? 0 : 1;
832 if (pSelected[i] == -1) pSelected[i] = 0;
833 if (!pSelected[i]) continue;
834 // Count quarks only if you did not include fragmentation
835 if (fFragmentation && kf <= 10) continue;
838 // Decision on tracking
841 // Track final state particle
842 if (ks == 1) trackIt[i] = 1;
843 // Track semi-stable particles
844 if ((ks == 1) || (fDecayer->GetLifetime(kf) > fMaxLifeTime)) trackIt[i] = 1;
845 // Track particles selected by process if undecayed.
846 if (fForceDecay == kNoDecay) {
847 if (ParentSelected(kf)) trackIt[i] = 1;
849 if (ParentSelected(kf)) trackIt[i] = 0;
851 if (trackIt[i] == 1) ++nTkbles; // Update trackable counter
855 } // particle selection loop
857 for (i = 0; i<np; i++) {
858 if (!pSelected[i]) continue;
859 TParticle * iparticle = (TParticle *) fParticles.At(i);
860 kf = CheckPDGCode(iparticle->GetPdgCode());
861 Int_t ks = iparticle->GetStatusCode();
862 p[0] = iparticle->Px();
863 p[1] = iparticle->Py();
864 p[2] = iparticle->Pz();
865 p[3] = iparticle->Energy();
867 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
868 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
869 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
871 Float_t tof = fTime + kconv*iparticle->T();
872 Int_t ipa = iparticle->GetFirstMother()-1;
873 Int_t iparent = (ipa > -1) ? pParent[ipa] : -1;
875 PushTrack(fTrackIt*trackIt[i], iparent, kf,
876 p[0], p[1], p[2], p[3],
877 origin[0], origin[1], origin[2], tof,
878 polar[0], polar[1], polar[2],
879 kPPrimary, nt, 1., ks);
896 switch (fCountMode) {
898 // printf(" Count all \n");
902 // printf(" Count parents \n");
905 case kCountTrackables:
906 // printf(" Count trackable \n");
910 if (jev >= fNpart || fNpart == -1) {
911 fKineBias=Float_t(fNpart)/Float_t(fTrials);
913 fQ += fPythia->GetVINT(51);
914 fX1 += fPythia->GetVINT(41);
915 fX2 += fPythia->GetVINT(42);
916 fTrialsRun += fTrials;
923 SetHighWaterMark(nt);
924 // adjust weight due to kinematic selection
927 fXsection=fPythia->GetPARI(1);
930 Int_t AliGenPythia::GenerateMB()
933 // Min Bias selection and other global selections
935 Int_t i, kf, nt, iparent;
938 Double_t polar[3] = {0,0,0};
939 Double_t origin[3] = {0,0,0};
940 // converts from mm/c to s
941 const Float_t kconv=0.001/2.999792458e8;
944 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
948 Int_t* pParent = new Int_t[np];
949 for (i=0; i< np; i++) pParent[i] = -1;
950 if ((fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi)
952 TParticle* jet1 = (TParticle *) fParticles.At(6);
953 TParticle* jet2 = (TParticle *) fParticles.At(7);
955 if (!jet1 || ! jet2 || !CheckTrigger(jet1, jet2)) {
962 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
963 // implemented primaryly for kPyJets, but extended to any kind of process.
964 if ((fFragPhotonInCalo || fPi0InCalo || fEtaInCalo || fEleInCalo || fHadronInCalo || fDecayPhotonInCalo) &&
965 (fCheckPHOS || fCheckEMCAL || fCheckBarrel) ) {
966 Bool_t ok = TriggerOnSelectedParticles(np);
974 // Check for diffraction
976 if(fItune==320 && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
977 if(!CheckDiffraction()) {
984 // Check for minimum multiplicity
985 if (fTriggerMultiplicity > 0) {
986 Int_t multiplicity = 0;
987 for (i = 0; i < np; i++) {
988 TParticle * iparticle = (TParticle *) fParticles.At(i);
990 Int_t statusCode = iparticle->GetStatusCode();
992 // Initial state particle
996 if (fTriggerMultiplicityEta > 0 && TMath::Abs(iparticle->Eta()) > fTriggerMultiplicityEta)
999 if (iparticle->Pt() < fTriggerMultiplicityPtMin)
1002 TParticlePDG* pdgPart = iparticle->GetPDG();
1003 if (pdgPart && pdgPart->Charge() == 0)
1009 if (multiplicity < fTriggerMultiplicity) {
1013 Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
1017 if (fTriggerParticle) {
1018 Bool_t triggered = kFALSE;
1019 for (i = 0; i < np; i++) {
1020 TParticle * iparticle = (TParticle *) fParticles.At(i);
1021 kf = CheckPDGCode(iparticle->GetPdgCode());
1022 if (kf != fTriggerParticle) continue;
1023 if (iparticle->Pt() == 0.) continue;
1024 if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
1025 if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
1036 // Check if there is a ccbar or bbbar pair with at least one of the two
1037 // in fYMin < y < fYMax
1039 if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi || fProcess == kPyBeautyJets) {
1040 TParticle *partCheck;
1042 Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE;
1043 Bool_t theChild=kFALSE;
1044 Bool_t triggered=kFALSE;
1046 Int_t pdg,mpdg,mpdgUpperFamily;
1047 for(i=0; i<np; i++) {
1048 partCheck = (TParticle*)fParticles.At(i);
1049 pdg = partCheck->GetPdgCode();
1050 if(TMath::Abs(pdg) == fFlavorSelect) { // quark
1051 if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; }
1052 y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/
1053 (partCheck->Energy()-partCheck->Pz()+1.e-13));
1054 if(y>fYMin && y<fYMax) inYcut=kTRUE;
1056 if(fTriggerParticle) {
1057 if(TMath::Abs(pdg)==fTriggerParticle) triggered=kTRUE;
1059 if(fCutOnChild && TMath::Abs(pdg) == fPdgCodeParticleforAcceptanceCut) {
1060 Int_t mi = partCheck->GetFirstMother() - 1;
1062 mother = (TParticle*)fParticles.At(mi);
1063 mpdg=TMath::Abs(mother->GetPdgCode());
1064 mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b
1065 if ( ParentSelected(mpdg) ||
1066 (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) {
1067 if (KinematicSelection(partCheck,1)) {
1073 if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied
1077 if (fCutOnChild && !theChild) { // one of the child conditions not satisfied
1081 if(fTriggerParticle && !triggered) { // particle requested is not produced
1088 //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff
1089 if ( (fProcess == kPyW ||
1091 fProcess == kPyMbDefault ||
1092 fProcess == kPyMb ||
1093 fProcess == kPyMbAtlasTuneMC09 ||
1094 fProcess == kPyMbWithDirectPhoton ||
1095 fProcess == kPyMbNonDiffr)
1096 && (fCutOnChild == 1) ) {
1097 if ( !CheckKinematicsOnChild() ) {
1104 for (i = 0; i < np; i++) {
1106 TParticle * iparticle = (TParticle *) fParticles.At(i);
1107 kf = CheckPDGCode(iparticle->GetPdgCode());
1108 Int_t ks = iparticle->GetStatusCode();
1109 Int_t km = iparticle->GetFirstMother();
1111 (((ks == 1 && kf!=0 && KinematicSelection(iparticle, 0)) || (ks !=1)) && ((fStackFillOpt != kHeavyFlavor) || IsFromHeavyFlavor(i))) ||
1112 ((fProcess == kPyJets || fProcess == kPyBeautyJets) && ks == 21 && km == 0 && i>1)
1116 if (ks == 1) trackIt = 1;
1117 Int_t ipa = iparticle->GetFirstMother()-1;
1119 iparent = (ipa > -1) ? pParent[ipa] : -1;
1122 // store track information
1123 p[0] = iparticle->Px();
1124 p[1] = iparticle->Py();
1125 p[2] = iparticle->Pz();
1126 p[3] = iparticle->Energy();
1129 origin[0] = fVertex[0]+iparticle->Vx()/10; // [cm]
1130 origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm]
1131 origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm]
1133 Float_t tof = fTime + fEventTime + kconv * iparticle->T();
1135 PushTrack(fTrackIt*trackIt, iparent, kf,
1136 p[0], p[1], p[2], p[3],
1137 origin[0], origin[1], origin[2], tof,
1138 polar[0], polar[1], polar[2],
1139 kPPrimary, nt, 1., ks);
1143 SetHighWaterMark(nt);
1145 } // select particle
1154 void AliGenPythia::FinishRun()
1156 // Print x-section summary
1165 printf("\nTotal number of Pyevnt() calls %d\n", fTrialsRun);
1166 printf("\nMean Q, x1, x2: %f %f %f\n", fQ, fX1, fX2);
1169 void AliGenPythia::AdjustWeights() const
1171 // Adjust the weights after generation of all events
1175 Int_t ntrack=gAlice->GetMCApp()->GetNtrack();
1176 for (Int_t i=0; i<ntrack; i++) {
1177 part= gAlice->GetMCApp()->Particle(i);
1178 part->SetWeight(part->GetWeight()*fKineBias);
1183 void AliGenPythia::SetNuclei(Int_t a1, Int_t a2, Int_t pdfset)
1185 // Treat protons as inside nuclei with mass numbers a1 and a2
1189 fNucPdf = pdfset; // 0 EKS98 9 EPS09LO 19 EPS09NLO
1194 void AliGenPythia::MakeHeader()
1197 // Make header for the simulated event
1200 if (gAlice->GetEvNumber()>=fDebugEventFirst &&
1201 gAlice->GetEvNumber()<=fDebugEventLast) fPythia->Pylist(2);
1204 // Builds the event header, to be called after each event
1205 if (fHeader) delete fHeader;
1206 fHeader = new AliGenPythiaEventHeader("Pythia");
1210 // if(fProcDiff == 92 || fProcDiff == 93) printf("\n\n\n\n\n");
1211 // printf("fPythia->GetMSTI(1) = %d fProcDiff = %d\n",fPythia->GetMSTI(1), fProcDiff);
1212 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fProcDiff);
1215 ((AliGenPythiaEventHeader*) fHeader)->SetProcessType(fPythia->GetMSTI(1));
1218 ((AliGenPythiaEventHeader*) fHeader)->SetTrials(fTrials);
1221 fHeader->SetPrimaryVertex(fVertex);
1222 fHeader->SetInteractionTime(fTime+fEventTime);
1224 // Number of primaries
1225 fHeader->SetNProduced(fNprimaries);
1227 // Jets that have triggered
1229 //Need to store jets for b-jet studies too!
1230 if (fProcess == kPyJets || fProcess == kPyDirectGamma || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi)
1233 Float_t jets[4][10];
1234 GetJets(njet, ntrig, jets);
1237 for (Int_t i = 0; i < ntrig; i++) {
1238 ((AliGenPythiaEventHeader*) fHeader)->AddJet(jets[0][i], jets[1][i], jets[2][i],
1243 // Copy relevant information from external header, if present.
1248 AliGenPythiaEventHeader* exHeader = (AliGenPythiaEventHeader*) (fRL->GetHeader()->GenEventHeader());
1249 for (Int_t i = 0; i < exHeader->NTriggerJets(); i++)
1251 printf("Adding Jet %d %d \n", i, exHeader->NTriggerJets());
1254 exHeader->TriggerJet(i, uqJet);
1255 ((AliGenPythiaEventHeader*) fHeader)->AddUQJet(uqJet[0], uqJet[1], uqJet[2], uqJet[3]);
1259 // Store quenching parameters
1262 Double_t z[4] = {0.};
1268 fPythia->GetQuenchingParameters(xp, yp, z);
1269 } else if (fQuench == 2){
1271 Double_t r1 = PARIMP.rb1;
1272 Double_t r2 = PARIMP.rb2;
1273 Double_t b = PARIMP.b1;
1274 Double_t r = 0.5 * TMath::Sqrt(2. * (r1 * r1 + r2 * r2) - b * b);
1275 Double_t phi = PARIMP.psib1;
1276 xp = r * TMath::Cos(phi);
1277 yp = r * TMath::Sin(phi);
1279 } else if (fQuench == 4) {
1283 AliFastGlauber::Instance()->GetSavedXY(xy);
1284 AliFastGlauber::Instance()->GetSavedI0I1(i0i1);
1287 ((AliGenPythiaEventHeader*) fHeader)->SetImpactParameter(fImpact);
1290 ((AliGenPythiaEventHeader*) fHeader)->SetXYJet(xp, yp);
1291 ((AliGenPythiaEventHeader*) fHeader)->SetZQuench(z);
1295 ((AliGenPythiaEventHeader*) fHeader)->SetPtHard(fPythia->GetVINT(47));
1303 Bool_t AliGenPythia::CheckTrigger(const TParticle* jet1, const TParticle* jet2)
1305 // Check the kinematic trigger condition
1308 eta[0] = jet1->Eta();
1309 eta[1] = jet2->Eta();
1311 phi[0] = jet1->Phi();
1312 phi[1] = jet2->Phi();
1314 pdg[0] = jet1->GetPdgCode();
1315 pdg[1] = jet2->GetPdgCode();
1316 Bool_t triggered = kFALSE;
1318 if (fProcess == kPyJets || fProcess == kPyBeautyJets || fProcess == kPyBeautyppMNRwmi) {
1321 Float_t jets[4][10];
1323 // Use Pythia clustering on parton level to determine jet axis
1325 GetJets(njets, ntrig, jets);
1327 if (ntrig || fEtMinJet == 0.) triggered = kTRUE;
1332 if (pdg[0] == kGamma) {
1336 //Check eta range first...
1337 if ((eta[ij] < fEtaMaxJet && eta[ij] > fEtaMinJet) &&
1338 (eta[ig] < fEtaMaxGamma && eta[ig] > fEtaMinGamma))
1340 //Eta is okay, now check phi range
1341 if ((phi[ij] < fPhiMaxJet && phi[ij] > fPhiMinJet) &&
1342 (phi[ig] < fPhiMaxGamma && phi[ig] > fPhiMinGamma))
1353 Bool_t AliGenPythia::CheckKinematicsOnChild(){
1355 //Checking Kinematics on Child (status code 1, particle code ?, kin cuts
1357 Bool_t checking = kFALSE;
1358 Int_t j, kcode, ks, km;
1359 Int_t nPartAcc = 0; //number of particles in the acceptance range
1360 Int_t numberOfAcceptedParticles = 1;
1361 if (fNumberOfAcceptedParticles != 0) { numberOfAcceptedParticles = fNumberOfAcceptedParticles; }
1362 Int_t npart = fParticles.GetEntriesFast();
1364 for (j = 0; j<npart; j++) {
1365 TParticle * jparticle = (TParticle *) fParticles.At(j);
1366 kcode = TMath::Abs( CheckPDGCode(jparticle->GetPdgCode()) );
1367 ks = jparticle->GetStatusCode();
1368 km = jparticle->GetFirstMother();
1370 if( (ks == 1) && (kcode == fPdgCodeParticleforAcceptanceCut) && (KinematicSelection(jparticle,1)) ){
1373 if( numberOfAcceptedParticles <= nPartAcc){
1382 void AliGenPythia::LoadEvent(AliStack* stack, Int_t flag, Int_t reHadr)
1385 // Load event into Pythia Common Block
1388 Int_t npart = stack -> GetNprimary();
1392 (fPythia->GetPyjets())->N = npart;
1394 n0 = (fPythia->GetPyjets())->N;
1395 (fPythia->GetPyjets())->N = n0 + npart;
1399 for (Int_t part = 0; part < npart; part++) {
1400 TParticle *mPart = stack->Particle(part);
1402 Int_t kf = mPart->GetPdgCode();
1403 Int_t ks = mPart->GetStatusCode();
1404 Int_t idf = mPart->GetFirstDaughter();
1405 Int_t idl = mPart->GetLastDaughter();
1408 if (ks == 11 || ks == 12) {
1415 Float_t px = mPart->Px();
1416 Float_t py = mPart->Py();
1417 Float_t pz = mPart->Pz();
1418 Float_t e = mPart->Energy();
1419 Float_t m = mPart->GetCalcMass();
1422 (fPythia->GetPyjets())->P[0][part+n0] = px;
1423 (fPythia->GetPyjets())->P[1][part+n0] = py;
1424 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1425 (fPythia->GetPyjets())->P[3][part+n0] = e;
1426 (fPythia->GetPyjets())->P[4][part+n0] = m;
1428 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1429 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1430 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1431 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1432 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1436 void AliGenPythia::LoadEvent(const TObjArray* stack, Int_t flag, Int_t reHadr)
1439 // Load event into Pythia Common Block
1442 Int_t npart = stack -> GetEntries();
1446 (fPythia->GetPyjets())->N = npart;
1448 n0 = (fPythia->GetPyjets())->N;
1449 (fPythia->GetPyjets())->N = n0 + npart;
1453 for (Int_t part = 0; part < npart; part++) {
1454 TParticle *mPart = dynamic_cast<TParticle *>(stack->At(part));
1455 if (!mPart) continue;
1457 Int_t kf = mPart->GetPdgCode();
1458 Int_t ks = mPart->GetStatusCode();
1459 Int_t idf = mPart->GetFirstDaughter();
1460 Int_t idl = mPart->GetLastDaughter();
1463 if (ks == 11 || ks == 12) {
1470 Float_t px = mPart->Px();
1471 Float_t py = mPart->Py();
1472 Float_t pz = mPart->Pz();
1473 Float_t e = mPart->Energy();
1474 Float_t m = mPart->GetCalcMass();
1477 (fPythia->GetPyjets())->P[0][part+n0] = px;
1478 (fPythia->GetPyjets())->P[1][part+n0] = py;
1479 (fPythia->GetPyjets())->P[2][part+n0] = pz;
1480 (fPythia->GetPyjets())->P[3][part+n0] = e;
1481 (fPythia->GetPyjets())->P[4][part+n0] = m;
1483 (fPythia->GetPyjets())->K[1][part+n0] = kf;
1484 (fPythia->GetPyjets())->K[0][part+n0] = ks;
1485 (fPythia->GetPyjets())->K[3][part+n0] = idf + 1;
1486 (fPythia->GetPyjets())->K[4][part+n0] = idl + 1;
1487 (fPythia->GetPyjets())->K[2][part+n0] = mPart->GetFirstMother() + 1;
1492 void AliGenPythia::RecJetsUA1(Int_t& njets, Float_t jets [4][50])
1495 // Calls the Pythia jet finding algorithm to find jets in the current event
1500 Int_t n = fPythia->GetN();
1504 fPythia->Pycell(njets);
1506 for (i = 0; i < njets; i++) {
1507 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1508 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1509 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1510 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1521 void AliGenPythia::GetJets(Int_t& nJets, Int_t& nJetsTrig, Float_t jets[4][10])
1524 // Calls the Pythia clustering algorithm to find jets in the current event
1526 Int_t n = fPythia->GetN();
1529 if (fJetReconstruction == kCluster) {
1531 // Configure cluster algorithm
1533 fPythia->SetPARU(43, 2.);
1534 fPythia->SetMSTU(41, 1);
1536 // Call cluster algorithm
1538 fPythia->Pyclus(nJets);
1540 // Loading jets from common block
1546 fPythia->Pycell(nJets);
1550 for (i = 0; i < nJets; i++) {
1551 Float_t px = (fPythia->GetPyjets())->P[0][n+i];
1552 Float_t py = (fPythia->GetPyjets())->P[1][n+i];
1553 Float_t pz = (fPythia->GetPyjets())->P[2][n+i];
1554 Float_t e = (fPythia->GetPyjets())->P[3][n+i];
1555 Float_t pt = TMath::Sqrt(px * px + py * py);
1556 Float_t phi = TMath::Pi() + TMath::ATan2(-py, -px);
1557 Float_t theta = TMath::ATan2(pt,pz);
1558 Float_t et = e * TMath::Sin(theta);
1559 Float_t eta = -TMath::Log(TMath::Tan(theta / 2.));
1561 eta > fEtaMinJet && eta < fEtaMaxJet &&
1562 phi > fPhiMinJet && phi < fPhiMaxJet &&
1563 et > fEtMinJet && et < fEtMaxJet
1566 jets[0][nJetsTrig] = px;
1567 jets[1][nJetsTrig] = py;
1568 jets[2][nJetsTrig] = pz;
1569 jets[3][nJetsTrig] = e;
1571 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1573 // printf("\n........-Jet #%d: %10.3f %10.3f %10.3f %10.3f \n", i, pt, et, eta, phi * kRaddeg);
1578 void AliGenPythia::GetSubEventTime()
1580 // Calculates time of the next subevent
1583 TArrayF &array = *fEventsTime;
1584 fEventTime = array[fCurSubEvent++];
1586 // printf(" Event time: %d %f %p",fCurSubEvent,fEventTime,fEventsTime);
1590 Bool_t AliGenPythia::IsInBarrel(Float_t eta) const
1592 // Is particle in Central Barrel acceptance?
1594 if( eta < fTriggerEta )
1600 Bool_t AliGenPythia::IsInEMCAL(Float_t phi, Float_t eta) const
1602 // Is particle in EMCAL acceptance?
1603 // phi in degrees, etamin=-etamax
1604 if(phi > fEMCALMinPhi && phi < fEMCALMaxPhi &&
1611 Bool_t AliGenPythia::IsInPHOS(Float_t phi, Float_t eta, Int_t iparticle)
1613 // Is particle in PHOS acceptance?
1614 // Acceptance slightly larger considered.
1615 // phi in degrees, etamin=-etamax
1616 // iparticle is the index of the particle to be checked, for PHOS rotation case
1618 if(phi > fPHOSMinPhi && phi < fPHOSMaxPhi &&
1623 if( fCheckPHOSeta && eta < fPHOSEta) fPHOSRotateCandidate = iparticle;
1629 void AliGenPythia::RotatePhi(Bool_t& okdd)
1631 //Rotate event in phi to enhance events in PHOS acceptance
1633 if(fPHOSRotateCandidate < 0) return ;
1635 //calculate the new position random between fPHOSMinPhi and fPHOSMaxPhi
1636 Double_t phiPHOSmin = TMath::Pi()*fPHOSMinPhi/180;
1637 Double_t phiPHOSmax = TMath::Pi()*fPHOSMaxPhi/180;
1638 Double_t phiPHOS = (AliPythiaRndm::GetPythiaRandom())->Uniform(phiPHOSmin,phiPHOSmax);
1640 //calculate deltaphi
1641 TParticle* ph = (TParticle *) fParticles.At(fPHOSRotateCandidate);
1642 Double_t phphi = ph->Phi();
1643 Double_t deltaphi = phiPHOS - phphi;
1647 //loop for all particles and produce the phi rotation
1648 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1649 Double_t oldphi, newphi;
1650 Double_t newVx, newVy, r, vZ, time;
1651 Double_t newPx, newPy, pt, pz, e;
1652 for(Int_t i=0; i< np; i++) {
1653 TParticle* iparticle = (TParticle *) fParticles.At(i);
1654 oldphi = iparticle->Phi();
1655 newphi = oldphi + deltaphi;
1656 if(newphi < 0) newphi = 2*TMath::Pi() + newphi; // correct angle
1657 if(newphi > 2*TMath::Pi()) newphi = newphi - 2*TMath::Pi(); // correct angle
1660 newVx = r * TMath::Cos(newphi);
1661 newVy = r * TMath::Sin(newphi);
1662 vZ = iparticle->Vz(); // don't transform
1663 time = iparticle->T(); // don't transform
1665 pt = iparticle->Pt();
1666 newPx = pt * TMath::Cos(newphi);
1667 newPy = pt * TMath::Sin(newphi);
1668 pz = iparticle->Pz(); // don't transform
1669 e = iparticle->Energy(); // don't transform
1672 iparticle->SetProductionVertex(newVx, newVy, vZ, time);
1673 iparticle->SetMomentum(newPx, newPy, pz, e);
1675 } //end particle loop
1677 // now let's check that we put correctly the candidate photon in PHOS
1678 Float_t phi = ph->Phi()*180./TMath::Pi(); //Convert to degrees
1679 Float_t eta =TMath::Abs(ph->Eta());//in calos etamin=-etamax
1680 if(IsInPHOS(phi,eta,-1))
1683 // reset the value for next event
1684 fPHOSRotateCandidate = -1;
1689 Bool_t AliGenPythia::CheckDiffraction()
1691 // use this method only with Perugia-0 tune!
1695 Int_t np = (fHadronisation) ? fParticles.GetEntriesFast() : fNpartons;
1701 Double_t y2 = -1e10;
1703 const Int_t kNstable=20;
1704 const Int_t pdgStable[20] = {
1707 12, // Electron Neutrino
1709 14, // Muon Neutrino
1720 3112, // Sigma Minus
1727 for (Int_t i = 0; i < np; i++) {
1728 TParticle * part = (TParticle *) fParticles.At(i);
1730 Int_t statusCode = part->GetStatusCode();
1732 // Initial state particle
1733 if (statusCode != 1)
1736 Int_t pdg = TMath::Abs(part->GetPdgCode());
1737 Bool_t isStable = kFALSE;
1738 for (Int_t i1 = 0; i1 < kNstable; i1++) {
1739 if (pdg == pdgStable[i1]) {
1747 Double_t y = part->Y();
1761 if(iPart1<0 || iPart2<0) return kFALSE;
1766 TParticle * part1 = (TParticle *) fParticles.At(iPart1);
1767 TParticle * part2 = (TParticle *) fParticles.At(iPart2);
1769 Int_t pdg1 = part1->GetPdgCode();
1770 Int_t pdg2 = part2->GetPdgCode();
1774 if (pdg1 == 2212 && pdg2 == 2212)
1782 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)>0.5) iPart = iPart2;
1785 else if (pdg1 == 2212)
1787 else if (pdg2 == 2212)
1796 TParticle * part = (TParticle *) fParticles.At(iPart);
1797 Double_t E= part->Energy();
1798 Double_t P= part->P();
1799 M= TMath::Sqrt((fEnergyCMS-E-P)*(fEnergyCMS-E+P));
1802 Double_t Mmin, Mmax, wSD, wDD, wND;
1803 if(!GetWeightsDiffraction(M, Mmin, Mmax, wSD, wDD, wND)) return kFALSE;
1805 if(M>-1 && M<Mmin) return kFALSE;
1808 Int_t procType=fPythia->GetMSTI(1);
1810 if(procType== 94) proc0=1;
1811 if(procType== 92 || procType== 93) proc0=0;
1815 else if(proc0==1) proc=1;
1817 if(proc==1 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wDD) return kFALSE;
1818 if(proc==2 && (AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.) > wND) return kFALSE;
1821 // if(proc==1 || proc==2) return kFALSE;
1824 if(proc0!=0) fProcDiff = procType;
1825 else fProcDiff = 95;
1829 if(wSD<0) AliError("wSD<0 ! \n");
1831 if((AliPythiaRndm::GetPythiaRandom())->Uniform(0.,1.)> wSD) return kFALSE;
1833 // printf("iPart = %d\n", iPart);
1835 if(iPart==iPart1) fProcDiff=93;
1836 else if(iPart==iPart2) fProcDiff=92;
1838 printf("EROOR: iPart!=iPart1 && iPart!=iPart2\n");
1847 Bool_t AliGenPythia::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax,
1848 Double_t &wSD, Double_t &wDD, Double_t &wND)
1852 if(TMath::Abs(fEnergyCMS-900)<1 ){
1854 const Int_t nbin=400;
1856 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
1857 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
1858 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
1859 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
1860 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
1861 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
1862 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
1863 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
1864 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
1865 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
1866 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
1867 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
1868 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
1869 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
1870 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
1871 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
1872 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
1873 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
1874 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
1875 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
1876 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
1877 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
1878 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
1879 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
1880 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
1881 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
1882 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
1883 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
1884 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
1885 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
1886 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
1887 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
1888 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
1889 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
1890 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
1891 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
1892 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
1893 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
1894 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
1895 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
1896 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
1897 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
1898 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
1899 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
1900 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
1901 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
1902 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
1903 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
1904 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
1905 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
1906 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
1907 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
1908 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
1909 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
1910 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
1911 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
1912 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
1913 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
1914 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
1915 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
1916 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
1917 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
1918 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
1919 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
1920 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
1921 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
1922 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
1924 1.000000, 0.643457, 0.645609, 0.648347, 0.604563, 0.605002,
1925 0.602819, 0.611473, 0.576412, 0.562354, 0.550216, 0.529285,
1926 0.534558, 0.534364, 0.530358, 0.518475, 0.489253, 0.469754,
1927 0.469825, 0.450513, 0.455849, 0.435312, 0.437210, 0.456686,
1928 0.413577, 0.427093, 0.426894, 0.418834, 0.409475, 0.388483,
1929 0.412208, 0.388912, 0.389611, 0.382572, 0.389220, 0.370964,
1930 0.380463, 0.370873, 0.363701, 0.369363, 0.357361, 0.365759,
1931 0.348566, 0.337062, 0.348190, 0.332330, 0.359001, 0.335836,
1932 0.339154, 0.335599, 0.336035, 0.335204, 0.353440, 0.337836,
1933 0.333874, 0.307120, 0.294963, 0.324978, 0.313359, 0.317688,
1934 0.323758, 0.319304, 0.335317, 0.301765, 0.317257, 0.356331,
1935 0.323119, 0.297732, 0.303188, 0.326102, 0.316467, 0.294728,
1936 0.308135, 0.288857, 0.325692, 0.312493, 0.291100, 0.325921,
1937 0.313317, 0.295980, 0.308481, 0.328380, 0.313081, 0.296763,
1938 0.295431, 0.317325, 0.320462, 0.286918, 0.316035, 0.335208,
1939 0.283193, 0.333945, 0.292534, 0.294164, 0.330680, 0.296992,
1940 0.285509, 0.317260, 0.298269, 0.311299, 0.312129, 0.286822,
1941 0.287442, 0.319139, 0.283314, 0.318454, 0.297727, 0.301597,
1942 0.282483, 0.294792, 0.305569, 0.290957, 0.297817, 0.282908,
1943 0.272401, 0.305584, 0.300220, 0.297020, 0.298781, 0.278008,
1944 0.277727, 0.323777, 0.287419, 0.342074, 0.287259, 0.303658,
1945 0.302668, 0.279622, 0.280586, 0.313630, 0.276068, 0.257051,
1946 0.309996, 0.265534, 0.297138, 0.281738, 0.294610, 0.292882,
1947 0.286860, 0.312686, 0.293244, 0.293744, 0.271375, 0.278734,
1948 0.280308, 0.304739, 0.287907, 0.285261, 0.311180, 0.313476,
1949 0.289660, 0.289282, 0.319505, 0.271285, 0.272008, 0.289245,
1950 0.281038, 0.285284, 0.295836, 0.281416, 0.283501, 0.295417,
1951 0.304372, 0.297764, 0.291378, 0.321530, 0.315604, 0.329507,
1952 0.282609, 0.275576, 0.283721, 0.311714, 0.283760, 0.273188,
1953 0.312193, 0.264347, 0.281532, 0.301226, 0.281718, 0.336408,
1954 0.283157, 0.332010, 0.289974, 0.290256, 0.301569, 0.332228,
1955 0.288282, 0.326339, 0.313653, 0.300361, 0.289470, 0.264830,
1956 0.298659, 0.272359, 0.278878, 0.306001, 0.328168, 0.294991,
1957 0.327737, 0.278056, 0.302435, 0.284183, 0.279270, 0.307279,
1958 0.307917, 0.315196, 0.283803, 0.313333, 0.315730, 0.304818,
1959 0.307171, 0.295223, 0.333741, 0.346911, 0.310143, 0.336686,
1960 0.275459, 0.334781, 0.295405, 0.275816, 0.301678, 0.327242,
1961 0.320717, 0.309230, 0.292145, 0.294489, 0.305088, 0.300969,
1962 0.277438, 0.326159, 0.297065, 0.301177, 0.303843, 0.275382,
1963 0.304019, 0.284166, 0.289610, 0.331611, 0.317131, 0.310880,
1964 0.360456, 0.294052, 0.342694, 0.327166, 0.336797, 0.298040,
1965 0.295767, 0.260053, 0.325544, 0.335310, 0.320182, 0.301072,
1966 0.313117, 0.283407, 0.299206, 0.293525, 0.305067, 0.255978,
1967 0.327055, 0.316382, 0.317700, 0.278993, 0.283120, 0.314000,
1968 0.274396, 0.291208, 0.348813, 0.319603, 0.313076, 0.289155,
1969 0.343988, 0.311426, 0.322896, 0.328726, 0.337062, 0.389093,
1970 0.284122, 0.312184, 0.304008, 0.319170, 0.320778, 0.288390,
1971 0.337272, 0.356273, 0.343310, 0.312209, 0.330709, 0.297977,
1972 0.346146, 0.369162, 0.324385, 0.339831, 0.337037, 0.318739,
1973 0.343157, 0.277720, 0.368407, 0.321330, 0.338997, 0.314220,
1974 0.328861, 0.321824, 0.328013, 0.356925, 0.359144, 0.296314,
1975 0.345415, 0.396711, 0.347032, 0.294928, 0.343799, 0.322331,
1976 0.328656, 0.326098, 0.337338, 0.337038, 0.300179, 0.351391,
1977 0.324337, 0.330896, 0.302842, 0.310522, 0.337052, 0.359989,
1978 0.383250, 0.359355, 0.315382, 0.333113, 0.342598, 0.355348,
1979 0.320751, 0.320475, 0.351762, 0.351475, 0.338358, 0.326153,
1980 0.302507, 0.340048, 0.318685, 0.381646, 0.339320, 0.299453,
1981 0.426599, 0.393515, 0.353929, 0.328435, 0.413976, 0.292558,
1982 0.379340, 0.358344, 0.409259, 0.313821, 0.336675, 0.324521,
1983 0.408382, 0.346273, 0.312939, 0.362453, 0.343152, 0.330577,
1984 0.332831, 0.353299, 0.347745, 0.334818, 0.332234, 0.385585,
1985 0.395483, 0.395316, 0.326972, 0.349434, 0.317604, 0.328980,
1986 0.375056, 0.317290, 0.357083, 0.346165, 0.310444, 0.356873,
1987 0.359523, 0.365308, 0.365122, 0.383685, 0.370975, 0.396928,
1988 0.407654, 0.307755, 0.323033, 0.350580, 0.345231, 0.342462,
1989 0.400000, 0.318309, 0.403570, 0.322856, 0.383053, 0.422252,
1990 0.386112, 0.364314, 0.434375, 0.334629};
1997 if(M<Mmin || M>Mmax) return kTRUE;
2000 for(Int_t i=1; i<=nbin; i++)
2003 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2009 else if(TMath::Abs(fEnergyCMS-2760)<1 ){
2011 const Int_t nbin=400;
2013 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2014 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2015 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2016 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2017 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2018 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2019 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2020 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2021 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2022 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2023 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2024 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2025 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2026 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2027 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2028 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2029 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2030 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2031 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2032 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2033 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2034 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2035 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2036 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2037 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2038 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2039 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2040 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2041 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2042 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2043 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2044 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2045 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2046 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2047 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2048 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2049 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2050 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2051 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2052 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2053 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2054 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2055 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2056 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2057 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2058 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2059 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2060 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2061 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2062 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2063 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2064 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2065 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2066 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2067 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2068 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2069 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2070 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2071 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2072 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2073 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2074 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2075 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2076 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2077 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2078 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2079 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2081 1.000000, 0.692593, 0.673384, 0.666273, 0.657285, 0.637723,
2082 0.625881, 0.643590, 0.606100, 0.589007, 0.567824, 0.578705,
2083 0.538530, 0.517937, 0.528278, 0.515918, 0.539461, 0.466186,
2084 0.489869, 0.468402, 0.465017, 0.453336, 0.460769, 0.474638,
2085 0.456347, 0.434471, 0.427478, 0.435435, 0.410934, 0.366431,
2086 0.382240, 0.379513, 0.394249, 0.386837, 0.353103, 0.382138,
2087 0.377497, 0.389479, 0.378736, 0.347933, 0.354605, 0.352077,
2088 0.324443, 0.358792, 0.339968, 0.359052, 0.330734, 0.318291,
2089 0.333703, 0.358644, 0.335819, 0.332213, 0.309051, 0.309975,
2090 0.331626, 0.304407, 0.309819, 0.312097, 0.312462, 0.320411,
2091 0.280401, 0.302311, 0.315863, 0.281479, 0.310003, 0.296911,
2092 0.313676, 0.281071, 0.294163, 0.306500, 0.283462, 0.274867,
2093 0.307149, 0.270555, 0.282264, 0.287373, 0.307849, 0.278675,
2094 0.286990, 0.278269, 0.300105, 0.286799, 0.265674, 0.275140,
2095 0.285702, 0.257352, 0.267714, 0.248204, 0.252220, 0.255678,
2096 0.282946, 0.268257, 0.282375, 0.262675, 0.275564, 0.248345,
2097 0.236259, 0.291914, 0.259936, 0.241338, 0.267389, 0.285044,
2098 0.289419, 0.253594, 0.284568, 0.231840, 0.260008, 0.268527,
2099 0.275363, 0.224115, 0.281260, 0.257913, 0.295152, 0.264399,
2100 0.232287, 0.282533, 0.223431, 0.255756, 0.244471, 0.221695,
2101 0.272450, 0.284244, 0.253682, 0.270717, 0.275403, 0.240323,
2102 0.245081, 0.241859, 0.216340, 0.244789, 0.220291, 0.238478,
2103 0.224691, 0.244058, 0.266117, 0.271478, 0.242012, 0.267321,
2104 0.248494, 0.253343, 0.255606, 0.235458, 0.241079, 0.233223,
2105 0.226813, 0.259224, 0.234239, 0.258606, 0.210892, 0.238186,
2106 0.243271, 0.222678, 0.213437, 0.273939, 0.247966, 0.232548,
2107 0.263438, 0.222089, 0.272111, 0.248818, 0.244295, 0.238368,
2108 0.236908, 0.248776, 0.232604, 0.231194, 0.227117, 0.231152,
2109 0.282140, 0.229778, 0.232631, 0.261794, 0.216633, 0.253471,
2110 0.242157, 0.227406, 0.269335, 0.230547, 0.210618, 0.285872,
2111 0.248776, 0.229875, 0.242728, 0.227388, 0.220567, 0.222062,
2112 0.235950, 0.224087, 0.228895, 0.208287, 0.235999, 0.208696,
2113 0.230367, 0.267667, 0.220484, 0.233402, 0.233815, 0.250455,
2114 0.253120, 0.219556, 0.230980, 0.236661, 0.222395, 0.226111,
2115 0.198315, 0.210555, 0.202813, 0.208594, 0.235976, 0.221490,
2116 0.243059, 0.204901, 0.216987, 0.229039, 0.231466, 0.221975,
2117 0.231220, 0.253638, 0.250448, 0.260291, 0.328345, 0.205739,
2118 0.222014, 0.251513, 0.279427, 0.270506, 0.248409, 0.222472,
2119 0.291632, 0.227796, 0.248769, 0.276896, 0.214742, 0.200139,
2120 0.230693, 0.226031, 0.268900, 0.185160, 0.245353, 0.205843,
2121 0.231155, 0.219122, 0.214811, 0.199763, 0.274179, 0.217598,
2122 0.274988, 0.237244, 0.211820, 0.225459, 0.252799, 0.235948,
2123 0.224986, 0.245385, 0.237770, 0.213373, 0.229737, 0.215487,
2124 0.234453, 0.249684, 0.239435, 0.250422, 0.257194, 0.214762,
2125 0.212266, 0.228988, 0.253798, 0.201607, 0.239946, 0.205245,
2126 0.231670, 0.212774, 0.206768, 0.231563, 0.189388, 0.227926,
2127 0.227203, 0.237754, 0.221628, 0.211138, 0.203322, 0.200985,
2128 0.231780, 0.220294, 0.232686, 0.234243, 0.218264, 0.255870,
2129 0.223213, 0.238670, 0.213713, 0.213064, 0.246700, 0.233446,
2130 0.221503, 0.206767, 0.200722, 0.226179, 0.237425, 0.239229,
2131 0.238611, 0.240419, 0.247806, 0.215923, 0.205298, 0.232778,
2132 0.272312, 0.226773, 0.258103, 0.223287, 0.269404, 0.203398,
2133 0.223782, 0.204213, 0.229664, 0.234040, 0.228419, 0.203936,
2134 0.263686, 0.199141, 0.236127, 0.214058, 0.204611, 0.224324,
2135 0.292140, 0.190735, 0.235157, 0.213018, 0.257085, 0.190554,
2136 0.203197, 0.213044, 0.237023, 0.214243, 0.193562, 0.262403,
2137 0.206256, 0.221396, 0.233588, 0.256611, 0.249731, 0.226683,
2138 0.199330, 0.251026, 0.222596, 0.201941, 0.186374, 0.221038,
2139 0.196555, 0.222560, 0.299419, 0.231979, 0.242924, 0.198310,
2140 0.217628, 0.235458, 0.278595, 0.218624, 0.277305, 0.239109,
2141 0.205600, 0.253715, 0.221173, 0.218195, 0.277647, 0.241974,
2142 0.268748, 0.268128, 0.292258, 0.249420, 0.191034, 0.219506,
2143 0.216502, 0.250677, 0.193386, 0.201310, 0.259464, 0.255351,
2144 0.269628, 0.221063, 0.294079, 0.196726, 0.233634, 0.221870,
2145 0.216236, 0.197259, 0.247433, 0.272765, 0.294079, 0.236336,
2146 0.206396, 0.238524, 0.247846, 0.269519, 0.237141, 0.230611,
2147 0.201712, 0.242225, 0.255565, 0.258738};
2154 if(M<Mmin || M>Mmax) return kTRUE;
2157 for(Int_t i=1; i<=nbin; i++)
2160 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2168 else if(TMath::Abs(fEnergyCMS-7000)<1 ){
2169 const Int_t nbin=400;
2171 1.080000, 1.577300, 2.074600, 2.571900, 3.069200, 3.566500,
2172 4.063800, 4.561100, 5.058400, 5.555700, 6.053000, 6.550300,
2173 7.047600, 7.544900, 8.042200, 8.539500, 9.036800, 9.534100,
2174 10.031400, 10.528700, 11.026000, 11.523300, 12.020600, 12.517900,
2175 13.015200, 13.512500, 14.009800, 14.507100, 15.004400, 15.501700,
2176 15.999000, 16.496300, 16.993600, 17.490900, 17.988200, 18.485500,
2177 18.982800, 19.480100, 19.977400, 20.474700, 20.972000, 21.469300,
2178 21.966600, 22.463900, 22.961200, 23.458500, 23.955800, 24.453100,
2179 24.950400, 25.447700, 25.945000, 26.442300, 26.939600, 27.436900,
2180 27.934200, 28.431500, 28.928800, 29.426100, 29.923400, 30.420700,
2181 30.918000, 31.415300, 31.912600, 32.409900, 32.907200, 33.404500,
2182 33.901800, 34.399100, 34.896400, 35.393700, 35.891000, 36.388300,
2183 36.885600, 37.382900, 37.880200, 38.377500, 38.874800, 39.372100,
2184 39.869400, 40.366700, 40.864000, 41.361300, 41.858600, 42.355900,
2185 42.853200, 43.350500, 43.847800, 44.345100, 44.842400, 45.339700,
2186 45.837000, 46.334300, 46.831600, 47.328900, 47.826200, 48.323500,
2187 48.820800, 49.318100, 49.815400, 50.312700, 50.810000, 51.307300,
2188 51.804600, 52.301900, 52.799200, 53.296500, 53.793800, 54.291100,
2189 54.788400, 55.285700, 55.783000, 56.280300, 56.777600, 57.274900,
2190 57.772200, 58.269500, 58.766800, 59.264100, 59.761400, 60.258700,
2191 60.756000, 61.253300, 61.750600, 62.247900, 62.745200, 63.242500,
2192 63.739800, 64.237100, 64.734400, 65.231700, 65.729000, 66.226300,
2193 66.723600, 67.220900, 67.718200, 68.215500, 68.712800, 69.210100,
2194 69.707400, 70.204700, 70.702000, 71.199300, 71.696600, 72.193900,
2195 72.691200, 73.188500, 73.685800, 74.183100, 74.680400, 75.177700,
2196 75.675000, 76.172300, 76.669600, 77.166900, 77.664200, 78.161500,
2197 78.658800, 79.156100, 79.653400, 80.150700, 80.648000, 81.145300,
2198 81.642600, 82.139900, 82.637200, 83.134500, 83.631800, 84.129100,
2199 84.626400, 85.123700, 85.621000, 86.118300, 86.615600, 87.112900,
2200 87.610200, 88.107500, 88.604800, 89.102100, 89.599400, 90.096700,
2201 90.594000, 91.091300, 91.588600, 92.085900, 92.583200, 93.080500,
2202 93.577800, 94.075100, 94.572400, 95.069700, 95.567000, 96.064300,
2203 96.561600, 97.058900, 97.556200, 98.053500, 98.550800, 99.048100,
2204 99.545400, 100.042700, 100.540000, 101.037300, 101.534600, 102.031900,
2205 102.529200, 103.026500, 103.523800, 104.021100, 104.518400, 105.015700,
2206 105.513000, 106.010300, 106.507600, 107.004900, 107.502200, 107.999500,
2207 108.496800, 108.994100, 109.491400, 109.988700, 110.486000, 110.983300,
2208 111.480600, 111.977900, 112.475200, 112.972500, 113.469800, 113.967100,
2209 114.464400, 114.961700, 115.459000, 115.956300, 116.453600, 116.950900,
2210 117.448200, 117.945500, 118.442800, 118.940100, 119.437400, 119.934700,
2211 120.432000, 120.929300, 121.426600, 121.923900, 122.421200, 122.918500,
2212 123.415800, 123.913100, 124.410400, 124.907700, 125.405000, 125.902300,
2213 126.399600, 126.896900, 127.394200, 127.891500, 128.388800, 128.886100,
2214 129.383400, 129.880700, 130.378000, 130.875300, 131.372600, 131.869900,
2215 132.367200, 132.864500, 133.361800, 133.859100, 134.356400, 134.853700,
2216 135.351000, 135.848300, 136.345600, 136.842900, 137.340200, 137.837500,
2217 138.334800, 138.832100, 139.329400, 139.826700, 140.324000, 140.821300,
2218 141.318600, 141.815900, 142.313200, 142.810500, 143.307800, 143.805100,
2219 144.302400, 144.799700, 145.297000, 145.794300, 146.291600, 146.788900,
2220 147.286200, 147.783500, 148.280800, 148.778100, 149.275400, 149.772700,
2221 150.270000, 150.767300, 151.264600, 151.761900, 152.259200, 152.756500,
2222 153.253800, 153.751100, 154.248400, 154.745700, 155.243000, 155.740300,
2223 156.237600, 156.734900, 157.232200, 157.729500, 158.226800, 158.724100,
2224 159.221400, 159.718700, 160.216000, 160.713300, 161.210600, 161.707900,
2225 162.205200, 162.702500, 163.199800, 163.697100, 164.194400, 164.691700,
2226 165.189000, 165.686300, 166.183600, 166.680900, 167.178200, 167.675500,
2227 168.172800, 168.670100, 169.167400, 169.664700, 170.162000, 170.659300,
2228 171.156600, 171.653900, 172.151200, 172.648500, 173.145800, 173.643100,
2229 174.140400, 174.637700, 175.135000, 175.632300, 176.129600, 176.626900,
2230 177.124200, 177.621500, 178.118800, 178.616100, 179.113400, 179.610700,
2231 180.108000, 180.605300, 181.102600, 181.599900, 182.097200, 182.594500,
2232 183.091800, 183.589100, 184.086400, 184.583700, 185.081000, 185.578300,
2233 186.075600, 186.572900, 187.070200, 187.567500, 188.064800, 188.562100,
2234 189.059400, 189.556700, 190.054000, 190.551300, 191.048600, 191.545900,
2235 192.043200, 192.540500, 193.037800, 193.535100, 194.032400, 194.529700,
2236 195.027000, 195.524300, 196.021600, 196.518900, 197.016200, 197.513500,
2237 198.010800, 198.508100, 199.005400, 199.502700, 200.000000};
2239 1.000000, 0.798640, 0.770197, 0.717990, 0.699434, 0.692093,
2240 0.620940, 0.655294, 0.636496, 0.633483, 0.600518, 0.594548,
2241 0.550759, 0.550413, 0.528926, 0.525877, 0.506701, 0.504117,
2242 0.486973, 0.492930, 0.461833, 0.488695, 0.438874, 0.460274,
2243 0.451551, 0.454424, 0.449270, 0.387571, 0.427556, 0.428740,
2244 0.401682, 0.402260, 0.408961, 0.395417, 0.387426, 0.378602,
2245 0.357826, 0.359125, 0.348494, 0.363710, 0.356117, 0.340363,
2246 0.337637, 0.396084, 0.341777, 0.340551, 0.348838, 0.344014,
2247 0.340468, 0.317654, 0.355584, 0.326023, 0.373416, 0.312298,
2248 0.326522, 0.290540, 0.335557, 0.318689, 0.327544, 0.319501,
2249 0.331754, 0.312728, 0.282263, 0.274937, 0.303867, 0.307820,
2250 0.289344, 0.268934, 0.288908, 0.290018, 0.291369, 0.295242,
2251 0.289067, 0.277685, 0.267957, 0.267559, 0.320229, 0.265060,
2252 0.305931, 0.305352, 0.262064, 0.281879, 0.287780, 0.270033,
2253 0.270814, 0.276667, 0.271531, 0.275283, 0.258189, 0.287969,
2254 0.251247, 0.301527, 0.267230, 0.245860, 0.293125, 0.253421,
2255 0.272396, 0.243637, 0.236206, 0.278452, 0.246544, 0.263165,
2256 0.230484, 0.231102, 0.258281, 0.244707, 0.270111, 0.248295,
2257 0.246942, 0.245592, 0.272766, 0.254243, 0.199647, 0.262590,
2258 0.226710, 0.243836, 0.214153, 0.233535, 0.235207, 0.234245,
2259 0.247698, 0.248379, 0.241463, 0.265230, 0.223242, 0.236191,
2260 0.252700, 0.231865, 0.228352, 0.229101, 0.237385, 0.246485,
2261 0.254706, 0.245565, 0.224841, 0.257301, 0.240968, 0.202379,
2262 0.236943, 0.241683, 0.220809, 0.219014, 0.213015, 0.244470,
2263 0.221042, 0.198996, 0.225295, 0.264466, 0.200600, 0.228143,
2264 0.250138, 0.216784, 0.268002, 0.275734, 0.218144, 0.229866,
2265 0.235443, 0.208909, 0.215067, 0.189743, 0.216741, 0.242686,
2266 0.200234, 0.218882, 0.245991, 0.222815, 0.219576, 0.209773,
2267 0.205247, 0.203855, 0.202534, 0.192536, 0.223447, 0.225810,
2268 0.220583, 0.248421, 0.223424, 0.206033, 0.203130, 0.221225,
2269 0.223763, 0.239216, 0.252311, 0.206893, 0.228461, 0.233591,
2270 0.201512, 0.242382, 0.215147, 0.232578, 0.207116, 0.239213,
2271 0.196215, 0.184367, 0.235135, 0.189768, 0.274084, 0.206267,
2272 0.203283, 0.248828, 0.250214, 0.217465, 0.232080, 0.215150,
2273 0.207936, 0.176789, 0.191338, 0.188655, 0.196181, 0.223691,
2274 0.254257, 0.216874, 0.213536, 0.221399, 0.192024, 0.212534,
2275 0.218169, 0.226635, 0.201191, 0.212700, 0.211634, 0.232353,
2276 0.223636, 0.208605, 0.249132, 0.183681, 0.221842, 0.187136,
2277 0.203772, 0.249575, 0.217713, 0.205193, 0.193941, 0.219707,
2278 0.264226, 0.182105, 0.207183, 0.220845, 0.236571, 0.182390,
2279 0.212914, 0.186266, 0.195361, 0.217665, 0.204527, 0.188804,
2280 0.222832, 0.191193, 0.201073, 0.185616, 0.195011, 0.200828,
2281 0.181434, 0.233707, 0.202925, 0.211992, 0.173100, 0.205258,
2282 0.182695, 0.216520, 0.218422, 0.209490, 0.211257, 0.215801,
2283 0.220652, 0.211409, 0.195731, 0.194957, 0.198888, 0.234926,
2284 0.221377, 0.229822, 0.176700, 0.172322, 0.212265, 0.206133,
2285 0.170355, 0.253305, 0.198688, 0.240043, 0.225384, 0.174729,
2286 0.195820, 0.200093, 0.196912, 0.212308, 0.200490, 0.240415,
2287 0.159744, 0.173686, 0.223853, 0.213604, 0.193779, 0.179328,
2288 0.180873, 0.237481, 0.179640, 0.235857, 0.202847, 0.167690,
2289 0.245093, 0.215504, 0.205848, 0.184408, 0.201626, 0.209651,
2290 0.236306, 0.217803, 0.188534, 0.187861, 0.161663, 0.221718,
2291 0.152044, 0.190412, 0.173505, 0.208995, 0.174575, 0.180734,
2292 0.247704, 0.203388, 0.194184, 0.169679, 0.182703, 0.213402,
2293 0.191808, 0.178604, 0.178116, 0.198452, 0.174687, 0.169809,
2294 0.222851, 0.156811, 0.229170, 0.210359, 0.178557, 0.248570,
2295 0.208536, 0.192571, 0.178912, 0.224505, 0.170822, 0.205492,
2296 0.330973, 0.160924, 0.203724, 0.213255, 0.205827, 0.187162,
2297 0.181252, 0.191723, 0.238106, 0.182398, 0.202358, 0.212066,
2298 0.201255, 0.168159, 0.185219, 0.229176, 0.158222, 0.164092,
2299 0.215405, 0.200724, 0.234811, 0.184488, 0.213112, 0.198577,
2300 0.219622, 0.160671, 0.179349, 0.206681, 0.206091, 0.165618,
2301 0.165203, 0.174442, 0.179287, 0.187318, 0.163481, 0.217440,
2302 0.160381, 0.177025, 0.204385, 0.163676, 0.210733, 0.186519,
2303 0.230701, 0.191764, 0.185119, 0.190770, 0.242987, 0.186812,
2304 0.202906, 0.161935, 0.182426, 0.197922, 0.181475, 0.155903,
2305 0.175006, 0.223482, 0.202706, 0.218108};
2313 if(M<Mmin || M>Mmax) return kTRUE;
2316 for(Int_t i=1; i<=nbin; i++)
2319 // printf("Mi> %f && Mi< %f\n", bin[i-1], bin[i]);
2329 Bool_t AliGenPythia::IsFromHeavyFlavor(Int_t ipart)
2331 // Check if this is a heavy flavor decay product
2332 TParticle * part = (TParticle *) fParticles.At(ipart);
2333 Int_t mpdg = TMath::Abs(part->GetPdgCode());
2334 Int_t mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2337 if (mfl >= 4 && mfl < 6) return kTRUE;
2339 Int_t imo = part->GetFirstMother()-1;
2340 TParticle* pm = part;
2342 // Heavy flavor hadron produced by generator
2344 pm = (TParticle*)fParticles.At(imo);
2345 mpdg = TMath::Abs(pm->GetPdgCode());
2346 mfl = Int_t (mpdg / TMath::Power(10, Int_t(TMath::Log10(mpdg))));
2347 if ((mfl > 3) && (mfl <6) && mpdg > 400) return kTRUE;
2348 imo = pm->GetFirstMother()-1;
2353 Bool_t AliGenPythia::CheckDetectorAcceptance(Float_t phi, Float_t eta, Int_t iparticle)
2355 // check the eta/phi correspond to the detectors acceptance
2356 // iparticle is the index of the particle to be checked, for PHOS rotation case
2357 if (fCheckPHOS && IsInPHOS (phi,eta,iparticle)) return kTRUE;
2358 else if(fCheckEMCAL && IsInEMCAL (phi,eta)) return kTRUE;
2359 else if(fCheckBarrel && IsInBarrel( eta)) return kTRUE;
2363 Bool_t AliGenPythia::TriggerOnSelectedParticles(Int_t np)
2365 // Select events with fragmentation photon, decay photon, pi0, eta or other hadrons going to PHOS or EMCAL or central barrel,
2366 // implemented primaryly for kPyJets, but extended to any kind of process.
2368 //printf("Check: frag photon %d, pi0 %d, eta %d, electron %d, hadron %d, decay %d, PHOS %d, EMCAL %d, Barrel %d \n",
2369 // fFragPhotonInCalo,fPi0InCalo, fEtaInCalo,fEleInCalo,fHadronInCalo,fDecayPhotonInCalo,fCheckPHOS,fCheckEMCAL, fCheckBarrel);
2372 for (Int_t i=0; i< np; i++) {
2374 TParticle* iparticle = (TParticle *) fParticles.At(i);
2376 Int_t pdg = iparticle->GetPdgCode();
2377 Int_t status = iparticle->GetStatusCode();
2378 Int_t imother = iparticle->GetFirstMother() - 1;
2380 TParticle* pmother = 0x0;
2381 Int_t momStatus = -1;
2384 pmother = (TParticle *) fParticles.At(imother);
2385 momStatus = pmother->GetStatusCode();
2386 momPdg = pmother->GetPdgCode();
2392 // Check the particle type: hadron (not pi0 or eta), electron, decay photon (from pi0 or eta or any), pi0 or eta
2395 if (fHadronInCalo && status == 1)
2397 if(TMath::Abs(pdg) > 23 && pdg !=221 && pdg != 111) // avoid photons, electrons, muons, neutrinos and eta or pi0
2398 // (in case neutral mesons were declared stable)
2402 else if (fEleInCalo && status == 1 && TMath::Abs(pdg) == 11)
2406 //Fragmentation photon
2407 else if (fFragPhotonInCalo && pdg == 22 && status == 1)
2409 if(momStatus != 11) ok = kTRUE ; // No photon from hadron decay
2412 else if (fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay && pdg == 22) // pi0 status can be 1 or 11 depending on decay settings, work only for 11
2414 if( momStatus == 11)
2416 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Decay photon! pdg %d, status %d, pt %2.2f, mom: pdg %d, pt %2.2f\n",
2417 // pdg,status,iparticle->Pt(),momPdg,pmother->Pt());
2418 ok = kTRUE ; // photon from hadron decay
2420 //In case only decays from pi0 or eta requested
2421 if(fPi0InCalo && momPdg!=111) ok = kFALSE;
2422 if(fEtaInCalo && momPdg!=221) ok = kFALSE;
2426 // Pi0 or Eta particle
2427 else if ((fPi0InCalo || fEtaInCalo))
2429 if(fDecayPhotonInCalo && !fForceNeutralMeson2PhotonDecay ) continue ;
2431 if (fPi0InCalo && pdg == 111) // pi0 status can be 1 or 11 depending on decay settings
2433 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Pi0! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2436 else if (fEtaInCalo && pdg == 221)
2438 //if(iparticle->Pt() > fTriggerParticleMinPt) printf("Eta! pdg %d, status %d, pt %2.2f\n",pdg,status,iparticle->Pt());
2445 // Check that the selected particle is in the calorimeter acceptance
2447 if(ok && iparticle->Pt() > fTriggerParticleMinPt)
2449 //Just check if the selected particle falls in the acceptance
2450 if(!fForceNeutralMeson2PhotonDecay )
2452 //printf("\t Check acceptance! \n");
2453 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2454 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2456 if(CheckDetectorAcceptance(phi,eta,i))
2459 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));
2460 //printf("\t Accept \n");
2465 //Mesons have several decay modes, select only those decaying into 2 photons
2466 else if(fForceNeutralMeson2PhotonDecay && (fPi0InCalo || fEtaInCalo))
2468 // In case we want the pi0/eta trigger,
2469 // check the decay mode (2 photons)
2471 //printf("\t Force decay 2 gamma\n");
2473 Int_t ndaughters = iparticle->GetNDaughters();
2474 if(ndaughters != 2){
2479 TParticle*d1 = (TParticle *) fParticles.At(iparticle->GetDaughter(0)-1);
2480 TParticle*d2 = (TParticle *) fParticles.At(iparticle->GetDaughter(1)-1);
2486 //iparticle->Print();
2490 Int_t pdgD1 = d1->GetPdgCode();
2491 Int_t pdgD2 = d2->GetPdgCode();
2492 //printf("\t \t 2 daughters pdg = %d - %d\n",pdgD1,pdgD2);
2493 //printf("mother %d - %d\n",d1->GetFirstMother(),d2->GetFirstMother());
2495 if(pdgD1 != 22 || pdgD2 != 22){
2500 //printf("\t accept decay\n");
2502 //Trigger on the meson, not on the daughter
2503 if(!fDecayPhotonInCalo){
2505 Float_t phi = iparticle->Phi()*180./TMath::Pi(); //Convert to degrees
2506 Float_t eta =TMath::Abs(iparticle->Eta()); //in calos etamin=-etamax
2508 if(CheckDetectorAcceptance(phi,eta,i))
2510 //printf("\t Accept meson pdg %d\n",pdg);
2512 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));
2520 //printf("Check daughters acceptance\n");
2522 //Trigger on the meson daughters
2524 Float_t phi = d1->Phi()*180./TMath::Pi(); //Convert to degrees
2525 Float_t eta =TMath::Abs(d1->Eta()); //in calos etamin=-etamax
2526 if(d1->Pt() > fTriggerParticleMinPt)
2528 //printf("\t Check acceptance photon 1! \n");
2529 if(CheckDetectorAcceptance(phi,eta,i))
2531 //printf("\t Accept Photon 1\n");
2533 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));
2541 phi = d2->Phi()*180./TMath::Pi(); //Convert to degrees
2542 eta =TMath::Abs(d2->Eta()); //in calos etamin=-etamax
2544 if(d2->Pt() > fTriggerParticleMinPt)
2546 //printf("\t Check acceptance photon 2! \n");
2547 if(CheckDetectorAcceptance(phi,eta,i))
2549 //printf("\t Accept Photon 2\n");
2551 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));
2557 } // force 2 photon daughters in pi0/eta decays
2559 } else ok = kFALSE; // check acceptance
2563 // If requested, rotate the particles event in phi to enhance/speed PHOS selection
2564 // A particle passing all trigger conditions except phi position in PHOS, is used as reference