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 /// \file electromagnetic/TestEm11/src/doiPETR 27 /// \brief Implementation of the doiPETRun cla 28 // 29 // $Id: doiPETRun.cc 71376 2013-06-14 07:44:50 30 // 31 //....oooOO0OOooo........oooOO0OOooo........oo 32 //....oooOO0OOooo........oooOO0OOooo........oo 33 34 #include "doiPETRun.hh" 35 #include "doiPETDetectorConstruction.hh" 36 #include "doiPETPrimaryGeneratorAction.hh" 37 38 #include "G4UnitsTable.hh" 39 #include "G4SystemOfUnits.hh" 40 #include "G4Event.hh" 41 #include "doiPETAnalysis.hh" 42 //....oooOO0OOooo........oooOO0OOooo........oo 43 44 doiPETRun::doiPETRun() 45 : G4Run() 46 { 47 // 48 totalTime = 0 * s; 49 prev_totalTime = 0 * s; 50 totalEdep = 0*keV; 51 } 52 53 //....oooOO0OOooo........oooOO0OOooo........oo 54 55 doiPETRun::~doiPETRun() 56 {} 57 58 // 59 void doiPETRun::GetIntractionInfomation(Intera 60 { 61 //The photon can have many interactions in o 62 //Save the interacting block in the associat 63 mapBlockInteraction.insert( std::multimap< G 64 65 //The following stores the block number uniq 66 setBlockInteraction.insert( step->GetBlockNo 67 } 68 69 ///////// InteractingCrystal ///////////////// 70 71 void doiPETRun::FindInteractingCrystal() 72 { 73 std::multimap< G4int, InteractionInformation 74 std::set<G4int>::iterator sitr; 75 G4int cystalIDTemp; 76 77 for(sitr=setBlockInteraction.begin(); sitr!= 78 blockID = (*sitr); 79 mitr = mapBlockInteraction.find(blockID); 80 numberofInteractions = mapBlockInteraction 81 totalEdep=edepMax=0.; 82 for(G4int i=0; i<numberofInteractions; i++ 83 edep = (*mitr).second->GetEdep(); 84 cystalIDTemp = (*mitr).second->GetCrysta 85 edep_AfterCrystalBlurring = doiPETAnalys 86 totalEdep += edep_AfterCrystalBlurring; 87 88 crystalID_vec.push_back(cystalIDTemp); 89 posInter_vec.push_back(((*mitr).second-> 90 edepInCry_vec.push_back(edep_AfterCrysta 91 92 //This is to identify the crystal with 93 if(edepMax<edep_AfterCrystalBlurring){ 94 edepMax=edep_AfterCrystalBlurring; 95 crystalID = cystalIDTemp; 96 interactionTime = (*mitr).second->GetG 97 98 //position of interaction based on hig 99 //interactionPos = (*mitr).second->Get 100 } 101 } 102 if(totalEdep==0)continue; 103 104 //The interaction position is based on ene 105 interactionPos = CenterOfMassInteractionPo 106 doiPETAnalysis::GetInstance()->ReadOut(blo 107 108 crystalID_vec.clear(); 109 posInter_vec.clear(); 110 edepInCry_vec.clear(); 111 } 112 113 } 114 115 //Apply center of mass calculation in determin 116 G4ThreeVector doiPETRun::CenterOfMassInteracti 117 posInterInCrystal = G4ThreeVector(); 118 for(std::size_t i=0; i<cryID.size();i++){ 119 posInterInCrystal += pos[i] * energyDep[i] 120 } 121 return (posInterInCrystal)/edepTotal; 122 } 123 124 125 void doiPETRun::SetAnnihilationTime(G4double t 126 timeOfAnnihil = t; 127 } 128 // 129 void doiPETRun::Clear(){ 130 //clear the content of the associative conta 131 std::multimap< G4int, InteractionInformation 132 for( mitr2= mapBlockInteraction.begin(); mit 133 delete (*mitr2).second; 134 } 135 136 mapBlockInteraction.clear(); 137 setBlockInteraction.clear(); 138 // 139 } 140 // 141 void doiPETRun::GetEventIDRun(G4int evt){ 142 eventID = evt; 143 } 144 // 145 //....oooOO0OOooo........oooOO0OOooo........oo 146 147 void doiPETRun::Merge(const G4Run* run) 148 { 149 G4Run::Merge(run); 150 } 151