00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "G4CsvAnalysisManager.hh"
00031 #include "G4UnitsTable.hh"
00032
00033 #include "tools/waxml/begend"
00034 #include "tools/waxml/histos"
00035
00036 #include <iostream>
00037
00038 G4CsvAnalysisManager* G4CsvAnalysisManager::fgInstance = 0;
00039
00040
00041 G4CsvAnalysisManager* G4CsvAnalysisManager::Instance()
00042 {
00043 if ( fgInstance == 0 ) {
00044 fgInstance = new G4CsvAnalysisManager();
00045 }
00046
00047 return fgInstance;
00048 }
00049
00050
00051 G4CsvAnalysisManager::G4CsvAnalysisManager()
00052 : G4VAnalysisManager("Csv"),
00053 fFile(0),
00054 fNtuple(0),
00055 fNtupleBooking(0),
00056 fNtupleIColumnMap(),
00057 fNtupleFColumnMap(),
00058 fNtupleDColumnMap()
00059 {
00060 if ( fgInstance ) {
00061 G4ExceptionDescription description;
00062 description << " "
00063 << "G4CsvAnalysisManager already exists."
00064 << "Cannot create another instance.";
00065 G4Exception("G4CsvAnalysisManager::G4CsvAnalysisManager()",
00066 "Analysis_F001", FatalException, description);
00067 }
00068
00069 fgInstance = this;
00070 }
00071
00072
00073 G4CsvAnalysisManager::~G4CsvAnalysisManager()
00074 {
00075 delete fNtuple;
00076 delete fNtupleBooking;
00077 delete fFile;
00078
00079 fgInstance = 0;
00080 }
00081
00082
00083
00084
00085
00086
00087 tools::wcsv::ntuple::column<int>*
00088 G4CsvAnalysisManager::GetNtupleIColumn(G4int id) const
00089 {
00090 std::map<G4int, tools::wcsv::ntuple::column<int>* >::const_iterator it
00091 = fNtupleIColumnMap.find(id);
00092 if ( it == fNtupleIColumnMap.end() ) {
00093 G4ExceptionDescription description;
00094 description << " " << "column " << id << " does not exist.";
00095 G4Exception("G4CsvAnalysisManager::GetNtupleIColumn()",
00096 "Analysis_W009", JustWarning, description);
00097 return 0;
00098 }
00099
00100 return it->second;
00101 }
00102
00103
00104 tools::wcsv::ntuple::column<float>*
00105 G4CsvAnalysisManager::GetNtupleFColumn(G4int id) const
00106 {
00107 std::map<G4int, tools::wcsv::ntuple::column<float>* >::const_iterator it
00108 = fNtupleFColumnMap.find(id);
00109 if ( it == fNtupleFColumnMap.end() ) {
00110 G4ExceptionDescription description;
00111 description << " " << "column " << id << " does not exist.";
00112 G4Exception("G4CsvAnalysisManager::GetNtupleFColumn()",
00113 "Analysis_W009", JustWarning, description);
00114 return 0;
00115 }
00116
00117 return it->second;
00118 }
00119
00120
00121
00122 tools::wcsv::ntuple::column<double>*
00123 G4CsvAnalysisManager::GetNtupleDColumn(G4int id) const
00124 {
00125 std::map<G4int, tools::wcsv::ntuple::column<double>* >::const_iterator it
00126 = fNtupleDColumnMap.find(id);
00127 if ( it == fNtupleDColumnMap.end() ) {
00128 G4ExceptionDescription description;
00129 description << " " << "column " << id << " does not exist.";
00130 G4Exception("G4CsvAnalysisManager::GetNtupleDColumn()",
00131 "Analysis_W009", JustWarning, description);
00132 return 0;
00133 }
00134
00135 return it->second;
00136 }
00137
00138
00139 G4bool G4CsvAnalysisManager::Reset()
00140 {
00141 delete fNtuple;
00142 fNtuple = 0;
00143
00144 return true;
00145 }
00146
00147
00148 void G4CsvAnalysisManager::ExceptionForHistograms(
00149 const G4String& functionName) const
00150 {
00151 G4String inFunction = "G4CsvAnalysisManager::";
00152 inFunction += functionName;
00153 G4ExceptionDescription description;
00154 description << " "
00155 << "Histograms are not supported." ;
00156 G4Exception(inFunction, "Analysis_W005", JustWarning, description);
00157 }
00158
00159
00160
00161
00162
00163
00164 G4bool G4CsvAnalysisManager::WriteOnAscii(std::ofstream& )
00165 {
00166
00167
00168
00169 return true;
00170 }
00171
00172
00173
00174
00175
00176
00177 G4bool G4CsvAnalysisManager::OpenFile(const G4String& fileName)
00178 {
00179
00180 fFileName = fileName;
00181
00182
00183 G4String name(fileName);
00184 if ( name.find(".") == std::string::npos ) {
00185 name.append(".");
00186 name.append(GetFileType());
00187 }
00188
00189 #ifdef G4VERBOSE
00190 if ( fpVerboseL4 )
00191 fpVerboseL4->Message("open", "analysis file", name);
00192 #endif
00193
00194
00195 if ( fFile ) delete fFile;
00196
00197 fFile = new std::ofstream(name);
00198 if ( fFile->fail() ) {
00199 G4ExceptionDescription description;
00200 description << " " << "Cannot open file " << fileName;
00201 G4Exception("G4CsvAnalysisManager::OpenFile()",
00202 "Analysis_W001", JustWarning, description);
00203 return false;
00204 }
00205
00206
00207 if ( fNtupleBooking && ( ! fNtuple ) ) {
00208 #ifdef G4VERBOSE
00209 if ( fpVerboseL4 )
00210 fpVerboseL4->Message("create from booking", "ntuple", name);
00211 #endif
00212 fNtuple = new tools::wcsv::ntuple(*fFile, G4cerr, *fNtupleBooking);
00213 if ( fNtupleBooking->m_columns.size() ) {
00214
00215 const std::vector<tools::ntuple_booking::col_t>& columns
00216 = fNtupleBooking->m_columns;
00217 std::vector<tools::ntuple_booking::col_t>::const_iterator it;
00218 G4int index = 0;
00219 for ( it = columns.begin(); it!=columns.end(); ++it) {
00220 if ( (*it).second == tools::_cid(int(0) ) ) {
00221 G4cout << "adding int " << fNtuple->find_column<int>((*it).first) << G4endl;
00222 fNtupleIColumnMap[index++] = fNtuple->find_column<int>((*it).first);
00223 }
00224 else if( (*it).second == tools::_cid(float(0) ) ) {
00225 fNtupleFColumnMap[index++] = fNtuple->find_column<float>((*it).first);
00226 }
00227 else if((*it).second== tools::_cid(double(0))) {
00228 fNtupleDColumnMap[index++] = fNtuple->find_column<double>((*it).first);
00229 }
00230 else {
00231 G4ExceptionDescription description;
00232 description << " "
00233 << "Unsupported column type " << (*it).first;
00234 G4Exception("G4CsvAnalysisManager::OpenFile()",
00235 "Analysis_W004", JustWarning, description);
00236 }
00237 }
00238 }
00239 }
00240
00241 fLockFileName = true;
00242
00243 #ifdef G4VERBOSE
00244 if ( fpVerboseL1 )
00245 fpVerboseL1->Message("open", "analysis file", name);
00246 #endif
00247
00248 return true;
00249 }
00250
00251
00252 G4bool G4CsvAnalysisManager::Write()
00253 {
00254
00255 G4bool result = true;
00256
00257
00258 if ( IsAscii() ) {
00259 result = WriteAscii();
00260 }
00261
00262 return result;
00263 }
00264
00265
00266 G4bool G4CsvAnalysisManager::CloseFile()
00267 {
00268 G4bool result = true;
00269
00270 #ifdef G4VERBOSE
00271 if ( fpVerboseL4 )
00272 fpVerboseL4->Message("close", "file", GetFullFileName());
00273 #endif
00274
00275
00276 result = Reset();
00277 if ( ! result ) {
00278 G4ExceptionDescription description;
00279 description << " " << "Resetting data failed";
00280 G4Exception("G4CsvAnalysisManager::CloseFile()",
00281 "Analysis_W002", JustWarning, description);
00282 result = false;
00283 }
00284
00285
00286 fFile->close();
00287 fLockFileName = false;
00288
00289 #ifdef G4VERBOSE
00290 if ( fpVerboseL1 )
00291 fpVerboseL1->Message("close", "file", GetFullFileName());
00292 #endif
00293
00294 return true;
00295 }
00296
00297
00298 G4int G4CsvAnalysisManager::CreateH1(const G4String& ,
00299 const G4String& ,
00300 G4int ,
00301 G4double , G4double ,
00302 const G4String& ,
00303 const G4String& )
00304 {
00305 ExceptionForHistograms("CreateH1");
00306 return 0;
00307 }
00308
00309
00310 G4int G4CsvAnalysisManager::CreateH2(const G4String& ,
00311 const G4String& ,
00312 G4int ,
00313 G4double , G4double ,
00314 G4int ,
00315 G4double , G4double ,
00316 const G4String& ,
00317 const G4String& ,
00318 const G4String& ,
00319 const G4String& )
00320 {
00321 ExceptionForHistograms("CreateH2");
00322 return 0;
00323 }
00324
00325
00326 G4bool G4CsvAnalysisManager::SetH1(G4int ,
00327 G4int ,
00328 G4double , G4double ,
00329 const G4String& ,
00330 const G4String& )
00331 {
00332 ExceptionForHistograms("SetH1");
00333 return false;
00334 }
00335
00336
00337 G4bool G4CsvAnalysisManager::SetH2(G4int ,
00338 G4int ,
00339 G4double , G4double ,
00340 G4int ,
00341 G4double , G4double ,
00342 const G4String& ,
00343 const G4String& ,
00344 const G4String& ,
00345 const G4String& )
00346 {
00347 ExceptionForHistograms("SetH2");
00348 return false;
00349 }
00350
00351
00352 G4bool G4CsvAnalysisManager::ScaleH1(G4int , G4double )
00353 {
00354 ExceptionForHistograms("ScaleH1");
00355 return false;
00356 }
00357
00358
00359 G4bool G4CsvAnalysisManager::ScaleH2(G4int , G4double )
00360 {
00361 ExceptionForHistograms("ScaleH2");
00362 return false;
00363 }
00364
00365
00366 void G4CsvAnalysisManager::CreateNtuple(const G4String& name,
00367 const G4String& title)
00368 {
00369 if ( fNtupleBooking ) {
00370 G4ExceptionDescription description;
00371 description << " "
00372 << "Ntuple already exists. "
00373 << "(Only one ntuple is currently supported.)";
00374 G4Exception("G4CsvAnalysisManager::CreateNtuple()",
00375 "Analysis_W006", JustWarning, description);
00376 return;
00377 }
00378
00379 #ifdef G4VERBOSE
00380 if ( fpVerboseL4 )
00381 fpVerboseL4->Message("create", "ntuple", name);
00382 #endif
00383
00384
00385 fNtupleBooking = new tools::ntuple_booking();
00386 fNtupleBooking->m_name = name;
00387 fNtupleBooking->m_title = title;
00388
00389
00390
00391 if ( fFile ) {
00392 fNtuple = new tools::wcsv::ntuple(*fFile);
00393
00394 }
00395
00396 #ifdef G4VERBOSE
00397 if ( fpVerboseL2 )
00398 fpVerboseL2->Message("create", "ntuple", name);
00399 #endif
00400 }
00401
00402
00403 G4int G4CsvAnalysisManager::CreateNtupleIColumn(const G4String& name)
00404 {
00405 #ifdef G4VERBOSE
00406 if ( fpVerboseL4 )
00407 fpVerboseL4->Message("create", "ntuple I column", name);
00408 #endif
00409
00410 if ( ! fNtupleBooking ) {
00411 G4ExceptionDescription description;
00412 description << " "
00413 << "Ntuple has to be created first. ";
00414 G4Exception("G4CsvAnalysisManager::CreateNtupleIColumn()",
00415 "Analysis_W005", JustWarning, description);
00416 return -1;
00417 }
00418
00419
00420 G4int index = fNtupleBooking->m_columns.size();
00421 fNtupleBooking->add_column<int>(name);
00422
00423
00424 if ( fNtuple ) {
00425 tools::wcsv::ntuple::column<int>* column
00426 = fNtuple->create_column<int>(name);
00427 fNtupleIColumnMap[index] = column;
00428 }
00429
00430 fLockFirstNtupleColumnId = true;
00431
00432 #ifdef G4VERBOSE
00433 if ( fpVerboseL2 )
00434 fpVerboseL2->Message("create", "ntuple I column", name);
00435 #endif
00436
00437 return index + fFirstNtupleColumnId;
00438 }
00439
00440
00441 G4int G4CsvAnalysisManager::CreateNtupleFColumn(const G4String& name)
00442 {
00443 #ifdef G4VERBOSE
00444 if ( fpVerboseL4 )
00445 fpVerboseL4->Message("create", "ntuple F column", name);
00446 #endif
00447
00448 if ( ! fNtupleBooking ) {
00449 G4ExceptionDescription description;
00450 description << " "
00451 << "Ntuple has to be created first. ";
00452 G4Exception("G4CsvAnalysisManager::CreateNtupleFColumn()",
00453 "Analysis_W005", JustWarning, description);
00454 return -1;
00455 }
00456
00457
00458 G4int index = fNtupleBooking->m_columns.size();
00459 fNtupleBooking->add_column<float>(name);
00460
00461
00462 if ( fNtuple ) {
00463 tools::wcsv::ntuple::column<float>* column
00464 = fNtuple->create_column<float>(name);
00465 fNtupleFColumnMap[index] = column;
00466 }
00467
00468 fLockFirstNtupleColumnId = true;
00469
00470 #ifdef G4VERBOSE
00471 if ( fpVerboseL2 )
00472 fpVerboseL2->Message("create", "ntuple F column", name);
00473 #endif
00474
00475 return index + fFirstNtupleColumnId;
00476 }
00477
00478
00479 G4int G4CsvAnalysisManager::CreateNtupleDColumn(const G4String& name)
00480 {
00481 #ifdef G4VERBOSE
00482 if ( fpVerboseL4 )
00483 fpVerboseL4->Message("create", "ntuple D column", name);
00484 #endif
00485
00486 if ( ! fNtupleBooking ) {
00487 G4ExceptionDescription description;
00488 description << " "
00489 << "Ntuple has to be created first. ";
00490 G4Exception("G4CsvAnalysisManager::CreateNtupleDColumn()",
00491 "Analysis_W005", JustWarning, description);
00492 return -1;
00493 }
00494
00495
00496 G4int index = fNtupleBooking->m_columns.size();
00497 fNtupleBooking->add_column<double>(name);
00498
00499
00500 if ( fNtuple ) {
00501 tools::wcsv::ntuple::column<double>* column
00502 = fNtuple->create_column<double>(name);
00503 fNtupleDColumnMap[index] = column;
00504 }
00505
00506 fLockFirstNtupleColumnId = true;
00507
00508 #ifdef G4VERBOSE
00509 if ( fpVerboseL2 )
00510 fpVerboseL2->Message("create", "ntuple D column", name);
00511 #endif
00512
00513 return index + fFirstNtupleColumnId;
00514 }
00515
00516
00517 void G4CsvAnalysisManager::FinishNtuple()
00518 {
00519
00520 }
00521
00522
00523
00524 G4bool G4CsvAnalysisManager::FillH1(G4int ,
00525 G4double , G4double )
00526 {
00527 G4ExceptionDescription description;
00528 description << " "
00529 << "Histograms are not supported." ;
00530 G4Exception("G4CsvAnalysisManager::FillH1()",
00531 "Analysis_W007", JustWarning, description);
00532 return false;
00533 }
00534
00535
00536 G4bool G4CsvAnalysisManager::FillH2(G4int ,
00537 G4double , G4double ,
00538 G4double )
00539 {
00540 G4ExceptionDescription description;
00541 description << " "
00542 << "Histograms are not supported." ;
00543 G4Exception("G4CsvAnalysisManager::FillH2()",
00544 "Analysis_W007", JustWarning, description);
00545 return false;
00546 }
00547
00548
00549 G4bool G4CsvAnalysisManager::FillNtupleIColumn(G4int id, G4int value)
00550 {
00551 tools::wcsv::ntuple::column<int>* column = GetNtupleIColumn(id);
00552 if ( ! column ) {
00553 G4ExceptionDescription description;
00554 description << " " << "column " << id << " does not exist.";
00555 G4Exception("G4CsvAnalysisManager::FillNtupleIColumn()",
00556 "Analysis_W009", JustWarning, description);
00557 return false;
00558 }
00559
00560 column->fill(value);
00561 #ifdef G4VERBOSE
00562 if ( fpVerboseL4 ) {
00563 G4ExceptionDescription description;
00564 description << " id " << id << " value " << value;
00565 fpVerboseL4->Message("fill", "ntuple I column", description);
00566 }
00567 #endif
00568 return true;
00569 }
00570
00571 G4bool G4CsvAnalysisManager::FillNtupleFColumn(G4int id, G4float value)
00572 {
00573 tools::wcsv::ntuple::column<float>* column = GetNtupleFColumn(id);
00574 if ( ! column ) {
00575 G4ExceptionDescription description;
00576 description << " " << "column " << id << " does not exist.";
00577 G4Exception("G4CsvAnalysisManager::FillNtupleFColumn()",
00578 "Analysis_W009", JustWarning, description);
00579 return false;
00580 }
00581
00582 column->fill(value);
00583 #ifdef G4VERBOSE
00584 if ( fpVerboseL4 ) {
00585 G4ExceptionDescription description;
00586 description << " id " << id << " value " << value;
00587 fpVerboseL4->Message("fill", "ntuple F column", description);
00588 }
00589 #endif
00590 return true;
00591 }
00592
00593
00594 G4bool G4CsvAnalysisManager::FillNtupleDColumn(G4int id, G4double value)
00595 {
00596 tools::wcsv::ntuple::column<double>* column = GetNtupleDColumn(id);
00597 if ( ! column ) {
00598 G4ExceptionDescription description;
00599 description << " " << "column " << id << " does not exist.";
00600 G4Exception("G4CsvAnalysisManager::FillNtupleDColumn()",
00601 "Analysis_W009", JustWarning, description);
00602 return false;
00603 }
00604
00605 column->fill(value);
00606 #ifdef G4VERBOSE
00607 if ( fpVerboseL4 ) {
00608 G4ExceptionDescription description;
00609 description << " id " << id << " value " << value;
00610 fpVerboseL4->Message("fill", "ntuple D column", description);
00611 }
00612 #endif
00613 return true;
00614 }
00615
00616
00617 G4bool G4CsvAnalysisManager::AddNtupleRow()
00618 {
00619 #ifdef G4VERBOSE
00620 if ( fpVerboseL4 )
00621 fpVerboseL4->Message("add", "ntuple row", "");
00622 #endif
00623
00624 if ( ! fNtuple ) {
00625 G4ExceptionDescription description;
00626 description << " " << "ntuple does not exist. ";
00627 G4Exception("G4CsvAnalysisManager::AddNtupleRow()",
00628 "Analysis_W008", JustWarning, description);
00629 return false;
00630 }
00631
00632 fNtuple->add_row();
00633 #ifdef G4VERBOSE
00634 if ( fpVerboseL4 )
00635 fpVerboseL4->Message("add", "ntuple row", "");
00636 #endif
00637
00638 return true;
00639 }
00640
00641
00642 tools::wcsv::ntuple* G4CsvAnalysisManager::GetNtuple() const
00643 {
00644 return fNtuple;
00645 }
00646
00647
00648
00649 G4int G4CsvAnalysisManager::GetH1Nbins(G4int ) const
00650 {
00651 ExceptionForHistograms("GetH1Nbins");
00652 return 0;
00653 }
00654
00655
00656 G4double G4CsvAnalysisManager::GetH1Xmin(G4int ) const
00657 {
00658 ExceptionForHistograms("GetH1Xmin");
00659 return 0;
00660 }
00661
00662
00663 G4double G4CsvAnalysisManager::GetH1Xmax(G4int ) const
00664 {
00665 ExceptionForHistograms("GetH1Xmax");
00666 return 0;
00667 }
00668
00669
00670 G4double G4CsvAnalysisManager::GetH1Width(G4int ) const
00671 {
00672 ExceptionForHistograms("GetH1Xwidth");
00673 return 0;
00674 }
00675
00676
00677 G4int G4CsvAnalysisManager::GetH2Nxbins(G4int ) const
00678 {
00679 ExceptionForHistograms("GetH2NXbins");
00680 return 0;
00681 }
00682
00683
00684 G4double G4CsvAnalysisManager::GetH2Xmin(G4int ) const
00685 {
00686 ExceptionForHistograms("GetH2Xmin");
00687 return 0;
00688 }
00689
00690
00691 G4double G4CsvAnalysisManager::GetH2Xmax(G4int ) const
00692 {
00693 ExceptionForHistograms("GetH2Xmin");
00694 return 0;
00695 }
00696
00697
00698 G4double G4CsvAnalysisManager::GetH2XWidth(G4int ) const
00699 {
00700 ExceptionForHistograms("GetH2XWidth");
00701 return 0;
00702 }
00703
00704
00705 G4int G4CsvAnalysisManager::GetH2Nybins(G4int ) const
00706 {
00707 ExceptionForHistograms("GetH2NYbins");
00708 return 0;
00709 }
00710
00711
00712 G4double G4CsvAnalysisManager::GetH2Ymin(G4int ) const
00713 {
00714 ExceptionForHistograms("GetH2Ymin");
00715 return 0;
00716 }
00717
00718
00719 G4double G4CsvAnalysisManager::GetH2Ymax(G4int ) const
00720 {
00721 ExceptionForHistograms("GetH2Ymax");
00722 return 0;
00723 }
00724
00725
00726 G4double G4CsvAnalysisManager::GetH2YWidth(G4int ) const
00727 {
00728 ExceptionForHistograms("GetH2YWidth");
00729 return 0;
00730 }
00731
00732
00733 G4bool G4CsvAnalysisManager::SetH1Title(G4int ,
00734 const G4String& )
00735 {
00736 ExceptionForHistograms("SetH1Title");
00737 return false;
00738 }
00739
00740
00741 G4bool G4CsvAnalysisManager::SetH1XAxisTitle(G4int ,
00742 const G4String& )
00743 {
00744 ExceptionForHistograms("SetH1XAxisTitle");
00745 return false;
00746 }
00747
00748
00749 G4bool G4CsvAnalysisManager::SetH1YAxisTitle(G4int ,
00750 const G4String& )
00751 {
00752 ExceptionForHistograms("SetH1YAxisTitle");
00753 return false;
00754 }
00755
00756
00757 G4bool G4CsvAnalysisManager::SetH2Title(G4int ,
00758 const G4String& )
00759 {
00760 ExceptionForHistograms("SetH2Title");
00761 return false;
00762 }
00763
00764
00765 G4bool G4CsvAnalysisManager::SetH2XAxisTitle(G4int ,
00766 const G4String& )
00767 {
00768 ExceptionForHistograms("SetH2XAxisTitle");
00769 return false;
00770 }
00771
00772
00773 G4bool G4CsvAnalysisManager::SetH2YAxisTitle(G4int ,
00774 const G4String& )
00775 {
00776 ExceptionForHistograms("SetH2YAxisTitle");
00777 return false;
00778 }
00779
00780
00781 G4bool G4CsvAnalysisManager::SetH2ZAxisTitle(G4int ,
00782 const G4String& )
00783 {
00784 ExceptionForHistograms("SetH2ZAxisTitle");
00785 return false;
00786 }
00787
00788
00789 G4String G4CsvAnalysisManager::GetH1XAxisTitle(G4int ) const
00790 {
00791 ExceptionForHistograms("GetH1XAxisTitle");
00792 return "";
00793 }
00794
00795
00796 G4String G4CsvAnalysisManager::GetH1Title(G4int ) const
00797 {
00798 ExceptionForHistograms("GetH1Title");
00799 return "";
00800 }
00801
00802
00803 G4String G4CsvAnalysisManager::GetH1YAxisTitle(G4int ) const
00804 {
00805 ExceptionForHistograms("GetH1YAxisTitle");
00806 return "";
00807 }
00808
00809
00810
00811 G4String G4CsvAnalysisManager::GetH2Title(G4int ) const
00812 {
00813 ExceptionForHistograms("GetH2Title");
00814 return "";
00815 }
00816
00817
00818 G4String G4CsvAnalysisManager::GetH2XAxisTitle(G4int ) const
00819 {
00820 ExceptionForHistograms("GetH2XAxisTitle");
00821 return "";
00822 }
00823
00824
00825 G4String G4CsvAnalysisManager::GetH2YAxisTitle(G4int ) const
00826 {
00827 ExceptionForHistograms("GetH2YAxisTitle");
00828 return "";
00829 }
00830
00831
00832 G4String G4CsvAnalysisManager::GetH2ZAxisTitle(G4int ) const
00833 {
00834 ExceptionForHistograms("GetH2ZAxisTitle");
00835 return "";
00836 }
00837