Geant4  10.02.p03
CML2PrimaryGenerationAction Class Reference

#include <ML2PrimaryGenerationAction.hh>

Inheritance diagram for CML2PrimaryGenerationAction:
Collaboration diagram for CML2PrimaryGenerationAction:

Public Member Functions

 CML2PrimaryGenerationAction (void)
 
 ~CML2PrimaryGenerationAction (void)
 
void design (G4double accTargetZPosition)
 
void GeneratePrimaries (G4Event *anEvent)
 
void inizialize (SPrimaryParticle *primaryParticleData)
 
void setNRecycling (G4int val)
 
void setNLoopsPhSpParticles (G4int val)
 
void setNMaxParticlesInRamPhaseSpace (G4int val)
 
void setGunMeanEnergy (G4double val)
 
void setGunStdEnergy (G4double val)
 
void setGunRadious (G4double val)
 
void setCalculatedPhaseSpaceFileIN (G4String val)
 
void setSourceTypeName (G4String val)
 
void setRotation (G4RotationMatrix *val)
 
G4int getNrecycling ()
 
G4int getSourceTypeName ()
 
- Public Member Functions inherited from G4VUserPrimaryGeneratorAction
 G4VUserPrimaryGeneratorAction ()
 
virtual ~G4VUserPrimaryGeneratorAction ()
 

Static Public Member Functions

static CML2PrimaryGenerationActionGetInstance (void)
 

Private Member Functions

void setGunRandom ()
 
void setGunCalculatedPhaseSpace ()
 
void GenerateFromRandom ()
 
void GenerateFromCalculatedPhaseSpace ()
 
void fillParticlesContainer ()
 
void applySourceRotation ()
 

Private Attributes

G4int nRecycling
 
G4int nLoopsPhSpParticles
 
G4int nMaxParticlesInRamPhaseSpace
 
G4int idParticleSource
 
G4double GunMeanEnegy
 
G4double GunStdEnegy
 
G4double GunRadious
 
G4String calculatedPhaseSpaceFileIN
 
CML2PrimaryGenerationActionMessengerPrimaryGenerationActionMessenger
 
G4double accTargetZPosition
 
G4ThreeVector dir
 
G4ThreeVector pos
 
G4double ek
 
G4RotationMatrixrm
 
G4Timer myTime
 
G4double sinTheta
 
G4double cosTheta
 
G4double phi
 
G4double ro
 
G4double alfa
 
G4ParticleGunparticleGun
 
G4ParticleDefinitiongamma
 
G4ParticleDefinitionelectron
 
G4ParticleDefinitionpositron
 
SPrimaryParticleprimaryParticleData
 
Sparticleparticles
 
Sparticleparticle
 
int nParticle
 
int nPhSpParticles
 
int nRandomParticles
 
int idCurrentParticleSource
 
G4String sourceTypeName
 

Static Private Attributes

static CML2PrimaryGenerationActioninstance = 0
 

Detailed Description

Definition at line 65 of file ML2PrimaryGenerationAction.hh.

Constructor & Destructor Documentation

◆ CML2PrimaryGenerationAction()

CML2PrimaryGenerationAction::CML2PrimaryGenerationAction ( void  )

Definition at line 47 of file ML2PrimaryGenerationAction.cc.

Here is the caller graph for this function:

◆ ~CML2PrimaryGenerationAction()

CML2PrimaryGenerationAction::~CML2PrimaryGenerationAction ( void  )

Definition at line 108 of file ML2PrimaryGenerationAction.cc.

109 {
110  delete particleGun;
111  delete [] particles;
112  delete particles;
113 }

Member Function Documentation

◆ applySourceRotation()

void CML2PrimaryGenerationAction::applySourceRotation ( )
private

Definition at line 191 of file ML2PrimaryGenerationAction.cc.

Here is the caller graph for this function:

◆ design()

void CML2PrimaryGenerationAction::design ( G4double  accTargetZPosition)

Definition at line 80 of file ML2PrimaryGenerationAction.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fillParticlesContainer()

void CML2PrimaryGenerationAction::fillParticlesContainer ( )
private

Definition at line 196 of file ML2PrimaryGenerationAction.cc.

