* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-*/
+/* $Id$ */
-/*
- Generator for slow nucluons in pA interactions.
- Source is modelled by a relativistic Maxwell distributions.
- Original code by Ferenc Sikler <sikler@rmki.kfki.hu>
- */
+//
+// Generator for slow nucleons in pA interactions.
+// Source is modelled by a relativistic Maxwell distributions.
+// This class cooparates with AliCollisionGeometry if used inside AliGenCocktail.
+// In this case the number of slow nucleons is determined from the number of wounded nuclei
+// using a realisation of AliSlowNucleonModel.
+// Original code by Ferenc Sikler <sikler@rmki.kfki.hu>
+//
#include <TDatabasePDG.h>
#include <TPDGCode.h>
#include <TH2F.h>
+#include <TCanvas.h>
#include "AliCollisionGeometry.h"
#include "AliGenSlowNucleons.h"
fDebug = 0;
}
+AliGenSlowNucleons::AliGenSlowNucleons(const AliGenSlowNucleons & sn):
+ AliGenerator(sn)
+{
+// Copy constructor
+ sn.Copy(*this);
+}
+
//____________________________________________________________
AliGenSlowNucleons::~AliGenSlowNucleons()
{
fMomentum = fCMS/2. * fZTarget / fATarget;
fBeta = fMomentum / TMath::Sqrt(kMass * kMass + fMomentum * fMomentum);
if (fDebug) {
- fDebugHist = new TH2F("DebugHist", "N_heavy vs nu", 50, 0., 50., 50, 0., 50.);
+ fDebugHist1 = new TH2F("DebugHist1", "nu vs N_slow", 100, 0., 100., 20, 0., 20.);
+ fDebugHist2 = new TH2F("DebugHist2", "b vs N_slow", 100, 0., 100., 15, 0., 15.);
}
}
void AliGenSlowNucleons::FinishRun()
{
+// End of run action
+// Show histogram for debugging if requested.
if (fDebug) {
- fDebugHist->Draw();
+ TCanvas *c = new TCanvas("c","Canvas 1",400,10,600,700);
+ c->Divide(2,1);
+ c->cd(1);
+ fDebugHist1->Draw();
+ c->cd(2);
+ fDebugHist2->Draw();
}
}
//
// Communication with Gray Particle Model
//
- Int_t ngp, ngn, nbp, nbn;
-
- Float_t b = fCollisionGeometry->ImpactParameter();
- Int_t nn = fCollisionGeometry->NN();
- Int_t nwn = fCollisionGeometry->NwN();
- Int_t nnw = fCollisionGeometry->NNw();
- Int_t nwnw = fCollisionGeometry->NwNw();
-
- printf("AliGenSlowNucleons: Impact parameter from Collision Geometry %f %d %d %d %d\n",
- b, nn, nwn, nnw, nwnw);
-
- fSlowNucleonModel->GetNumberOfSlowNucleons(fCollisionGeometry, ngp, ngn, nbp, nbn);
-
- if (fDebug) {
- printf("nucleons %d %d %d %d \n", ngp, ngn, nbp, nbn);
-
- fDebugHist->Fill(Float_t(ngp + ngn + nbp + nbn), fCollisionGeometry->NwN(), 1.);
- }
-
+ if (fCollisionGeometry) {
+ Float_t b = fCollisionGeometry->ImpactParameter();
+ Int_t nn = fCollisionGeometry->NN();
+ Int_t nwn = fCollisionGeometry->NwN();
+ Int_t nnw = fCollisionGeometry->NNw();
+ Int_t nwnw = fCollisionGeometry->NwNw();
+
+ fSlowNucleonModel->GetNumberOfSlowNucleons(fCollisionGeometry, fNgp, fNgn, fNbp, fNbn);
+ if (fDebug) {
+ printf("Nucleons %d %d %d %d \n", fNgp, fNgn, fNbp, fNbn);
+ fDebugHist1->Fill(Float_t(fNgp + fNgn + fNbp + fNbn), fCollisionGeometry->NwN(), 1.);
+ fDebugHist2->Fill(Float_t(fNgp + fNgn + fNbp + fNbn), b, 1.);
+ printf("AliGenSlowNucleons: Impact parameter from Collision Geometry %f %d %d %d %d\n",
+ b, nn, nwn, nnw, nwnw);
+ }
+ }
//
Float_t p[3];
Float_t origin[3] = {0., 0., 0.};
Float_t polar [3] = {0., 0., 0.};
- Int_t nt, i;
+ Int_t nt, i, j;
Int_t kf;
+
+ if(fVertexSmear == kPerEvent) {
+ Vertex();
+ for (j=0; j < 3; j++) origin[j] = fVertex[j];
+ } // if kPerEvent
//
// Gray protons
//
fCharge = 1;
kf = kProton;
- for(i = 0; i < ngp; i++) {
+ for(i = 0; i < fNgp; i++) {
GenerateSlow(fCharge, fTemperatureG, fBetaSourceG, p);
- SetTrack(fTrackIt, -1, kf, p, origin, polar,
+ PushTrack(fTrackIt, -1, kf, p, origin, polar,
0., kPNoProcess, nt, 1.);
KeepTrack(nt);
}
//
fCharge = 0;
kf = kNeutron;
- for(i = 0; i < ngn; i++) {
+ for(i = 0; i < fNgn; i++) {
GenerateSlow(fCharge, fTemperatureG, fBetaSourceG, p);
- SetTrack(fTrackIt, -1, kf, p, origin, polar,
+ PushTrack(fTrackIt, -1, kf, p, origin, polar,
0., kPNoProcess, nt, 1.);
KeepTrack(nt);
}
//
fCharge = 1;
kf = kProton;
- for(i = 0; i < nbp; i++) {
+ for(i = 0; i < fNbp; i++) {
GenerateSlow(fCharge, fTemperatureB, fBetaSourceB, p);
- SetTrack(fTrackIt, -1, kf, p, origin, polar,
+ PushTrack(fTrackIt, -1, kf, p, origin, polar,
0., kPNoProcess, nt, 1.);
KeepTrack(nt);
}
//
fCharge = 0;
kf = kNeutron;
- for(i = 0; i < nbn; i++) {
+ for(i = 0; i < fNbn; i++) {
GenerateSlow(fCharge, fTemperatureB, fBetaSourceB, p);
- SetTrack(fTrackIt, -1, kf, p, origin, polar,
+ PushTrack(fTrackIt, -1, kf, p, origin, polar,
0., kPNoProcess, nt, 1.);
KeepTrack(nt);
}
void AliGenSlowNucleons::GenerateSlow(Int_t charge, Double_t T, Double_t beta, Float_t* q)
+
+{
/*
Emit a slow nucleon with "temperature" T [GeV],
from a source moving with velocity beta
Three-momentum [GeV/c] is given back in q[3]
*/
-{
Double_t m, pmax, p, f, theta, phi;
-
TDatabasePDG * pdg = TDatabasePDG::Instance();
const Double_t kMassProton = pdg->GetParticle(kProton) ->Mass();
const Double_t kMassNeutron = pdg->GetParticle(kNeutron)->Mass();
q[2] = gamma * (q[2] + beta*energy);
}
+
+AliGenSlowNucleons& AliGenSlowNucleons::operator=(const AliGenSlowNucleons& rhs)
+{
+// Assignment operator
+ rhs.Copy(*this);
+ return *this;
+}
+
+void AliGenSlowNucleons::Copy(TObject&) const
+{
+ //
+ // Copy
+ //
+ Fatal("Copy","Not implemented!\n");
+}
+