X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PYTHIA6%2FAliGenPythiaPlus.cxx;h=4a19b5fc1627a53e29b0e2f735334ba5b33be3bf;hb=55df52a3b969b90ca30c57c584886e52602295aa;hp=dcecd7b4261678ef9f05e62e32e47ca4159d45e3;hpb=fc7e1b1c2cd284f8bc092d58ebb422f69892289e;p=u%2Fmrichter%2FAliRoot.git diff --git a/PYTHIA6/AliGenPythiaPlus.cxx b/PYTHIA6/AliGenPythiaPlus.cxx index dcecd7b4261..4a19b5fc162 100644 --- a/PYTHIA6/AliGenPythiaPlus.cxx +++ b/PYTHIA6/AliGenPythiaPlus.cxx @@ -128,7 +128,7 @@ AliGenPythiaPlus::AliGenPythiaPlus(): { // Default Constructor - SetEnergyCMS(5500.); + fEnergyCMS = 5500.; SetNuclei(0,0); if (!AliPythiaRndm::GetPythiaRandom()) AliPythiaRndm::SetPythiaRandom(GetRandom()); @@ -217,7 +217,7 @@ AliGenPythiaPlus::AliGenPythiaPlus(AliPythiaBase* pythia) // semimuonic decay // structure function GRVHO // - SetEnergyCMS(5500.); + fEnergyCMS = 5500.; fName = "Pythia"; fTitle= "Particle Generator using PYTHIA"; SetForceDecay(); @@ -375,6 +375,9 @@ void AliGenPythiaPlus::Init() fParentSelect[1] = 421; fParentSelect[2] = 431; fParentSelect[3] = 4122; + fParentSelect[4] = 4232; + fParentSelect[5] = 4132; + fParentSelect[6] = 4332; fFlavorSelect = 4; break; case kPyD0PbPbMNR: @@ -395,7 +398,12 @@ void AliGenPythiaPlus::Init() fParentSelect[0] = 431; fFlavorSelect = 4; break; + case kPyLambdacppMNR: + fParentSelect[0] = 4122; + fFlavorSelect = 4; + break; case kPyBeauty: + case kPyBeautyJets: case kPyBeautyPbPbMNR: case kPyBeautypPbMNR: case kPyBeautyppMNR: @@ -423,8 +431,10 @@ void AliGenPythiaPlus::Init() case kPyJpsi: fParentSelect[0] = 443; break; + case kPyMbAtlasTuneMC09: case kPyMbDefault: case kPyMb: + case kPyMbWithDirectPhoton: case kPyMbNonDiffr: case kPyMbMSEL1: case kPyJets: @@ -487,9 +497,9 @@ void AliGenPythiaPlus::Generate() fDecayer->ForceDecay(); - Float_t polar[3] = {0,0,0}; - Float_t origin[3] = {0,0,0}; - Float_t p[4]; + Double_t polar[3] = {0,0,0}; + Double_t origin[3] = {0,0,0}; + Double_t p[4]; // converts from mm/c to s const Float_t kconv=0.001/2.999792458e8; // @@ -525,8 +535,8 @@ void AliGenPythiaPlus::Generate() } fNpartons = fPythia->GetNumberOfParticles(); } else { - printf("Loading Event %d\n",AliRunLoader::GetRunLoader()->GetEventNumber()); - fRL->GetEvent(AliRunLoader::GetRunLoader()->GetEventNumber()); + printf("Loading Event %d\n",AliRunLoader::Instance()->GetEventNumber()); + fRL->GetEvent(AliRunLoader::Instance()->GetEventNumber()); fPythia->SetNumberOfParticles(0); fPythia->LoadEvent(fRL->Stack(), 0 , 1); fPythia->EditEventList(21); @@ -580,6 +590,7 @@ void AliGenPythiaPlus::Generate() Int_t nTkbles = 0; // Trackable particles if (fProcess != kPyMbDefault && fProcess != kPyMb && + fProcess != kPyMbWithDirectPhoton && fProcess != kPyJets && fProcess != kPyDirectGamma && fProcess != kPyMbNonDiffr && @@ -737,7 +748,7 @@ void AliGenPythiaPlus::Generate() origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm] origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm] - Float_t tof = kconv*iparticle->T(); + Float_t tof = fTime + kconv*iparticle->T(); Int_t ipa = (fPythia->Version() == 6) ? (iparticle->GetFirstMother() - 1) :(iparticle->GetFirstMother()) ; Int_t iparent = (ipa > -1) ? pParent[ipa] : -1; @@ -845,8 +856,10 @@ Int_t AliGenPythiaPlus::GenerateMB() } } } - if(!ok) - return 0; + if(!ok){ + delete [] pParent; + return 0; + } } @@ -880,8 +893,10 @@ Int_t AliGenPythiaPlus::GenerateMB() if(!okd && iphcand != -1) // execute rotation in phi RotatePhi(iphcand,okd); - if(!okd) - return 0; + if(!okd) { + delete[] pParent; + return 0; + } } if (fTriggerParticle) { @@ -905,23 +920,45 @@ Int_t AliGenPythiaPlus::GenerateMB() // Check if there is a ccbar or bbbar pair with at least one of the two // in fYMin < y < fYMax if (fProcess == kPyCharmppMNRwmi || fProcess == kPyBeautyppMNRwmi) { - TParticle *hvq; + TParticle *partCheck; + TParticle *mother; Bool_t theQ=kFALSE,theQbar=kFALSE,inYcut=kFALSE; - Float_t yQ; - Int_t pdgQ; + Bool_t theChild=kFALSE; + Float_t y; + Int_t pdg,mpdg,mpdgUpperFamily; for(i=0; iGetPdgCode(); - if(TMath::Abs(pdgQ) != fFlavorSelect) continue; - if(pdgQ>0) { theQ=kTRUE; } else { theQbar=kTRUE; } - yQ = 0.5*TMath::Log((hvq->Energy()+hvq->Pz()+1.e-13)/ - (hvq->Energy()-hvq->Pz()+1.e-13)); - if(yQ>fYMin && yQGetPdgCode(); + if(TMath::Abs(pdg) == fFlavorSelect) { // quark + if(pdg>0) { theQ=kTRUE; } else { theQbar=kTRUE; } + y = 0.5*TMath::Log((partCheck->Energy()+partCheck->Pz()+1.e-13)/ + (partCheck->Energy()-partCheck->Pz()+1.e-13)); + if(y>fYMin && yGetFirstMother() - 1; + if(mi<0) continue; + mother = (TParticle*)fParticles.At(mi); + mpdg=TMath::Abs(mother->GetPdgCode()); + mpdgUpperFamily=(mpdg>1000 ? mpdg+1000 : mpdg+100); // keep e from c from b + if ( ParentSelected(mpdg) || + (fFlavorSelect==5 && ParentSelected(mpdgUpperFamily))) { + if (KinematicSelection(partCheck,1)) { + theChild=kTRUE; + } + } + } } - if (!theQ || !theQbar || !inYcut) { + if (!theQ || !theQbar || !inYcut) { // one of the c/b conditions not satisfied delete[] pParent; return 0; } + if (fCutOnChild && !theChild) { // one of the child conditions not satisfied + delete[] pParent; + return 0; + } + } //Introducing child cuts in case kPyW, kPyZ, kPyMb, and kPyMbNonDiff @@ -929,6 +966,7 @@ Int_t AliGenPythiaPlus::GenerateMB() fProcess == kPyZ || fProcess == kPyMbDefault || fProcess == kPyMb || + fProcess == kPyMbWithDirectPhoton || fProcess == kPyMbNonDiffr) && (fCutOnChild == 1) ) { if ( !CheckKinematicsOnChild() ) { @@ -966,7 +1004,7 @@ Int_t AliGenPythiaPlus::GenerateMB() origin[1] = fVertex[1]+iparticle->Vy()/10; // [cm] origin[2] = fVertex[2]+iparticle->Vz()/10; // [cm] - Float_t tof = fEventTime + kconv * iparticle->T(); + Float_t tof = fTime + fEventTime + kconv * iparticle->T(); PushTrack(fTrackIt*trackIt, iparent, kf, p[0], p[1], p[2], p[3], @@ -979,17 +1017,18 @@ Int_t AliGenPythiaPlus::GenerateMB() // // Special Treatment to store color-flow // + /* if (ks == 3 || ks == 13 || ks == 14) { TParticle* particle = 0; if (fStack) { particle = fStack->Particle(nt); } else { - particle = gAlice->Stack()->Particle(nt); + particle = AliRunLoader::Instance()->Stack()->Particle(nt); } -// particle->SetFirstDaughter(fPythia->GetK(2, i)); -// particle->SetLastDaughter(fPythia->GetK(3, i)); + particle->SetFirstDaughter(fPythia->GetK(2, i)); + particle->SetLastDaughter(fPythia->GetK(3, i)); } - + */ KeepTrack(nt); pParent[i] = nt; SetHighWaterMark(nt); @@ -1064,7 +1103,7 @@ void AliGenPythiaPlus::MakeHeader() // // Event Vertex fHeader->SetPrimaryVertex(fVertex); - + fHeader->SetInteractionTime(fTime+fEventTime); // // Number of primaries fHeader->SetNProduced(fNprimaries); @@ -1103,8 +1142,9 @@ void AliGenPythiaPlus::MakeHeader() // Store quenching parameters // if (fQuench){ - Double_t z[4]; - Double_t xp, yp; + Double_t z[4] = {0.}; + Double_t xp = 0.; + Double_t yp = 0.; if (fQuench == 1) { // Pythia::Quench() fPythia->GetQuenchingParameters(xp, yp, z); @@ -1132,7 +1172,7 @@ void AliGenPythiaPlus::MakeHeader() fHeader = 0x0; } -Bool_t AliGenPythiaPlus::CheckTrigger(TParticle* jet1, TParticle* jet2) +Bool_t AliGenPythiaPlus::CheckTrigger(const TParticle* jet1, const TParticle* jet2) { // Check the kinematic trigger condition // @@ -1301,7 +1341,7 @@ void AliGenPythiaPlus::GetSubEventTime() -Bool_t AliGenPythiaPlus::IsInEMCAL(Float_t phi, Float_t eta) +Bool_t AliGenPythiaPlus::IsInEMCAL(Float_t phi, Float_t eta) const { // Is particle in EMCAL acceptance? // phi in degrees, etamin=-etamax @@ -1312,7 +1352,7 @@ Bool_t AliGenPythiaPlus::IsInEMCAL(Float_t phi, Float_t eta) return kFALSE; } -Bool_t AliGenPythiaPlus::IsInPHOS(Float_t phi, Float_t eta) +Bool_t AliGenPythiaPlus::IsInPHOS(Float_t phi, Float_t eta) const { // Is particle in PHOS acceptance? // Acceptance slightly larger considered.