197 {
198  static int currentFilePosition=0;
199  static int currentFileSize=0;
200  int startDataFilePosition;
201  std::ifstream in;
203  if (in)
204  {
205  std::cout <<"ERROR phase space file: "<< calculatedPhaseSpaceFileIN << " NOT found. Run abort "<< G4endl;
207  }
208 
209  static bool bFirstTime=true;
210  if (bFirstTime)
211  {
212  in.seekg(-1,std::ios::end);
213  currentFileSize=in.tellg();
214  in.seekg(0,std::ios::beg);
215  bFirstTime=false;
216  }
217 
218  char a[1000];
219  in.getline(a,1000,'\n');
220  in.getline(a,1000,'\n');
221  startDataFilePosition=in.tellg();
222  if (currentFilePosition>0)
223  {in.seekg(currentFilePosition, std::ios::beg);}
224  int i;
225  G4double x,y,z;
226  G4int d;
227 
228  static bool checkFileRewind=false;
229  static bool bRewindTheFile=false;
230  static int nPhSpFileRewind=0;
231 
232  for (i=0;i<nMaxParticlesInRamPhaseSpace;i++)
233  {
234  if (bRewindTheFile) // to read the phase space file again to fill the container
235  {
236  in.close();
238  in.seekg(startDataFilePosition, std::ios::beg);
239  checkFileRewind=true;
240  bRewindTheFile=false;
241  std::cout<<"\n################\nI have reached the end of the phase space file "<<++nPhSpFileRewind <<" times, I rewind the file\n" << G4endl;
242  std::cout <<"loaded " <<i <<"/"<< nMaxParticlesInRamPhaseSpace<<" particles" << G4endl;
243  }
244  in >> d;
245  in >> x; in >>y; in >> z;
246 /* std::cout <<"x:" <<x << G4endl;
247  std::cout <<"y:" <<y << G4endl;
248  std::cout <<"z:" <<z << G4endl;*/
250  in >> x; in >>y; in >> z;
251  particles[i].dir.set(x,y,z);
252  in >> x;
253  particles[i].kinEnergy=x;
254  in >> d;
255  particles[i].partPDGE=d;
256  in >> d; in >> d;
257  if (in.eof()) {bRewindTheFile=true;}
258  if (checkFileRewind) {checkFileRewind=false;}
259  }
260  std::cout <<"loaded " <<i <<"/"<< nMaxParticlesInRamPhaseSpace<<" particles" << G4endl;
261  currentFilePosition=in.tellg(); // to remind the actual position in the phase space file
262  if (currentFilePosition>=currentFileSize) // to read the phase space file again
263  {currentFilePosition=startDataFilePosition;}
264  in.close();
265 }
void set(double x, double y, double z)
virtual void AbortRun(G4bool softAbort=false)
Float_t d
ifstream in
Definition: comparison.C:7
G4int partPDGE
G4ThreeVector dir
int G4int
Definition: G4Types.hh:78
Double_t y
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:79
G4ThreeVector pos
G4double kinEnergy
#define G4endl
Definition: G4ios.hh:61
double G4double
Definition: G4Types.hh:76
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GenerateFromCalculatedPhaseSpace()

void CML2PrimaryGenerationAction::GenerateFromCalculatedPhaseSpace ( )
private

Definition at line 162 of file ML2PrimaryGenerationAction.cc.

163 {
164  static bool bFirstTime=true;
165  if (bFirstTime)
166  {bFirstTime=false;fillParticlesContainer();}
167  if (nParticle==nMaxParticlesInRamPhaseSpace) // once all the particles stored in RAM hae been processed a new set is loaded
168  {
170  nParticle=0;
171  }
172 
176  switch (particles[nParticle].partPDGE)
177  {
178  case -11:
180  break;
181  case 11:
183  break;
184  case 22:
186  break;
187  }
188  nPhSpParticles++;
189  nParticle++;
190 }
G4ThreeVector dir
G4ThreeVector pos
G4double kinEnergy
void SetParticleDefinition(G4ParticleDefinition *aParticleDefinition)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GenerateFromRandom()

void CML2PrimaryGenerationAction::GenerateFromRandom ( )
private

