Geant4 Cross Reference |
>> 1 // ************************************************************************************** 1 // 2 // 2 // ******************************************* << 3 // HADRONTHERAPY: a Geant4-based application for proton/ion-therapy studies 3 // * License and Disclaimer << 4 // _________________________________________________________________________ 4 // * << 5 // * The Geant4 software is copyright of th << 6 // * the Geant4 Collaboration. It is provided << 7 // * conditions of the Geant4 Software License << 8 // * LICENSE and available at http://cern.ch/ << 9 // * include a list of copyright holders. << 10 // * << 11 // * Neither the authors of this software syst << 12 // * institutes,nor the agencies providing fin << 13 // * work make any representation or warran << 14 // * regarding this software system or assum << 15 // * use. Please see the license in the file << 16 // * for the full disclaimer and the limitatio << 17 // * << 18 // * This code implementation is the result << 19 // * technical work of the GEANT4 collaboratio << 20 // * By using, copying, modifying or distri << 21 // * any work based on the software) you ag << 22 // * use in resulting scientific publicati << 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* << 25 // 5 // 26 // Hadrontherapy advanced example for Geant4 << 6 // This is the FULL version of the Hadrontherapy application. 27 // See more at: https://twiki.cern.ch/twiki/bi << 7 // It is based on the Geant4 toolkit classes and released under the GPL3 license. >> 8 // >> 9 // Its basic version is released and maintained inside the Geant4 code >> 10 // as Advanced Example. >> 11 // >> 12 // To compile and run Hadrontherapy you only require the installation of Geant4 and, >> 13 // if you wish, the ROOT ananlysis program. >> 14 // >> 15 // For more information see the documentation at http://sites.google.com/site/hadrontherapy/ >> 16 // or contact cirrone@lns.infn.it >> 17 // >> 18 // ************************************************************************************** 28 19 29 #include "HadrontherapyPrimaryGeneratorAction. 20 #include "HadrontherapyPrimaryGeneratorAction.hh" 30 #include "HadrontherapyPrimaryGeneratorMesseng 21 #include "HadrontherapyPrimaryGeneratorMessenger.hh" 31 << 22 #include "HadrontherapyAnalysisManager.hh" 32 #include "HadrontherapyMatrix.hh" << 33 #include "HadrontherapyDetectorSD.hh" << 34 #include "G4SystemOfUnits.hh" 23 #include "G4SystemOfUnits.hh" 35 #include "G4Event.hh" 24 #include "G4Event.hh" 36 #include "G4ParticleGun.hh" 25 #include "G4ParticleGun.hh" 37 #include "G4GeneralParticleSource.hh" 26 #include "G4GeneralParticleSource.hh" 38 #include "G4ParticleTable.hh" 27 #include "G4ParticleTable.hh" 39 #include "G4ParticleDefinition.hh" 28 #include "G4ParticleDefinition.hh" 40 #include "Randomize.hh" 29 #include "Randomize.hh" 41 #include "G4IonTable.hh" << 42 << 43 << 44 #include "G4VUserPrimaryGeneratorAction.hh" << 45 #include "G4ParticleTable.hh" << 46 << 47 #include "G4Event.hh" << 48 #include "G4Timer.hh" << 49 << 50 #include "G4RunManager.hh" << 51 << 52 << 53 30 54 ////////////////////////////////////////////// 31 ///////////////////////////////////////////////////////////////////////////// 55 HadrontherapyPrimaryGeneratorAction::Hadronthe << 32 HadrontherapyPrimaryGeneratorAction::HadrontherapyPrimaryGeneratorAction() 56 fNewSource(false) << 57 { 33 { 58 PrimaryGeneratorMessenger = new Hadronther << 34 59 particleGun = new G4GeneralParticleSource( << 35 SetDefaultPrimaryParticle(); 60 calculatedPhaseSpaceFileIN = "NULL"; << 36 61 } << 37 // Definition of the General particle Source >> 38 particleGun = new G4GeneralParticleSource(); >> 39 } 62 40 63 ////////////////////////////////////////////// 41 ///////////////////////////////////////////////////////////////////////////// 64 HadrontherapyPrimaryGeneratorAction::~Hadronth 42 HadrontherapyPrimaryGeneratorAction::~HadrontherapyPrimaryGeneratorAction() 65 { 43 { 66 delete PrimaryGeneratorMessenger; << 44 delete particleGun; 67 delete particleGun; << 45 68 } 46 } 69 47 70 ////////////////////////////////////////////// 48 ///////////////////////////////////////////////////////////////////////////// 71 void HadrontherapyPrimaryGeneratorAction::Gene << 49 void HadrontherapyPrimaryGeneratorAction::SetDefaultPrimaryParticle() 72 { << 50 { 73 if(fNewSource==true) << 51 74 { << 75 std::ifstream in(calculatedPhaseSpaceFil << 76 G4double e, xpos, ypos, zpos,dirx,diry,d << 77 G4int PDG; << 78 G4ThreeVector pos,dir; << 79 << 80 if(in.eof()) << 81 { << 82 G4Exception("HadrontherapyPrimaryGenerator << 83 } << 84 << 85 while(!in.eof()) << 86 { << 87 << 88 in >> e >> xpos >> ypos >>zpos >>dirx>>dir << 89 dir= G4ThreeVector(dirx,diry,dirz); << 90 particleGun->GetCurrentSource()->GetEneDis << 91 << 92 particleGun->GetCurrentSource()->GetPartic << 93 particleGun->GetCurrentSource()->GetPartic << 94 particleGun->GetCurrentSource()->GetPartic << 95 particleGun->GetCurrentSource()->GetAngDis << 96 << 97 G4ParticleDefinition* particleDef = nullpt << 98 if (PDG > 1000000000) << 99 { << 100 int a=(PDG-1000000000)-(((PDG-10000000 << 101 if(a>0) << 102 { << 103 PDG=PDG-a; << 104 particleDef = G4IonTable::GetIonTable()- << 105 G4String Nome = particleDef->GetParticle << 106 } << 107 << 108 else << 109 { << 110 particleDef = G4IonTable::GetIonTable()- << 111 G4String Nome = particleDef->GetParticle << 112 } << 113 } << 114 << 115 else << 116 { << 117 particleDef = G4ParticleTable::GetPart << 118 } << 119 << 120 particleGun->GetCurrentSource()->SetPartic << 121 particleGun->GeneratePrimaryVertex(anEvent << 122 << 123 } << 124 << 125 in.close(); << 126 << 127 } << 128 else << 129 { << 130 particleGun->GeneratePrimaryVertex(anE << 131 } << 132 << 133 } 52 } 134 << 53 ///////////////////////////////////////////////////////////////////////////// >> 54 void HadrontherapyPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) >> 55 { >> 56 #ifdef G4ANALYSIS_USE_ROOT >> 57 // Increment the event counter >> 58 HadrontherapyAnalysisManager::GetInstance()->startNewEvent(); >> 59 #endif >> 60 particleGun -> GeneratePrimaryVertex( anEvent ); >> 61 } 135 62 136 63