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