Warning, file /geant4/examples/advanced/dna/cellularPhantom/src/RunAction.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 "RunAction.hh"
0044
0045 #include "G4UnitsTable.hh"
0046
0047
0048
0049 RunAction::RunAction()
0050 :G4UserRunAction()
0051 {
0052 if (isMaster)
0053 {
0054
0055 auto man = G4AnalysisManager::Instance();
0056 man->SetDefaultFileType("root");
0057 man->SetFirstNtupleId(1);
0058
0059
0060 man->CreateNtuple("ntuple1", "RED");
0061 man->CreateNtupleDColumn("x");
0062 man->CreateNtupleDColumn("y");
0063 man->CreateNtupleDColumn("z");
0064 man->CreateNtupleDColumn("energy");
0065 man->CreateNtupleDColumn("dose");
0066 man->CreateNtupleIColumn("voxelID");
0067 man->FinishNtuple();
0068
0069
0070 man->CreateNtuple("ntuple2", "GREEN");
0071 man->CreateNtupleDColumn("x");
0072 man->CreateNtupleDColumn("y");
0073 man->CreateNtupleDColumn("z");
0074 man->CreateNtupleDColumn("energy");
0075 man->CreateNtupleDColumn("dose");
0076 man->CreateNtupleIColumn("voxelID");
0077 man->FinishNtuple();
0078
0079
0080 man->CreateNtuple("ntuple3", "BLUE");
0081 man->CreateNtupleDColumn("x");
0082 man->CreateNtupleDColumn("y");
0083 man->CreateNtupleDColumn("z");
0084 man->CreateNtupleDColumn("energy");
0085 man->CreateNtupleDColumn("dose");
0086 man->CreateNtupleIColumn("voxelID");
0087 man->FinishNtuple();
0088 }
0089 }
0090
0091
0092
0093 RunAction::~RunAction()
0094 {}
0095
0096
0097
0098 G4Run* RunAction::GenerateRun()
0099 {
0100 fRun = new Run();
0101 return fRun;
0102 }
0103
0104
0105
0106 void RunAction::BeginOfRunAction(const G4Run *)
0107 {
0108 if (isMaster)
0109 {
0110
0111 auto man = G4AnalysisManager::Instance();
0112 man->OpenFile("phantom");
0113
0114
0115 fMyPhantomParam = CellParameterisation::Instance();
0116 }
0117 }
0118
0119
0120 void RunAction::EndOfRunAction(const G4Run * )
0121 {
0122 if (isMaster)
0123 {
0124
0125 fRun->EndOfRun();
0126
0127
0128 auto man = G4AnalysisManager::Instance();
0129
0130 G4double X, Y, Z;
0131
0132
0133 G4double redMassTot=0.;
0134 G4double greenMassTot=0.;
0135 G4double blueMassTot=0.;
0136
0137 redMassTot = fMyPhantomParam->GetRedMass();
0138 greenMassTot = fMyPhantomParam->GetGreenMass();
0139 blueMassTot = fMyPhantomParam->GetBlueMass();
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161 G4double cumulatedDeposit = 0;
0162
0163
0164 for (G4int i = 0; i < fMyPhantomParam->GetPhantomTotalPixels(); i++)
0165 {
0166 cumulatedDeposit = fRun->GetVoxelEdeposit(i);
0167
0168 if (cumulatedDeposit > 0.)
0169 {
0170 X = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).x()) / um;
0171 Y = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).y()) / um;
0172 Z = (fMyPhantomParam->GetVoxelThreeVectorOriginal(i).z()) / um;
0173
0174 if (fMyPhantomParam->GetMaterial(i) == 1)
0175 {
0176 man->FillNtupleDColumn(1,0,X);
0177 man->FillNtupleDColumn(1,1,Y);
0178 man->FillNtupleDColumn(1,2,Z);
0179 man->FillNtupleDColumn(1,3,cumulatedDeposit/keV);
0180 man->FillNtupleDColumn(1,4,((cumulatedDeposit/joule)/(redMassTot/kg)));
0181 man->FillNtupleIColumn(1,5,i);
0182 man->AddNtupleRow(1);
0183 }
0184 else if (fMyPhantomParam->GetMaterial(i) == 2)
0185 {
0186 man->FillNtupleDColumn(2,0,X);
0187 man->FillNtupleDColumn(2,1,Y);
0188 man->FillNtupleDColumn(2,2,Z);
0189 man->FillNtupleDColumn(2,3,cumulatedDeposit/keV);
0190 man->FillNtupleDColumn(2,4,((cumulatedDeposit/joule)/(greenMassTot/kg)));
0191 man->FillNtupleIColumn(2,5,i);
0192 man->AddNtupleRow(2);
0193 }
0194 else if (fMyPhantomParam->GetMaterial(i) == 3)
0195 {
0196 man->FillNtupleDColumn(3,0,X);
0197 man->FillNtupleDColumn(3,1,Y);
0198 man->FillNtupleDColumn(3,2,Z);
0199 man->FillNtupleDColumn(3,3,cumulatedDeposit/keV);
0200 man->FillNtupleDColumn(3,4,((cumulatedDeposit/joule)/(blueMassTot/kg)));
0201 man->FillNtupleIColumn(3,5,i);
0202 man->AddNtupleRow(3);
0203 }
0204 }
0205 }
0206
0207
0208 man->Write();
0209 man->CloseFile();
0210 man->Clear();
0211 }
0212 }