SND@LHC Software
Loading...
Searching...
No Matches
NeutronGenerator_FLUKA.cxx
Go to the documentation of this file.
1#include <math.h>
2#include "TROOT.h"
3#include "TFile.h"
4#include "FairPrimaryGenerator.h"
6#include "FairLogger.h"
7#include "TDatabasePDG.h" // for TDatabasePDG
8#include "TMath.h" // for Sqrt
9#include "TRandom.h"
10
11// read events from ntuples produced by FLUKA
12Double_t neutronMass = 939.565379/1000.;
13// ----- Default constructor -------------------------------------------
16// -------------------------------------------------------------------------
17
18// ----- Destructor ----------------------------------------------------
22// -------------------------------------------------------------------------
23
24// ----- Passing the event ---------------------------------------------
25Bool_t NeutronGenerator_FLUKA::ReadEvent(FairPrimaryGenerator* cpg)
26{
27 // neutron rate as function of kinetic energy flat in log10(E) in GeV;
28 fn++;
29 if (fn %100000==0) {LOG(INFO)<< "heartbeat event "<<fn;}
30 Double_t Ekin = TMath::Power(10,gRandom->Uniform(-13.,-1.));
31 Double_t P = TMath::Sqrt( Ekin*Ekin+2*Ekin*neutronMass);
32 Double_t phi = gRandom->Uniform(0,2*TMath::Pi());
33 Double_t theta = TMath::ACos(gRandom->Uniform(-1,1));
34 Double_t px = P*TMath::Sin(theta)*TMath::Cos(phi);
35 Double_t py = P*TMath::Sin(theta)*TMath::Sin(phi);
36 Double_t pz = P*TMath::Cos(theta);
37 LOG(DEBUG) << "NeutronGenerator_FLUKA: " << Ekin << " " << P << " " << px<<" "<<py<<" "<<pz;
38 // place neutrons on sphere covering maximum distance, ~ 2m
39 Double_t R = 200;
40 phi = gRandom->Uniform(0,2*TMath::Pi());
41 theta = TMath::ACos(gRandom->Uniform(-1,1));
42 Double_t x = R*TMath::Sin(theta)*TMath::Cos(phi);
43 Double_t y = R*TMath::Sin(theta)*TMath::Sin(phi);
44 Double_t z = R*TMath::Cos(theta);
45
46 cpg->AddTrack(2112,px,py,pz,x,y,z,-1,true,Ekin+neutronMass,0.,1.,(TMCProcess)0);
47
48 return kTRUE;
49}
50
Double_t neutronMass
Bool_t ReadEvent(FairPrimaryGenerator *)
ClassImp(ecalContFact) ecalContFact