]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TDPMjet/AliGenDPMjet.cxx
Converting PWG/TRD to native cmake
[u/mrichter/AliRoot.git] / TDPMjet / AliGenDPMjet.cxx
index 35bd1659af2404a6e56331a273aad6038fc9a3b8..25a4a0fcf82c5970cfaf5bb2a432c170ad939131 100644 (file)
@@ -35,6 +35,7 @@
 #include "AliGenDPMjetEventHeader.h"
 #include "AliRun.h"
 #include "AliDpmJetRndm.h"
+#include "AliIonPDGCodes.h"
 #include "AliHeader.h"
 #include "AliStack.h"
 #include "AliMC.h"
@@ -52,6 +53,7 @@ AliGenDPMjet::AliGenDPMjet()
      fSelectAll(0),
      fFlavor(0),
      fTrials(0),
+     fNprimaries(0),
      fSpectators(1),
      fSpecn(0),
      fSpecp(0),
@@ -62,6 +64,10 @@ AliGenDPMjet::AliGenDPMjet()
      fDecayAll(0),
      fGenImpPar(0.),
      fProcess(kDpmMb),
+     fTriggerParticle(0),
+     fTriggerEta(0.9),     
+     fTriggerMinPt(-1),  
+     fTriggerMaxPt(1000),  
      fTriggerMultiplicity(0),
      fTriggerMultiplicityEta(0),
      fTriggerMultiplicityPtMin(0),
@@ -87,6 +93,7 @@ AliGenDPMjet::AliGenDPMjet(Int_t npart)
      fSelectAll(0),
      fFlavor(0),
      fTrials(0),
+     fNprimaries(0),
      fSpectators(1),
      fSpecn(0),
      fSpecp(0),
@@ -97,6 +104,10 @@ AliGenDPMjet::AliGenDPMjet(Int_t npart)
      fDecayAll(0),
      fGenImpPar(0.),
      fProcess(kDpmMb),
+     fTriggerParticle(0),
+     fTriggerEta(0.9),     
+     fTriggerMinPt(-1),  
+     fTriggerMaxPt(1000),  
      fTriggerMultiplicity(0),
      fTriggerMultiplicityEta(0),
      fTriggerMultiplicityPtMin(0),
@@ -127,6 +138,7 @@ AliGenDPMjet::AliGenDPMjet(const AliGenDPMjet &/*Dpmjet*/)
      fSelectAll(0),
      fFlavor(0),
      fTrials(0),
+     fNprimaries(0),
      fSpectators(1),
      fSpecn(0),
      fSpecp(0),
@@ -137,6 +149,10 @@ AliGenDPMjet::AliGenDPMjet(const AliGenDPMjet &/*Dpmjet*/)
      fDecayAll(0),
      fGenImpPar(0.),
      fProcess(kDpmMb),
+     fTriggerParticle(0),
+     fTriggerEta(0.9),     
+     fTriggerMinPt(-1),  
+     fTriggerMaxPt(1000),  
      fTriggerMultiplicity(0),
      fTriggerMultiplicityEta(0),
      fTriggerMultiplicityPtMin(0),
@@ -205,6 +221,7 @@ void AliGenDPMjet::Generate()
   Int_t kf, ks, imo;
   kf = 0;
   fTrials = 0;
+  fNprimaries = 0;
   //  Set collision vertex position 
   if (fVertexSmear == kPerEvent) Vertex();
   
@@ -258,6 +275,21 @@ void AliGenDPMjet::Generate()
        Printf("Triggered on event with multiplicity of %d >= %d", multiplicity, fTriggerMultiplicity);
       }    
 