Definition at line 146 of file ML2PrimaryGenerationAction.cc.

147 {
148  sinTheta=RandGauss::shoot(0., 0.003);
149  cosTheta=std::sqrt(1 - sinTheta*sinTheta);
151  dir.set(sinTheta*std::cos(phi), sinTheta*std::sin(phi), cosTheta);
152 
155 
156  pos.setX(ro*std::sin(alfa));
157  pos.setY(ro*std::cos(alfa));
158  pos.setZ(-(accTargetZPosition +5.)*mm); // the primary electrons are generated 5 mm before the target
161 }
void set(double x, double y, double z)
ThreeVector shoot(const G4int Ap, const G4int Af)
void setY(double)
void setZ(double)
void setX(double)
#define G4UniformRand()
Definition: Randomize.hh:97
static const double twopi
Definition: G4SIunits.hh:75
static const double mm
Definition: G4SIunits.hh:114
Here is the call graph for this function:
Here is the caller graph for this function:

◆ GeneratePrimaries()

void CML2PrimaryGenerationAction::GeneratePrimaries ( G4Event anEvent)
virtual

Implements G4VUserPrimaryGeneratorAction.

Definition at line 114 of file ML2PrimaryGenerationAction.cc.

115 {
116  static int currentRecycle=nRecycling;
117  static G4ThreeVector pos0, dir0;
118  if (currentRecycle==nRecycling)
119  {
120  currentRecycle=0;
121  switch (idCurrentParticleSource)
122  {
123  case id_randomTarget:
125  break;
126  case id_phaseSpace:
128  break;
129  }
130  pos0=pos;
131  dir0=dir;
132  }
133  currentRecycle++;
134  pos=pos0;
135  dir=dir0;
136  applySourceRotation(); // to follow the accelerator rotation
137 
140 
145 }
static const double MeV
Definition: G4SIunits.hh:211
void SetParticleMomentumDirection(G4ParticleMomentum aMomentumDirection)
virtual void GeneratePrimaryVertex(G4Event *evt)
void SetParticlePosition(G4ThreeVector aPosition)
void SetParticleEnergy(G4double aKineticEnergy)
static const double mm
Definition: G4SIunits.hh:114
G4ParticleDefinition * GetParticleDefinition() const
Here is the call graph for this function:

◆ GetInstance()

CML2PrimaryGenerationAction * CML2PrimaryGenerationAction::GetInstance ( void  )
static

Definition at line 53 of file ML2PrimaryGenerationAction.cc.

54 {
55  if (instance == 0)
56  {
58  }
59  return instance;
60 }
static CML2PrimaryGenerationAction * instance
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getNrecycling()

G4int CML2PrimaryGenerationAction::getNrecycling ( )
inline

Definition at line 96 of file ML2PrimaryGenerationAction.hh.

Here is the caller graph for this function:

◆ getSourceTypeName()

G4int CML2PrimaryGenerationAction::getSourceTypeName ( )
inline

Definition at line 97 of file ML2PrimaryGenerationAction.hh.

Here is the call graph for this function:

◆ inizialize()

void CML2PrimaryGenerationAction::inizialize ( SPrimaryParticle primaryParticleData)

Definition at line 61 of file ML2PrimaryGenerationAction.cc.

62 {
63  rm=new G4RotationMatrix();
65  particle=new Sparticle;
67 
69 
70  gamma=particleTable->FindParticle("gamma");
71  electron=particleTable->FindParticle("e-");
72  positron=particleTable->FindParticle("e+");
74 
75  primaryParticleData=pData;
76  primaryParticleData->nPrimaryParticle=0;
77  primaryParticleData->partPDGE=0;
78 }
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
CLHEP::HepRotation G4RotationMatrix
static G4ParticleTable * GetParticleTable()
CML2PrimaryGenerationActionMessenger * PrimaryGenerationActionMessenger
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setCalculatedPhaseSpaceFileIN()

void CML2PrimaryGenerationAction::setCalculatedPhaseSpaceFileIN ( G4String  val)
inline

Definition at line 82 of file ML2PrimaryGenerationAction.hh.

Here is the caller graph for this function:

◆ setGunCalculatedPhaseSpace()

