Warning, file /geant4/examples/advanced/dna/cellularPhantom/src/Run.cc was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043 #include "Run.hh"
0044
0045 #include "G4SystemOfUnits.hh"
0046 #include "G4UnitsTable.hh"
0047
0048
0049
0050 Run::Run()
0051 :G4Run()
0052 {
0053 G4int nbVoxel = CellParameterisation::Instance()->GetPhantomTotalPixels();
0054 fVoxelEdeposit = new G4double[nbVoxel];
0055 for (G4int i=0; i<nbVoxel; ++i) fVoxelEdeposit[i] = 0;
0056 }
0057
0058
0059
0060 Run::~Run()
0061 {
0062 delete[] fVoxelEdeposit;
0063 }
0064
0065
0066
0067 void Run::Merge(const G4Run* run)
0068 {
0069 const Run* localRun = static_cast<const Run*>(run);
0070
0071
0072 G4int nbVoxel = CellParameterisation::Instance()->GetPhantomTotalPixels();
0073 for (G4int i=0; i<nbVoxel; ++i)
0074 fVoxelEdeposit[i] += localRun->fVoxelEdeposit[i];
0075
0076 G4Run::Merge(run);
0077 }
0078
0079
0080
0081 void Run::EndOfRun()
0082 {
0083 G4double nrjRed=0;
0084 G4double doseRed=0;
0085 G4double nrjGreen=0;
0086 G4double doseGreen=0;
0087 G4double nrjBlue=0;
0088 G4double doseBlue=0;
0089
0090 fMyPhantomParam = CellParameterisation::Instance();
0091
0092 G4double redMassTot = fMyPhantomParam->GetRedMass();
0093 G4double greenMassTot = fMyPhantomParam->GetGreenMass();
0094 G4double blueMassTot = fMyPhantomParam->GetBlueMass();
0095
0096 for (G4int i = 0; i < fMyPhantomParam->GetPhantomTotalPixels(); i++)
0097 {
0098 if (fVoxelEdeposit[i] > 0.)
0099 {
0100 if (fMyPhantomParam->GetMaterial(i) == 1)
0101 {
0102 nrjRed=nrjRed+fVoxelEdeposit[i];
0103 doseRed=doseRed+(fVoxelEdeposit[i]/redMassTot);
0104 }
0105 else if (fMyPhantomParam->GetMaterial(i) == 2)
0106 {
0107 nrjGreen=nrjGreen+fVoxelEdeposit[i];
0108 doseGreen=doseGreen+(fVoxelEdeposit[i]/greenMassTot);
0109 }
0110 else if (fMyPhantomParam->GetMaterial(i) == 3)
0111 {
0112 nrjBlue=nrjBlue+fVoxelEdeposit[i];
0113 doseBlue=doseBlue+(fVoxelEdeposit[i]/blueMassTot);
0114 }
0115 }
0116 }
0117
0118 G4int numberVoxTot = fMyPhantomParam->GetPhantomTotalPixels();
0119 G4int numberVoxRed = fMyPhantomParam->GetRedTotalPixels();
0120 G4int numberVoxGreen = fMyPhantomParam->GetGreenTotalPixels();
0121 G4int numberVoxBlue = fMyPhantomParam->GetBlueTotalPixels();
0122
0123 G4cout << G4endl;
0124 G4cout << "- Summary --------------------------------------------------" << G4endl;
0125 G4cout << G4endl;
0126 G4cout << " Total number of voxels in phantom = " << numberVoxTot << G4endl;
0127 G4cout << " Total number of RED voxels in phantom = " << numberVoxRed << G4endl;
0128 G4cout << " Total number of GREEN voxels in phantom = " << numberVoxGreen << G4endl;
0129 G4cout << " Total number of BLUE voxels in phantom = " << numberVoxBlue << G4endl;
0130 G4cout << G4endl;
0131 G4cout << " Total absorbed energy in RED voxels (MeV) = " << nrjRed/MeV << G4endl;
0132 G4cout << " Total absorbed energy in GREEN voxels (MeV) = " << nrjGreen/MeV << G4endl;
0133 G4cout << " Total absorbed energy in BLUE voxels (MeV) = " << nrjBlue/MeV << G4endl;
0134 G4cout << G4endl;
0135 G4cout << " Total absorbed dose in RED voxels (Gy) = " << doseRed/(joule/kg) << G4endl;
0136 G4cout << " Total absorbed dose in GREEN voxels (Gy) = " << doseGreen/(joule/kg) << G4endl;
0137 G4cout << " Total absorbed dose in BLUE voxels (Gy) = " << doseBlue/(joule/kg) << G4endl;
0138 G4cout << G4endl;
0139 G4cout << "------------------------------------------------------------" << G4endl;
0140
0141 }