+  //Trigger on the presence of a given particle in some phase space
+    if (fTriggerParticle) {
+       Bool_t triggered = kFALSE;
+           for (Long_t i = 0; i < np; i++) {
+               TParticle *  iparticle = (TParticle *) fParticles.At(i);
+               kf = CheckPDGCode(iparticle->GetPdgCode());
+               if (kf != fTriggerParticle) continue;
+               if (iparticle->Pt() == 0.) continue;
+               if (TMath::Abs(iparticle->Eta()) > fTriggerEta) continue;
+               if ( iparticle->Pt() > fTriggerMaxPt || iparticle->Pt() < fTriggerMinPt ) continue;
+               triggered = kTRUE;
+               break;
+           }
+      if (!triggered) continue; 
+    }
 
       if(fkTuneForDiff && ( (TMath::Abs(fEnergyCMS - 900) < 1) || (TMath::Abs(fEnergyCMS - 2760) < 1) || (TMath::Abs(fEnergyCMS - 7000) < 1)) ) {
        if(!CheckDiffraction() ) continue;
@@ -374,13 +406,16 @@ void AliGenDPMjet::Generate()
 
 
              
-             Bool_t tFlag = (fTrackIt && (ks==1 || ks==-1 || ks==1001));
+             Bool_t tFlag = (fTrackIt && (ks==1 || ks==-1));
+             //printf(" AliGemDPMJet->PushTrack: kf %d  ks %d  flag %d\n",kf,ks,tFlag);
+             if(kf>10000 && (ks==-1 || ks==1000 || ks==1001)) kf += 1000000000;
              PushTrack(tFlag, imo, kf, 
                        p[0], p[1], p[2], p[3], 
                        origin[0], origin[1], origin[2], tof,
                        polar[0], polar[1], polar[2],
                        kPNoProcess, nt, 1., ks);
              KeepTrack(nt);
+             fNprimaries++;
              newPos[i] = nt;
          } // if selected
       } // particle loop
@@ -457,9 +492,8 @@ Bool_t AliGenDPMjet::Stable(TParticle*  particle)
 {
 // Return true for a stable particle
 //
-    
-//    if (particle->GetFirstDaughter() < 0 ) return kTRUE;
-    if (particle->GetStatusCode() == 1) return kTRUE;
+    int st = particle->GetStatusCode();
+    if(st == 1 || st == -1) return kTRUE;
     else return kFALSE;
 
 }
@@ -468,7 +502,7 @@ Bool_t AliGenDPMjet::Stable(TParticle*  particle)
 void AliGenDPMjet::MakeHeader()
 {
 // Builds the event header, to be called after each event
-    fHeader.SetNProduced(fDPMjet->GetNumStablePc());
+    fHeader.SetNProduced(fNprimaries);
     fHeader.SetImpactParameter(fDPMjet->GetBImpac());
     fHeader.SetTotalEnergy(fDPMjet->GetTotEnergy());
     fHeader.SetParticipants(fDPMjet->GetProjParticipants(), 
@@ -629,7 +663,9 @@ Bool_t AliGenDPMjet::CheckDiffraction()
        TParticle *  part = (TParticle *) fParticles.At(iPart);
        Double_t E= part->Energy();
        Double_t P= part->P();
-       M= TMath::Sqrt((fEnergyCMS-E-P)*(fEnergyCMS-E+P));
+       Double_t M2 = (fEnergyCMS-E-P)*(fEnergyCMS-E+P);
+       if(M2<0)  return kFALSE;
+       M= TMath::Sqrt(M2);
      }
 
      Double_t Mmin, Mmax, wSD, wDD, wND;
@@ -677,8 +713,15 @@ Bool_t AliGenDPMjet::CheckDiffraction()
     return kTRUE;
 }
 
+// -------------------------------------------------------
+void AliGenDPMjet::SetIonPDGCodes()
+{
+   // Defining PDG codes for the ions
+   AliIonPDGCodes *pdgcodes = new AliIonPDGCodes();
+   pdgcodes->AddParticlesToPdgDataBase();
+}
 
-
+// -------------------------------------------------------
 Bool_t AliGenDPMjet::GetWeightsDiffraction(Double_t M, Double_t &Mmin, Double_t &Mmax, 
                                                        Double_t &wSD, Double_t &wDD, Double_t &wND)
 {