void CML2PrimaryGenerationAction::setGunCalculatedPhaseSpace ( )
private

Definition at line 101 of file ML2PrimaryGenerationAction.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setGunMeanEnergy()

void CML2PrimaryGenerationAction::setGunMeanEnergy ( G4double  val)
inline

Definition at line 79 of file ML2PrimaryGenerationAction.hh.

Here is the caller graph for this function:

◆ setGunRadious()

void CML2PrimaryGenerationAction::setGunRadious ( G4double  val)
inline

Definition at line 81 of file ML2PrimaryGenerationAction.hh.

Here is the caller graph for this function:

◆ setGunRandom()

void CML2PrimaryGenerationAction::setGunRandom ( )
private

Definition at line 94 of file ML2PrimaryGenerationAction.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setGunStdEnergy()

void CML2PrimaryGenerationAction::setGunStdEnergy ( G4double  val)
inline

Definition at line 80 of file ML2PrimaryGenerationAction.hh.

Here is the caller graph for this function:

◆ setNLoopsPhSpParticles()

void CML2PrimaryGenerationAction::setNLoopsPhSpParticles ( G4int  val)
inline

◆ setNMaxParticlesInRamPhaseSpace()

void CML2PrimaryGenerationAction::setNMaxParticlesInRamPhaseSpace ( G4int  val)
inline

Definition at line 77 of file ML2PrimaryGenerationAction.hh.

77 {nMaxParticlesInRamPhaseSpace=val;std::cout<<"Current nMaxParticlesInRamPhaseSpace: " << nMaxParticlesInRamPhaseSpace<< G4endl;}
#define G4endl
Definition: G4ios.hh:61
Here is the caller graph for this function:

◆ setNRecycling()

void CML2PrimaryGenerationAction::setNRecycling ( G4int  val)
inline

Definition at line 75 of file ML2PrimaryGenerationAction.hh.

Here is the caller graph for this function:

◆ setRotation()

void CML2PrimaryGenerationAction::setRotation ( G4RotationMatrix val)
inline

Definition at line 95 of file ML2PrimaryGenerationAction.hh.

95 {rm=val;};
Here is the caller graph for this function:

◆ setSourceTypeName()

void CML2PrimaryGenerationAction::setSourceTypeName ( G4String  val)
inline

Definition at line 83 of file ML2PrimaryGenerationAction.hh.

84  {
85  sourceTypeName=val;
86  if (sourceTypeName=="randomTarget")
87  {
89  }
90  else if (sourceTypeName=="phaseSpace")
91  {
93  }
94  }
idParticleSource
Here is the caller graph for this function:

Member Data Documentation

◆ accTargetZPosition

G4double CML2PrimaryGenerationAction::accTargetZPosition
private

Definition at line 114 of file ML2PrimaryGenerationAction.hh.

◆ alfa

G4double CML2PrimaryGenerationAction::alfa
private

Definition at line 122 of file ML2PrimaryGenerationAction.hh.

◆ calculatedPhaseSpaceFileIN

G4String CML2PrimaryGenerationAction::calculatedPhaseSpaceFileIN
private

Definition at line 111 of file ML2PrimaryGenerationAction.hh.

◆ cosTheta

G4double CML2PrimaryGenerationAction::cosTheta
private

Definition at line 121 of file ML2PrimaryGenerationAction.hh.

◆ dir

G4ThreeVector CML2PrimaryGenerationAction::dir
private

Definition at line 116 of file ML2PrimaryGenerationAction.hh.

◆ ek

G4double CML2PrimaryGenerationAction::ek
private

Definition at line 117 of file ML2PrimaryGenerationAction.hh.

◆ electron

G4ParticleDefinition* CML2PrimaryGenerationAction::electron
private

Definition at line 125 of file ML2PrimaryGenerationAction.hh.

◆ gamma

G4ParticleDefinition* CML2PrimaryGenerationAction::gamma
private

Definition at line 124 of file ML2PrimaryGenerationAction.hh.

◆ GunMeanEnegy

G4double CML2PrimaryGenerationAction::GunMeanEnegy
private

Definition at line 110 of file ML2PrimaryGenerationAction.hh.

◆ GunRadious

