Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 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 // 26 // TETRunAction.cc 27 // 28 // Author: Haegin Han 29 // Reference: ICRP Publication 145. Ann. ICRP 30 // Geant4 Contributors: J. Allison and S. Guat 31 // 32 33 #include "TETRunAction.hh" 34 35 TETRunAction::TETRunAction(TETModelImport* _te 36 :fTetData(_tetData), fRun(nullptr), fNumOfEven 37 {} 38 39 G4Run* TETRunAction::GenerateRun() 40 { 41 // generate run 42 fRun = new TETRun(); 43 return fRun; 44 } 45 46 void TETRunAction::BeginOfRunAction(const G4Ru 47 { 48 // print the progress at the interval of 10% 49 fNumOfEvent=aRun->GetNumberOfEventToBeProcess 50 G4RunManager::GetRunManager()->SetPrintProgre 51 } 52 53 void TETRunAction::EndOfRunAction(const G4Run* 54 { 55 // print the result only in the Master 56 if(!isMaster) return; 57 58 // get the run ID 59 fRunID = aRun->GetRunID(); 60 61 // Print the run result by G4cout and std::of 62 // 63 // print by G4cout 64 PrintResult(G4cout); 65 66 // print by std::ofstream 67 std::ofstream ofs(fOutputFile.c_str()); 68 PrintResult(ofs); 69 ofs.close(); 70 } 71 72 void TETRunAction::PrintResult(std::ostream &o 73 { 74 // Print run result 75 // 76 using namespace std; 77 EDEPMAP edepMap = *fRun->GetEdepMap(); 78 79 out << G4endl 80 << "======================================= 81 << " Run #" << fRunID << " / Number of even 82 << "======================================= 83 << "organ ID| " 84 << setw(19) << "Organ Mass (g)" 85 << setw(19) << "Dose (Gy/source)" 86 << setw(19) << "Relative Error" << G4endl; 87 88 out.precision(3); 89 auto massMap = fTetData->GetMassMap(); 90 for(auto itr : massMap){ 91 G4double meanDose = edepMap[itr.first]. 92 G4double squareDose = edepMap[itr.first].s 93 G4double variance = ((squareDose/fNumOf 94 G4double relativeE(1); 95 if(meanDose > 0) relativeE = sqrt(varian 96 97 out << setw(8) << itr.first << "| " 98 << setw(19) << fixed << itr.second/ 99 out << setw(19) << scientific << meanDose/ 100 out << setw(19) << fixed << relativeE 101 } 102 out << "==================================== 103 } 104