File indexing completed on 2025-02-23 09:20:43
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 #include "B01RunAction.hh"
0032
0033 #include "B01Run.hh"
0034
0035
0036 #include "B01DetectorConstruction.hh"
0037
0038 #include "G4RunManager.hh"
0039 #include "G4THitsMap.hh"
0040 #include "G4UnitsTable.hh"
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051 B01RunAction::B01RunAction()
0052 : G4UserRunAction(),
0053
0054 fFieldValue(14)
0055 {
0056
0057
0058 fSDName.push_back(G4String("ConcreteSD"));
0059 }
0060
0061
0062
0063
0064 B01RunAction::~B01RunAction()
0065 {
0066 fSDName.clear();
0067 }
0068
0069
0070
0071 G4Run* B01RunAction::GenerateRun()
0072 {
0073
0074
0075
0076 return new B01Run(fSDName);
0077 }
0078
0079
0080
0081 void B01RunAction::BeginOfRunAction(const G4Run* aRun)
0082 {
0083 G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl;
0084 }
0085
0086
0087
0088 void B01RunAction::EndOfRunAction(const G4Run* aRun)
0089 {
0090 G4cout << " ###### EndOfRunAction " << G4endl;
0091
0092 B01Run* b01Run = (B01Run*)aRun;
0093
0094
0095
0096 G4RunManager* mgr = G4RunManager::GetRunManager();
0097
0098
0099 for (G4int i = 0; i < (G4int)fSDName.size(); i++) {
0100 const G4VUserDetectorConstruction* vdet = mgr->GetUserDetectorConstruction();
0101 B01DetectorConstruction* bdet = (B01DetectorConstruction*)vdet;
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117 G4THitsMap<G4double>* Collisions = b01Run->GetHitsMap(fSDName[i] + "/Collisions");
0118 G4THitsMap<G4double>* CollWeight = b01Run->GetHitsMap(fSDName[i] + "/CollWeight");
0119 G4THitsMap<G4double>* Population = b01Run->GetHitsMap(fSDName[i] + "/Population");
0120 G4THitsMap<G4double>* TrackEnter = b01Run->GetHitsMap(fSDName[i] + "/TrackEnter");
0121 G4THitsMap<G4double>* SL = b01Run->GetHitsMap(fSDName[i] + "/SL");
0122 G4THitsMap<G4double>* SLW = b01Run->GetHitsMap(fSDName[i] + "/SLW");
0123 G4THitsMap<G4double>* SLWE = b01Run->GetHitsMap(fSDName[i] + "/SLWE");
0124 G4THitsMap<G4double>* SLW_V = b01Run->GetHitsMap(fSDName[i] + "/SLW_V");
0125 G4THitsMap<G4double>* SLWE_V = b01Run->GetHitsMap(fSDName[i] + "/SLWE_V");
0126
0127 if (IsMaster()) {
0128 G4cout << "\n--------------------End of Global Run-----------------------" << G4endl;
0129 G4cout << " Number of event processed : " << aRun->GetNumberOfEvent() << G4endl;
0130 }
0131 else {
0132 G4cout << "\n--------------------End of Local Run------------------------" << G4endl;
0133 G4cout << " Number of event processed : " << aRun->GetNumberOfEvent() << G4endl;
0134 }
0135
0136 G4cout << "=============================================================" << G4endl;
0137 G4cout << "=============================================================" << G4endl;
0138
0139 std::ostream* myout = &G4cout;
0140 PrintHeader(myout);
0141
0142 for (G4int iz = 0; iz < 20; iz++) {
0143 G4double* SumCollisions = (*Collisions)[iz];
0144 G4double* SumCollWeight = (*CollWeight)[iz];
0145 G4double* Populations = (*Population)[iz];
0146 G4double* TrackEnters = (*TrackEnter)[iz];
0147 G4double* SLs = (*SL)[iz];
0148 G4double* SLWs = (*SLW)[iz];
0149 G4double* SLWEs = (*SLWE)[iz];
0150 G4double* SLW_Vs = (*SLW_V)[iz];
0151 G4double* SLWE_Vs = (*SLWE_V)[iz];
0152 if (!SumCollisions) SumCollisions = new G4double(0.0);
0153 if (!SumCollWeight) SumCollWeight = new G4double(0.0);
0154 if (!Populations) Populations = new G4double(0.0);
0155 if (!TrackEnters) TrackEnters = new G4double(0.0);
0156 if (!SLs) SLs = new G4double(0.0);
0157 if (!SLWs) SLWs = new G4double(0.0);
0158 if (!SLWEs) SLWEs = new G4double(0.0);
0159 if (!SLW_Vs) SLW_Vs = new G4double(0.0);
0160 if (!SLWE_Vs) SLWE_Vs = new G4double(0.0);
0161 G4double NumWeightedEnergy = 0.0;
0162 G4double FluxWeightedEnergy = 0.0;
0163 G4double AverageTrackWeight = 0.0;
0164 if (*SLW_Vs != 0.) NumWeightedEnergy = (*SLWE_Vs) / (*SLW_Vs);
0165 if (*SLWs != 0.) FluxWeightedEnergy = (*SLWEs) / (*SLWs);
0166 if (*SLs != 0.) AverageTrackWeight = (*SLWs) / (*SLs);
0167 G4String cname = bdet->GetCellName(iz);
0168 G4cout << std::setw(fFieldValue) << cname << " |" << std::setw(fFieldValue) << (*TrackEnters)
0169 << " |" << std::setw(fFieldValue) << (*Populations) << " |" << std::setw(fFieldValue)
0170 << (*SumCollisions) << " |" << std::setw(fFieldValue) << (*SumCollWeight) << " |"
0171 << std::setw(fFieldValue) << NumWeightedEnergy << " |" << std::setw(fFieldValue)
0172 << FluxWeightedEnergy << " |" << std::setw(fFieldValue) << AverageTrackWeight << " |"
0173 << std::setw(fFieldValue) << (*SLs) << " |" << std::setw(fFieldValue) << (*SLWs)
0174 << " |" << std::setw(fFieldValue) << (*SLW_Vs) << " |" << std::setw(fFieldValue)
0175 << (*SLWEs) << " |" << std::setw(fFieldValue) << (*SLWE_Vs) << " |" << G4endl;
0176 }
0177 G4cout << "=============================================" << G4endl;
0178 }
0179 }
0180
0181
0182
0183 void B01RunAction::PrintHeader(std::ostream* out)
0184 {
0185 std::vector<G4String> vecScoreName;
0186 vecScoreName.push_back("Tr.Entering");
0187 vecScoreName.push_back("Population");
0188 vecScoreName.push_back("Collisions");
0189 vecScoreName.push_back("Coll*WGT");
0190 vecScoreName.push_back("NumWGTedE");
0191 vecScoreName.push_back("FluxWGTedE");
0192 vecScoreName.push_back("Av.Tr.WGT");
0193 vecScoreName.push_back("SL");
0194 vecScoreName.push_back("SLW");
0195 vecScoreName.push_back("SLW_v");
0196 vecScoreName.push_back("SLWE");
0197 vecScoreName.push_back("SLWE_v");
0198
0199
0200
0201
0202
0203 *out << std::setw(fFieldValue) << "Volume"
0204 << " |";
0205 for (std::vector<G4String>::iterator it = vecScoreName.begin(); it != vecScoreName.end(); it++) {
0206
0207
0208
0209
0210
0211 *out << std::setw(fFieldValue) << (*it) << " |";
0212 }
0213 *out << G4endl;
0214 }
0215
0216
0217
0218 std::string B01RunAction::FillString(const std::string& name, char c, G4int n, G4bool back)
0219 {
0220 std::string fname("");
0221 G4int k = n - name.size();
0222 if (k > 0) {
0223 if (back) {
0224 fname = name;
0225 fname += std::string(k, c);
0226 }
0227 else {
0228 fname = std::string(k, c);
0229 fname += name;
0230 }
0231 }
0232 else {
0233 fname = name;
0234 }
0235 return fname;
0236 }
0237
0238