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 27 // Author: Ivana Hrivnacova, 18/06/2013 (ivan 28 29 #include "G4HnManager.hh" 30 #include "G4HnMessenger.hh" 31 32 #include "G4AnalysisUtilities.hh" 33 #include "G4VFileManager.hh" 34 35 #include <utility> 36 37 using namespace G4Analysis; 38 using std::to_string; 39 40 //____________________________________________ 41 G4HnManager::G4HnManager(G4String hnType, cons 42 : G4BaseAnalysisManager(state), fHnType(std: 43 {} 44 45 //____________________________________________ 46 G4HnManager::~G4HnManager() 47 { 48 for ( auto info : fHnVector ) { 49 delete info; 50 } 51 } 52 53 // 54 // private methods 55 // 56 57 //____________________________________________ 58 void G4HnManager::SetActivation(G4HnInformati 59 { 60 // Set activation to a given object 61 62 // Do nothing if activation does not change 63 if ( info->GetActivation() == activation ) r 64 65 // Change activation and account it in fNofA 66 info->SetActivation(activation); 67 if (activation) { 68 fNofActiveObjects++; 69 } 70 else { 71 fNofActiveObjects--; 72 } 73 } 74 75 //____________________________________________ 76 void G4HnManager::SetPlotting(G4HnInformation 77 { 78 // Do nothing if ascii does not change 79 if ( info->GetPlotting() == plotting ) retur 80 81 // Change Plotting and account it in fNofPlo 82 info->SetPlotting(plotting); 83 if (plotting) { 84 fNofPlottingObjects++; 85 } 86 else { 87 fNofPlottingObjects--; 88 } 89 } 90 91 //____________________________________________ 92 void G4HnManager::SetFileName(G4HnInformation 93 { 94 // Do nothing if file name does not change 95 if ( info->GetFileName() == fileName ) retur 96 97 auto hnFileName = fileName; 98 auto extension = GetExtension(fileName); 99 if (extension.size() != 0u) { 100 // Check if valid extension (if present) 101 auto output = G4Analysis::GetOutput(extens 102 if ( output == G4AnalysisOutput::kNone ) { 103 Warn("The file extension " + extension + 104 fkClass, "SetFileName"); 105 return; 106 } 107 } 108 else { 109 if (fDefaultFileType.size() != 0u) { 110 //add extension if missing and file type 111 hnFileName = fileName + "." + fDefaultFi 112 } 113 } 114 115 // Save the info and account a new file name 116 info->SetFileName(hnFileName); 117 if (fFileManager) { 118 fFileManager->AddFileName(hnFileName); 119 } else { 120 Warn("Failed to set fileName " + fileName 121 " for object " + info->GetName() + ". 122 fkClass, "SetFileName"); 123 return; 124 } 125 126 if ( hnFileName != "" ) { 127 fNofFileNameObjects++; 128 } else { 129 fNofFileNameObjects--; 130 } 131 } 132 133 // 134 // public methods 135 // 136 137 //____________________________________________ 138 void G4HnManager::CreateMessenger() 139 { 140 fMessenger = std::make_unique<G4HnMessenger> 141 } 142 143 //____________________________________________ 144 void G4HnManager::AddHnInformation(G4HnInforma 145 { 146 // Add new information 147 148 fHnVector.push_back(info); 149 ++fNofActiveObjects; 150 } 151 152 //____________________________________________ 153 void G4HnManager::AddHnInformation(G4HnInforma 154 { 155 // Replace the information at 'index' positi 156 // Update new information with the previous 157 // previous histogram was deleted with 'keep 158 159 auto previousInfo = fHnVector[index]; 160 if (previousInfo->GetDeletedPair().second) { 161 info->Update(*previousInfo); 162 } 163 delete previousInfo; 164 165 fHnVector[index] = info; 166 167 if (info->GetActivation()) { ++fNofActiveObj 168 if (info->GetAscii()) { ++fNofAsciiObje 169 if (info->GetPlotting()) { ++fNofPlottingO 170 if (! info->GetFileName().empty()) { ++fNofF 171 } 172 173 //____________________________________________ 174 void G4HnManager::SetHnDeleted(G4HnInformation 175 { 176 info->SetDeleted(true, keepSetting); 177 178 if (info->GetActivation()) { --fNofActiveObj 179 if (info->GetAscii()) { --fNofAsciiObje 180 if (info->GetPlotting()) { --fNofPlottingO 181 if (! info->GetFileName().empty()) { --fNofF 182 } 183 184 //____________________________________________ 185 void G4HnManager::ClearData() 186 { 187 for ( auto info : fHnVector ) { 188 delete info; 189 } 190 fHnVector.clear(); 191 SetLockFirstId(false); 192 } 193 194 //____________________________________________ 195 G4HnInformation* G4HnManager::GetHnInformation 196 std::string_v 197 { 198 G4int index = id - fFirstId; 199 if ( index < 0 || index >= G4int(fHnVector.s 200 if ( warn ) { 201 Warn(fHnType + " histogram " + to_string 202 fkClass, functionName); 203 } 204 return nullptr; 205 } 206 return fHnVector[index]; 207 } 208 209 //____________________________________________ 210 G4HnDimensionInformation* G4HnManager::GetHnDi 211 G4int dimensio 212 std::string_vi 213 { 214 auto info = GetHnInformation(id, functionNam 215 if (info == nullptr) return nullptr; 216 217 return info->GetHnDimensionInformation(dimen 218 } 219 220 //____________________________________________ 221 G4bool G4HnManager::IsActive() const 222 { 223 return ( fNofActiveObjects > 0 ); 224 } 225 226 //____________________________________________ 227 G4bool G4HnManager::IsAscii() const 228 { 229 return ( fNofAsciiObjects > 0 ); 230 } 231 232 //____________________________________________ 233 G4bool G4HnManager::IsPlotting() const 234 { 235 return ( fNofPlottingObjects > 0 ); 236 } 237 238 //____________________________________________ 239 G4bool G4HnManager::IsFileName() const 240 { 241 return ( fNofFileNameObjects > 0 ); 242 } 243 244 //____________________________________________ 245 void G4HnManager::SetActivation(G4int id, G4b 246 { 247 // Set activation to a given object 248 249 auto info = GetHnInformation(id, "SetActivat 250 251 if (info == nullptr) return; 252 253 SetActivation(info, activation); 254 } 255 256 //____________________________________________ 257 void G4HnManager::SetActivation(G4bool activa 258 { 259 // Set activation to all objects of the given 260 261 //std::vector<G4HnInformation*>::iterator it 262 //for ( it = fHnVector.begin(); it != fHnVec 263 // G4HnInformation* info = *it; 264 265 for ( auto info : fHnVector ) { 266 SetActivation(info, activation); 267 } 268 } 269 270 //____________________________________________ 271 void G4HnManager::SetAscii(G4int id, G4bool a 272 { 273 auto info = GetHnInformation(id, "SetAscii") 274 275 if (info == nullptr) return; 276 277 // Do nothing if ascii does not change 278 if ( info->GetAscii() == ascii ) return; 279 280 // Change ascii and account it in fNofAsciiO 281 info->SetAscii(ascii); 282 if (ascii) { 283 fNofAsciiObjects++; 284 } 285 else { 286 fNofAsciiObjects--; 287 } 288 } 289 290 //____________________________________________ 291 void G4HnManager::SetPlotting(G4int id, G4boo 292 { 293 auto info = GetHnInformation(id, "SetPlottin 294 295 if (info == nullptr) return; 296 297 SetPlotting(info, plotting); 298 } 299 300 //____________________________________________ 301 void G4HnManager::SetPlotting(G4bool plotting 302 { 303 // Set plotting to all objects of the given ty 304 305 for ( auto info : fHnVector ) { 306 SetPlotting(info, plotting); 307 } 308 } 309 310 //____________________________________________ 311 void G4HnManager::SetFileName(G4int id, const 312 { 313 auto info = GetHnInformation(id, "SetFileNam 314 315 if (info == nullptr) return; 316 317 SetFileName(info, fileName); 318 } 319 320 //____________________________________________ 321 void G4HnManager::SetFileName(const G4String& 322 { 323 // Set plotting to all objects of the given ty 324 325 for ( auto info : fHnVector ) { 326 SetFileName(info, fileName); 327 } 328 } 329 330 //____________________________________________ 331 G4bool G4HnManager::SetAxisIsLog(unsigned int 332 { 333 auto info = GetHnInformation(id, "SetAxisIsL 334 335 if (info == nullptr) return false; 336 337 info->SetIsLogAxis(idim, isLog); 338 return true; 339 } 340 341 //____________________________________________ 342 G4String G4HnManager::GetName(G4int id) const 343 { 344 auto info = GetHnInformation(id, "GetName"); 345 346 if (info == nullptr) return ""; 347 348 return info->GetName(); 349 } 350 351 //____________________________________________ 352 G4double G4HnManager::GetUnit(unsigned int idi 353 { 354 auto info = GetHnDimensionInformation(id, id 355 356 if (info == nullptr) return 1.0; 357 358 return info->fUnit; 359 } 360 361 //____________________________________________ 362 G4bool G4HnManager::GetAxisIsLog(unsigned int 363 { 364 auto info = GetHnInformation(id, "GetXAxisIs 365 366 if (info == nullptr) return false; 367 368 return info->GetIsLogAxis(idim); 369 } 370 371 //____________________________________________ 372 G4bool G4HnManager::GetActivation(G4int id) co 373 { 374 auto info = GetHnInformation(id, "GetActivat 375 376 if (info == nullptr) return true; 377 378 return info->GetActivation(); 379 } 380 381 //____________________________________________ 382 G4bool G4HnManager::GetAscii(G4int id) const 383 { 384 auto info = GetHnInformation(id, "GetAscii") 385 386 if (info == nullptr) return false; 387 388 return info->GetAscii(); 389 } 390 391 //____________________________________________ 392 G4bool G4HnManager::GetPlotting(G4int id) cons 393 { 394 auto info = GetHnInformation(id, "GetPlottin 395 396 if (info == nullptr) return false; 397 398 return info->GetPlotting(); 399 } 400 401 //____________________________________________ 402 G4String G4HnManager::GetFileName(G4int id) co 403 { 404 auto info = GetHnInformation(id, "GetFileNam 405 406 if (info == nullptr) return ""; 407 408 return info->GetFileName(); 409 } 410