ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MyPrimaryGeneratorActionFromFile.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file MyPrimaryGeneratorActionFromFile.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // Derived from
27 // https://twiki.cern.ch/twiki/bin/view/Geant4/QuickMigrationGuideForGeant4V10
28 // Courtesy of A. Dotti
29 //
30 // This example is provided by the Geant4-DNA collaboration
31 // Any report or published results obtained using the Geant4-DNA software
32 // shall cite the following Geant4-DNA collaboration publications:
33 // Med. Phys. 37 (2010) 4692-4708
34 // Phys. Med. 31 (2015) 861-874
35 // The Geant4-DNA web site is available at http://geant4-dna.org
36 //
39 
41 #include "MyFileReader.hh"
42 #include "DetectorConstruction.hh"
43 
44 #include "G4ParticleTable.hh"
45 #include "G4ParticleDefinition.hh"
46 #include "Randomize.hh"
47 #include "G4RandomDirection.hh"
48 #include "G4AutoLock.hh"
49 #include "G4ParticleGun.hh"
50 #include "G4String.hh"
51 #include "G4ThreeVector.hh"
52 #include "G4SystemOfUnits.hh"
53 #include "G4RunManager.hh"
54 #include "G4StateManager.hh"
55 
56 namespace { G4Mutex myPrimGenMutex = G4MUTEX_INITIALIZER; }
57 
59 
60 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
61 
64  fParticleGun(0),
65  fDetector(0)
66 {
67  fDetector =
70 
71  G4AutoLock lock(&myPrimGenMutex);
72  if( !fileReader ) fileReader = new MyFileReader();
73  fParticleGun = new G4ParticleGun(1);
75  G4ParticleDefinition* particle = particleTable->FindParticle("e-");
78 }
79 
80 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
81 
83 {
84  G4AutoLock lock(&myPrimGenMutex);
85  if( fileReader ) { delete fileReader; fileReader = 0; }
86 
88  if(fParticleGun) delete fParticleGun;
89 }
90 
91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
92 
94 {
95  //Energy is read from file
96  //
97  G4double nrj = 0;
98  if(fileReader)
99  {
100  G4AutoLock lock(&myPrimGenMutex);
101  nrj = fileReader->GetAnEvent();
102  }
104 
105  //
108 
109  G4double rx=1*m;
110  G4double ry=1*m;
111  G4double rz=1*m;
112  G4double myRadius = 0;
113 
114  do
115  {
116  rx = (2*G4UniformRand()-1)*(radius+thickness)*1.01;
117  ry = (2*G4UniformRand()-1)*(radius+thickness)*1.01;
118  rz = (2*G4UniformRand()-1)*(radius+thickness)*1.01;
119  myRadius = std::sqrt(rx*rx+ry*ry+rz*rz);
120 
121  } while (myRadius>radius+thickness || myRadius<radius) ;
122 
125 
126  //G4cout << "---> EVENT ID=" << anEvent->GetEventID()+1 << G4endl;
127  //G4cout << "---> energy/eV=" << nrj << G4endl;
128 
130 }
131 
132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
133 
135 {
136  if(requestedState == G4State_Idle)
137  {
138  if(fParticleGun != 0) return true;
139 
140  fParticleGun = new G4ParticleGun(1);
141 
142  // Define default primary
149  }
150 
151  return true;
152 }