Precalibrated Ion Beam Identification Detector Simulation 1.0
A pilot study detector simulation, written in C++ with Geant4.
PrimaryGeneratorAction.cc
Go to the documentation of this file.
00001 
00002 #include "PrimaryGeneratorAction.hh"
00003 
00004 #include "DetectorConstruction.hh"
00005 #include "PrimaryGeneratorMessenger.hh"
00006 
00007 
00008 #include "G4ios.hh"
00009 #include "PrimaryGeneratorAction.hh"
00010 
00011 void PrimaryGeneratorAction::SetParticle(G4int Z, G4int A, G4double E, G4double Q)
00012 {
00013   G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
00014   particleTable->GetIonTable()->CreateAllIon();
00015 
00016   G4ParticleDefinition* particle = particleTable->GetIon(Z, A, E);
00017   if(particle!=NULL)
00018     {
00019       particleGun->SetParticleCharge(Q);                                        
00020       particleGun->SetParticleDefinition(particle);
00021       myRunAction->SetParticleZ(Z);
00022       myRunAction->SetParticleA(A);
00023     }
00024 }
00025 
00026 
00027 PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* DC, RunAction* run)
00028   :Detector(DC),myRunAction(run),rndmFlag("on")
00029 {
00030   G4int n_particle = 1;
00031   particleGun  = new G4ParticleGun(n_particle);
00032   
00033   //create a messenger for this class
00034   gunMessenger = new PrimaryGeneratorMessenger(this);
00035 
00036   // default particle kinematic
00037   particleGun->SetParticleMomentumDirection(G4ThreeVector(1.,0.,0.));
00038   particleGun->SetParticleEnergy(11*GeV);                       // old value: 2.2 GeV
00039 
00040   //default particle gun position.
00041   G4double position = -(Detector->GetWorldSizeX());
00042   particleGun->SetParticlePosition(G4ThreeVector(position,0.*cm,0.*cm));
00043 }
00044 
00045 PrimaryGeneratorAction::~PrimaryGeneratorAction()
00046 {
00047   delete particleGun;
00048   delete gunMessenger;
00049 }
00050 
00051 void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
00052 {
00053   //this function is called at the begining of event
00054   // 
00055   
00056   //Always place the gun outside the world.
00057   G4double x0 = -0.45*(Detector->GetWorldSizeX());
00058   G4double y0 = 0.*cm, z0 = 0.*cm;
00059   if (rndmFlag == "on")
00060      {
00061        y0 = (Detector->GetBackScintillatorPlateSizeY())*(G4UniformRand()-0.5);
00062        z0 = (Detector->GetScintillatorBoxSizeZ())*1*(G4UniformRand()-0.5);
00063      } 
00064 
00065   particleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0));
00066 
00067   particleGun->GeneratePrimaryVertex(anEvent);
00068 
00069     /*if (rndmFlag == "on")
00070      {y0 = (Detector->GetScintillatorBoxSizeY())*12*(G4UniformRand()-0.5);
00071       z0 = (Detector->GetScintillatorBoxSizeZ())*1*(G4UniformRand()-0.5);
00072      } 
00073 
00074   particleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0));
00075 
00076   particleGun->SetParticleTime(1.0*s);
00077   particleGun->GeneratePrimaryVertex(anEvent);*/
00078 }
00079 
00080 
00081 G4ParticleGun* PrimaryGeneratorAction::GetParticleGun()
00082 {
00083         return particleGun;
00084 }
00085 
00086 void PrimaryGeneratorAction::PrintTargetSize()
00087 {
00088   G4cout << "Shooting at area: " << Detector->GetBackScintillatorPlateSizeY()/cm << "cm x " << Detector->GetScintillatorBoxSizeZ()/cm << "cm  => " << (Detector->GetBackScintillatorPlateSizeY())*(Detector->GetScintillatorBoxSizeZ())/cm/cm << "cm^2"<< G4endl;
00089 }
 All Classes Files Functions Variables Defines

Back to the main page of the Precalibrated Ion Beam Identification Detector project

Created by Rikard Lundmark