#include "AliGenDPMjetEventHeader.h"
#include "AliRun.h"
#include "AliDpmJetRndm.h"
+#include "AliIonPDGCodes.h"
#include "AliHeader.h"
#include "AliStack.h"
#include "AliMC.h"
fSelectAll(0),
fFlavor(0),
fTrials(0),
+ fNprimaries(0),
fSpectators(1),
fSpecn(0),
fSpecp(0),
fDecayAll(0),
fGenImpPar(0.),
fProcess(kDpmMb),
+ fTriggerParticle(0),
+ fTriggerEta(0.9),
+ fTriggerMinPt(-1),
+ fTriggerMaxPt(1000),
fTriggerMultiplicity(0),
fTriggerMultiplicityEta(0),
fTriggerMultiplicityPtMin(0),
fSelectAll(0),
fFlavor(0),
fTrials(0),
+ fNprimaries(0),
fSpectators(1),
fSpecn(0),
fSpecp(0),
fDecayAll(0),
fGenImpPar(0.),
fProcess(kDpmMb),
+ fTriggerParticle(0),
+ fTriggerEta(0.9),
+ fTriggerMinPt(-1),
+ fTriggerMaxPt(1000),
fTriggerMultiplicity(0),
fTriggerMultiplicityEta(0),
fTriggerMultiplicityPtMin(0),
fSelectAll(0),
fFlavor(0),
fTrials(0),
+ fNprimaries(0),
fSpectators(1),
fSpecn(0),
fSpecp(0),
fDecayAll(0),
fGenImpPar(0.),
fProcess(kDpmMb),
+ fTriggerParticle(0),
+ fTriggerEta(0.9),
+ fTriggerMinPt(-1),
+ fTriggerMaxPt(1000),
fTriggerMultiplicity(0),
fTriggerMultiplicityEta(0),
fTriggerMultiplicityPtMin(0),
Int_t kf, ks, imo;
kf = 0;
fTrials = 0;
+ fNprimaries = 0;
// Set collision vertex position
if (fVertexSmear == kPerEvent) Vertex();
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;
- 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
{
// 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;
}
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(),
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;
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)
{