Geant4 Cross Reference |
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 // Hadrontherapy advanced example for Geant4 27 // See more at: https://twiki.cern.ch/twiki/bin/view/Geant4/AdvancedExamplesHadrontherapy 28 29 #ifndef HadrontherapyLet_h 30 #define HadrontherapyLet_h 1 31 #endif 32 33 #include "G4ParticleDefinition.hh" 34 #include "globals.hh" 35 #include <fstream> 36 #include <vector> 37 #include <string> 38 39 #include "HadrontherapyMatrix.hh" 40 struct ionLet 41 { 42 G4bool isPrimary; // True if particle is primary 43 G4int PDGencoding; // Particle data group id for the particle 44 G4String fullName; // AZ[excitation energy]: like He3[1277.4], He4[0.0], Li7[231.4], ... 45 G4String name; // simple name without excitation energy: He3, He4, Li7, ... 46 G4int Z; // atomic number 47 G4int A; // mass number 48 G4double *letDN , *letDD, *letTN , *letTD; // Track averaged LET and Dose averaged LET 49 //friend G4bool operator<(const ionLet& a, const ionLet& b) {return (a.Z == b.Z) ? b.A < a.A : b.Z < a.Z ;} 50 G4bool operator<(const ionLet& a) const{return (this->Z == a.Z) ? this-> A < a.A : this->Z < a.Z ;} 51 // For isotopes sort by the mass number, else sort by the atomic one. 52 }; 53 54 class G4Material; 55 class HadrontherapyMatrix; 56 class HadrontherapyPrimaryGeneratorAction; 57 class HadrontherapyInteractionParameters; 58 class HadrontherapyDetectorConstruction; 59 60 class HadrontherapyLet 61 { 62 private: 63 HadrontherapyLet(HadrontherapyDetectorConstruction*); 64 65 public: 66 ~HadrontherapyLet(); 67 static HadrontherapyLet* GetInstance(HadrontherapyDetectorConstruction*); 68 static HadrontherapyLet* GetInstance(); 69 static G4bool doCalculation; 70 void Initialize(); 71 void Clear(); 72 73 void Fill(G4int i, G4int j, G4int k, G4double DE, G4double DX); 74 void FillEnergySpectrum (G4int trackID, 75 G4ParticleDefinition* particleDef, 76 G4double ekinMean, 77 const G4Material* mat, 78 G4double DE, 79 G4double DEEletrons, 80 G4double DX, 81 G4int i, G4int j, G4int k); 82 void LetOutput(); 83 void StoreLetAscii(); 84 85 86 private: 87 static HadrontherapyLet *instance; 88 HadrontherapyPrimaryGeneratorAction* pPGA; 89 // Detector material 90 G4Material* detectorMat; 91 G4double density; 92 G4String filename; 93 94 std::ofstream ofs; 95 std::ofstream stopFile; 96 HadrontherapyMatrix *matrix; 97 G4int nVoxels, numberOfVoxelAlongX, numberOfVoxelAlongY, numberOfVoxelAlongZ ; 98 G4double primaryEnergy, energyLimit, binWidth; 99 G4int nBins; 100 G4double nT, dT, nD, dD; 101 G4double nSecondaryT, nSecondaryD, dSecondaryT, dSecondaryD; 102 G4double nPrimaryT, nPrimaryD, dPrimaryT, dPrimaryD ; 103 G4double *secondaryLetT, *secondaryLetD, *totalLetT, *DtotalLetT , *DtotalLetD, *totalLetD; 104 G4String nome_file; 105 106 std::vector<ionLet> ionLetStore; 107 }; 108