G4double CML2PrimaryGenerationAction::GunRadious
private

Definition at line 110 of file ML2PrimaryGenerationAction.hh.

◆ GunStdEnegy

G4double CML2PrimaryGenerationAction::GunStdEnegy
private

Definition at line 110 of file ML2PrimaryGenerationAction.hh.

◆ idCurrentParticleSource

int CML2PrimaryGenerationAction::idCurrentParticleSource
private

Definition at line 129 of file ML2PrimaryGenerationAction.hh.

◆ idParticleSource

G4int CML2PrimaryGenerationAction::idParticleSource
private

Definition at line 109 of file ML2PrimaryGenerationAction.hh.

◆ instance

CML2PrimaryGenerationAction * CML2PrimaryGenerationAction::instance = 0
staticprivate

Definition at line 107 of file ML2PrimaryGenerationAction.hh.

◆ myTime

G4Timer CML2PrimaryGenerationAction::myTime
private

Definition at line 120 of file ML2PrimaryGenerationAction.hh.

◆ nLoopsPhSpParticles

G4int CML2PrimaryGenerationAction::nLoopsPhSpParticles
private

Definition at line 109 of file ML2PrimaryGenerationAction.hh.

◆ nMaxParticlesInRamPhaseSpace

G4int CML2PrimaryGenerationAction::nMaxParticlesInRamPhaseSpace
private

Definition at line 109 of file ML2PrimaryGenerationAction.hh.

◆ nParticle

int CML2PrimaryGenerationAction::nParticle
private

Definition at line 129 of file ML2PrimaryGenerationAction.hh.

◆ nPhSpParticles

int CML2PrimaryGenerationAction::nPhSpParticles
private

Definition at line 129 of file ML2PrimaryGenerationAction.hh.

◆ nRandomParticles

int CML2PrimaryGenerationAction::nRandomParticles
private

Definition at line 129 of file ML2PrimaryGenerationAction.hh.

◆ nRecycling

G4int CML2PrimaryGenerationAction::nRecycling
private

Definition at line 109 of file ML2PrimaryGenerationAction.hh.

◆ particle

Sparticle * CML2PrimaryGenerationAction::particle
private

Definition at line 128 of file ML2PrimaryGenerationAction.hh.

◆ particleGun

G4ParticleGun* CML2PrimaryGenerationAction::particleGun
private

Definition at line 123 of file ML2PrimaryGenerationAction.hh.

◆ particles

Sparticle* CML2PrimaryGenerationAction::particles
private

Definition at line 128 of file ML2PrimaryGenerationAction.hh.

◆ phi

G4double CML2PrimaryGenerationAction::phi
private

Definition at line 121 of file ML2PrimaryGenerationAction.hh.

◆ pos

G4ThreeVector CML2PrimaryGenerationAction::pos
private

Definition at line 116 of file ML2PrimaryGenerationAction.hh.

◆ positron

G4ParticleDefinition* CML2PrimaryGenerationAction::positron
private

Definition at line 126 of file ML2PrimaryGenerationAction.hh.

◆ PrimaryGenerationActionMessenger

CML2PrimaryGenerationActionMessenger* CML2PrimaryGenerationAction::PrimaryGenerationActionMessenger
private

Definition at line 113 of file ML2PrimaryGenerationAction.hh.

◆ primaryParticleData

SPrimaryParticle* CML2PrimaryGenerationAction::primaryParticleData
private

Definition at line 127 of file ML2PrimaryGenerationAction.hh.

◆ rm

G4RotationMatrix* CML2PrimaryGenerationAction::rm
private

Definition at line 118 of file ML2PrimaryGenerationAction.hh.

◆ ro

G4double CML2PrimaryGenerationAction::ro
private

Definition at line 122 of file ML2PrimaryGenerationAction.hh.

◆ sinTheta

G4double CML2PrimaryGenerationAction::sinTheta
private

Definition at line 121 of file ML2PrimaryGenerationAction.hh.

◆ sourceTypeName

G4String CML2PrimaryGenerationAction::sourceTypeName
private

Definition at line 130 of file ML2PrimaryGenerationAction.hh.


The documentation for this class was generated from the following files: