Geant4 Cross Reference |
1 // ******************************************* 1 // ******************************************************************** 2 // * License and Disclaimer 2 // * License and Disclaimer * 3 // * 3 // * * 4 // * The Geant4 software is copyright of th 4 // * The Geant4 software is copyright of the Copyright Holders of * 5 // * the Geant4 Collaboration. It is provided 5 // * the Geant4 Collaboration. It is provided under the terms and * 6 // * conditions of the Geant4 Software License 6 // * conditions of the Geant4 Software License, included in the file * 7 // * LICENSE and available at http://cern.ch/ 7 // * LICENSE and available at http://cern.ch/geant4/license . These * 8 // * include a list of copyright holders. 8 // * include a list of copyright holders. * 9 // * 9 // * * 10 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 11 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 12 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 13 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 14 // * use. Please see the license in the file 14 // * use. Please see the license in the file LICENSE and URL above * 15 // * for the full disclaimer and the limitatio 15 // * for the full disclaimer and the limitation of liability. * 16 // * 16 // * * 17 // * This code implementation is the result 17 // * This code implementation is the result of the scientific and * 18 // * technical work of the GEANT4 collaboratio 18 // * technical work of the GEANT4 collaboration. * 19 // * By using, copying, modifying or distri 19 // * By using, copying, modifying or distributing the software (or * 20 // * any work based on the software) you ag 20 // * any work based on the software) you agree to acknowledge its * 21 // * use in resulting scientific publicati 21 // * use in resulting scientific publications, and indicate your * 22 // * acceptance of all terms of the Geant4 Sof 22 // * acceptance of all terms of the Geant4 Software license. * 23 // ******************************************* 23 // ******************************************************************** 24 24 25 //GEANT4 - Depth-of-Interaction enabled Positr 25 //GEANT4 - Depth-of-Interaction enabled Positron emission tomography (PET) advanced example 26 26 27 //Authors and contributors 27 //Authors and contributors 28 28 29 // Author list to be updated, with names of co 29 // Author list to be updated, with names of co-authors and contributors from National Institute of Radiological Sciences (NIRS) 30 30 31 // Abdella M. Ahmed (1, 2), Andrew Chacon (1, 31 // Abdella M. Ahmed (1, 2), Andrew Chacon (1, 2), Harley Rutherford (1, 2), 32 // Hideaki Tashima (3), Go Akamatsu (3), Akram 32 // Hideaki Tashima (3), Go Akamatsu (3), Akram Mohammadi (3), Eiji Yoshida (3), Taiga Yamaya (3) 33 // Susanna Guatelli (2), and Mitra Safavi-Naei 33 // Susanna Guatelli (2), and Mitra Safavi-Naeini (1, 2) 34 34 35 // (1) Australian Nuclear Science and Technolo 35 // (1) Australian Nuclear Science and Technology Organisation, Australia 36 // (2) University of Wollongong, Australia 36 // (2) University of Wollongong, Australia 37 // (3) National Institute of Radiological Scie 37 // (3) National Institute of Radiological Sciences, Japan 38 38 >> 39 >> 40 >> 41 //#include "doiPETGlobalParameters.hh" 39 #include "doiPETDetectorConstruction.hh" 42 #include "doiPETDetectorConstruction.hh" 40 #include "doiPETPhysicsList.hh" 43 #include "doiPETPhysicsList.hh" 41 #include "doiPETAnalysis.hh" 44 #include "doiPETAnalysis.hh" 42 #include "doiPETActionInitialization.hh" 45 #include "doiPETActionInitialization.hh" >> 46 43 #include "Randomize.hh" 47 #include "Randomize.hh" 44 #include "G4UImanager.hh" 48 #include "G4UImanager.hh" 45 #include "G4VisExecutive.hh" 49 #include "G4VisExecutive.hh" 46 #include "G4UIExecutive.hh" 50 #include "G4UIExecutive.hh" 47 #include "G4SystemOfUnits.hh" 51 #include "G4SystemOfUnits.hh" 48 #include "G4RunManagerFactory.hh" << 52 49 // << 53 #ifdef G4MULTITHREADED >> 54 #include "G4MTRunManager.hh" >> 55 #else >> 56 #include "G4RunManager.hh" >> 57 #endif >> 58 50 ////////////////////////////////////////////// 59 ////////////////////////////////////////////////////////////////////////////// 51 60 52 int main(int argc,char** argv) 61 int main(int argc,char** argv) 53 { 62 { 54 auto* runManager = G4RunManagerFactory::Crea << 63 // Choose the Random engine 55 G4int nThreads = 4; << 64 G4Random::setTheEngine(new CLHEP::RanecuEngine); 56 runManager->SetNumberOfThreads(nThreads); << 65 57 << 66 #ifdef G4MULTITHREADED 58 G4UIExecutive* ui = 0; << 67 59 if ( argc == 1 ) { << 68 G4MTRunManager* runManager = new G4MTRunManager; 60 ui = new G4UIExecutive(argc, argv); << 69 runManager->SetNumberOfThreads(4); // Is equal to 2 by default 61 } << 70 #else 62 << 71 63 //Initialize analysis << 72 G4RunManager* runManager = new G4RunManager; 64 doiPETAnalysis* ptrAnalysis = doiPETAnalysis << 73 #endif 65 74 66 runManager->SetUserInitialization(new doiPET << 75 runManager->SetUserInitialization(new doiPETDetectorConstruction); 67 76 68 runManager->SetUserInitialization(new doiPET << 77 runManager->SetUserInitialization(new doiPETPhysicsList); 69 78 70 // Set user action initialization 79 // Set user action initialization 71 runManager->SetUserInitialization(new doiPET << 80 runManager->SetUserInitialization(new doiPETActionInitialization()); >> 81 >> 82 //Initialize analysis >> 83 doiPETAnalysis* ptrAnalysis = doiPETAnalysis::GetInstance(); >> 84 72 85 73 G4double act = 1000000 * becquerel;//Activi 86 G4double act = 1000000 * becquerel;//Activity is set via run.mac file 74 ptrAnalysis->SetActivity(act); 87 ptrAnalysis->SetActivity(act); 75 88 76 G4double halfLife = 109.771 * 60 * s; //Half 89 G4double halfLife = 109.771 * 60 * s; //Halflife of F-18 as a default 77 ptrAnalysis -> SetIsotopeHalfLife(halfLife); 90 ptrAnalysis -> SetIsotopeHalfLife(halfLife); 78 91 79 //Blurring specification of the scanner. see 92 //Blurring specification of the scanner. see inputParameter.txt 80 ptrAnalysis -> BlurringParameters(); 93 ptrAnalysis -> BlurringParameters(); 81 94 82 //Open file to write the output of the simul 95 //Open file to write the output of the simulation 83 ptrAnalysis->Open("result"); //file extentio 96 ptrAnalysis->Open("result"); //file extention is affixed based on the type of the output (.root for root or .data for ascii) 84 97 85 98 86 // 99 // 87 ptrAnalysis -> PMTPosition(); 100 ptrAnalysis -> PMTPosition(); 88 //Read reflector pattern from the inputParam 101 //Read reflector pattern from the inputParameter.txt file 89 ptrAnalysis->ReadReflectorPattern(); 102 ptrAnalysis->ReadReflectorPattern(); 90 103 91 // Get the pointer to the User Interface man 104 // Get the pointer to the User Interface manager 92 G4UImanager* UImanager = G4UImanager::GetUIp << 105 G4UImanager* UI = G4UImanager::GetUIpointer(); >> 106 93 107 94 if ( ! ui ) { << 108 95 // batch mode << 109 // Process macro or start UI session 96 G4String command = "/control/execute "; << 110 if (argc!=1) // batch mode 97 G4String fileName = argv[1]; << 111 { 98 UImanager->ApplyCommand(command+fileName); << 112 G4String command = "/control/execute "; 99 } << 113 G4String fileName = argv[1]; 100 else { << 114 UI->ApplyCommand(command+fileName); 101 // interactive mode << 115 } 102 G4VisManager* visManager = new G4VisExecutiv << 116 103 visManager->Initialize(); << 117 else //define visualization and UI terminal for interactive mode 104 UImanager->ApplyCommand("/control/execute << 118 { 105 ui->SessionStart(); << 119 G4VisManager* visManager = new G4VisExecutive; 106 delete ui; << 120 visManager->Initialize(); 107 delete visManager; << 121 108 } << 122 G4UIExecutive * ui = new G4UIExecutive(argc,argv); >> 123 ui->SessionStart(); >> 124 delete ui; >> 125 >> 126 // >> 127 delete visManager; >> 128 } 109 129 110 //close the file 130 //close the file 111 ptrAnalysis->Close(); 131 ptrAnalysis->Close(); 112 ptrAnalysis->Delete(); 132 ptrAnalysis->Delete(); 113 133 114 delete runManager; 134 delete runManager; 115 return 0; 135 return 0; 116 136 117 } 137 } 118 138 119 ////////////////////////////////////////////// 139 ////////////////////////////////////////////////////////////////////////////// 120 140 121 141