57 ExG4HbookH1Manager::~ExG4HbookH1Manager()
 
   63   std::vector<h1_booking*>::iterator it;
 
   64   for ( it = fH1BookingVector.begin(); it != fH1BookingVector.end(); it++ ) {
 
   76 void ConvertToFloat(
const std::vector<G4double>& doubleVector,
 
   77                     std::vector<float>& floatVector)
 
   79   for (
G4int i=0; i<
G4int(doubleVector.size()); ++i) 
 
   80     floatVector.push_back((
float)doubleVector[i]);
 
   95   information->
fXUnit = unit;
 
   96   information->
fYUnit = unit;
 
   97   information->
fXFcn = fcn;
 
   98   information->
fYFcn = fcn;
 
  104 h1_booking* CreateH1Booking(
const G4String& title,
 
  112   h1_booking* h1Booking = 0; 
 
  119         << 
"    User binning scheme setting was ignored." << 
G4endl 
  120         << 
"    Linear binning will be applied with given (nbins, xmin, xmax) values";
 
  124     h1Booking = 
new h1_booking(nbins, fcn(xmin), fcn(xmax)); 
 
  130     std::vector<G4double> edges;
 
  134     h1Booking = 
new h1_booking(edges); 
 
  138   h1Booking->fTitle = title;
 
  145 h1_booking* CreateH1Booking(
const G4String& title,
 
  146                    const std::vector<G4double>& edges,
 
  153   std::vector<G4double> newEdges;
 
  157   h1_booking* h1Booking = 
new h1_booking(newEdges); 
 
  161   h1Booking->fTitle = title;
 
  168 void UpdateH1Booking(h1_booking* h1Booking,
 
  183         << 
"    User binning scheme setting was ignored." << 
G4endl 
  184         << 
"    Linear binning will be applied with given (nbins, xmin, xmax) values";
 
  188     h1Booking->fNbins = nbins;
 
  189     h1Booking->fXmin = fcn(xmin);
 
  190     h1Booking->fXmax = fcn(xmax);
 
  194     ComputeEdges(nbins, xmin, xmax, fcn, binScheme, h1Booking->fEdges);
 
  201 void UpdateH1Booking(h1_booking* h1Booking,
 
  202                      const std::vector<G4double>& edges,
 
  215 void ConfigureHbookH1(tools::hbook::h1* h1,
 
  228         << 
"    User binning scheme setting was ignored." << 
G4endl 
  229         << 
"    Linear binning will be applied with given (nbins, xmin, xmax) values";
 
  233     h1->configure(nbins, fcn(xmin), fcn(xmax));
 
  237     std::vector<G4double> edges;
 
  240     std::vector<float> fedges;
 
  241     ConvertToFloat(edges, fedges); 
 
  243     h1->configure(fedges);
 
  248 void ConfigureHbookH1(tools::hbook::h1* h1,
 
  249                       const std::vector<G4double>& edges,
 
  254   std::vector<G4double> newEdges;
 
  258   std::vector<float> newFEdges;
 
  259   ConvertToFloat(newEdges, newFEdges); 
 
  261   h1->configure(newFEdges);
 
  271 void ExG4HbookH1Manager::SetH1HbookIdOffset()
 
  275   if ( fH1HbookIdOffset == -1 ) {
 
  277       fH1HbookIdOffset = 0;
 
  279       fH1HbookIdOffset = 1;
 
  281     if ( fH1HbookIdOffset > 0 ) {
 
  283       description << 
"H1 will be defined in HBOOK with ID = G4_firstHistoId + 1";
 
  284       G4Exception(
"ExG4HbookH1Manager::SetH1HbookIdOffset()",
 
  291 void ExG4HbookH1Manager::AddH1Information(
const G4String& 
name,  
 
  298   fHnManager->AddH1Information(name, unitName, fcnName, unit, fcn, binScheme);
 
  302 G4int ExG4HbookH1Manager::CreateH1FromBooking(h1_booking* h1Booking, 
 
  309     if ( fFileManager->GetHistoDirectoryName() != 
"" ) {
 
  310       G4String histoPath = 
"//PAWC/LUN1/";
 
  311       histoPath.
append(fFileManager->GetHistoDirectoryName().data());
 
  312       tools::hbook::CHCDIR(histoPath.
data(),
" ");
 
  316   G4int index = fH1Vector.size();
 
  317   G4int id = index + fFirstId;    
 
  319     info = fHnManager->GetHnInformation(
id, 
"CreateH1FromBooking");
 
  321   G4int hbookIndex = fH1HbookIdOffset + index + fFirstId;
 
  324   if ( fState.GetVerboseL4() ) 
 
  325     fState.GetVerboseL4()->Message(
"create from booking", 
"h1", info->
fName);
 
  329   tools::hbook::h1* h1 = 0; 
 
  330   if ( ! h1Booking->fEdges.size() ) {
 
  331     h1 = 
new tools::hbook::h1(
 
  332                hbookIndex, h1Booking->fTitle, 
 
  333                h1Booking->fNbins, h1Booking->fXmin, h1Booking->fXmax);
 
  337     std::vector<float> newEdges;
 
  338     ConvertToFloat(h1Booking->fEdges, newEdges); 
 
  340     h1 = 
new tools::hbook::h1(hbookIndex, h1Booking->fTitle, newEdges);
 
  343   fH1Vector.push_back(h1);
 
  346     if ( fFileManager->GetHistoDirectoryName() != 
"" ) {
 
  348       tools::hbook::CHCDIR(
"//PAWC/LUN1",
" ");
 
  353   if ( fState.GetVerboseL3() ) { 
 
  355     description << 
" name : " << info->
fName << 
" hbook index : " << hbookIndex; 
 
  356     fState.GetVerboseL3()->Message(
"create from booking", 
"h1", description);
 
  364 G4int ExG4HbookH1Manager::RegisterH1Booking(
const G4String& name, 
 
  365                                             h1_booking* h1Booking)
 
  368   G4int index = fH1BookingVector.size();  
 
  369   fH1BookingVector.push_back(h1Booking);
 
  370   fH1NameIdMap[
name] = index + fFirstId;
 
  375   return index + fFirstId;
 
  379 void ExG4HbookH1Manager::BeginCreateH1(
const G4String& name)
 
  382   if ( fState.GetVerboseL4() ) 
 
  383     fState.GetVerboseL4()->Message(
"create", 
"H1", name);
 
  387   SetH1HbookIdOffset();
 
  391 G4int ExG4HbookH1Manager::FinishCreateH1(
 
  392                                const G4String& name, h1_booking* h1Booking,
 
  397   G4int id = RegisterH1Booking(name, h1Booking);
 
  400   AddH1Information(name, unitName, fcnName, binScheme);
 
  403   if ( fFileManager->IsFile() ) {
 
  404     CreateH1FromBooking(h1Booking);
 
  408   if ( fState.GetVerboseL2() ) { 
 
  409     G4int hbookIndex = fH1HbookIdOffset + id;
 
  411     description << 
" name : " << name << 
" hbook index : " << hbookIndex; 
 
  412     fState.GetVerboseL2()->Message(
"create", 
"H1", description);
 
  420 G4bool ExG4HbookH1Manager::BeginSetH1(
 
  422                                h1_booking* h1Booking,
 
  425   h1Booking = GetH1Booking(
id, 
false);
 
  428     description << 
"      " << 
"histogram " << 
id << 
" does not exist.";
 
  434   info = fHnManager->GetHnInformation(
id,
"SetH1");
 
  436   if ( fState.GetVerboseL4() ) 
 
  437     fState.GetVerboseL4()->Message(
"configure", 
"H1", info->
fName);
 
  444 G4bool ExG4HbookH1Manager::FinishSetH1(
 
  452   UpdateH1Information(info, unitName, fcnName, binScheme);
 
  455   fHnManager->SetActivation(
id, 
true); 
 
  462 void ExG4HbookH1Manager::CreateH1sFromBooking()
 
  468   if ( fH1Vector.size() || ( fH1BookingVector.size() == 0 ) ) 
return;       
 
  471   if ( fFileManager->GetHistoDirectoryName() != 
"" ) {
 
  472     G4String histoPath = 
"//PAWC/LUN1/";
 
  473     histoPath.
append(fFileManager->GetHistoDirectoryName().data());
 
  474     tools::hbook::CHCDIR(histoPath.
data(),
" ");
 
  478   std::vector<h1_booking*>::const_iterator it;
 
  479   for ( it = fH1BookingVector.begin(); it != fH1BookingVector.end(); ++it) {
 
  480     CreateH1FromBooking(*it, 
false);
 
  484   if ( fFileManager->GetHistoDirectoryName() != 
"" ) {
 
  486     tools::hbook::CHCDIR(
"//PAWC/LUN1",
" ");
 
  491 void ExG4HbookH1Manager::Reset()
 
  496   std::vector<tools::hbook::h1*>::iterator it;
 
  497   for (it = fH1Vector.begin(); it != fH1Vector.end(); it++ ) {
 
  506 h1_booking*  ExG4HbookH1Manager::GetH1Booking(
G4int id, 
G4bool warn)
 const  
  508   G4int index = 
id - fFirstId;
 
  509   if ( index < 0 || index >= 
G4int(fH1BookingVector.size()) ) {
 
  512       description << 
"      " << 
"histo " << 
id << 
" does not exist.";
 
  513       G4Exception(
"G4HbookAnalysisManager::GetH1Booking()",
 
  519   return fH1BookingVector[index];
 
  527 G4bool ExG4HbookH1Manager::WriteOnAscii(std::ofstream& output)
 
  535   for ( 
G4int i=0; i<
G4int(fH1Vector.size()); ++i ) {
 
  536     G4int id = i + fFirstId;
 
  538       = fHnManager->GetHnInformation(
id, 
"WriteOnAscii"); 
 
  540     if ( ! info->
fAscii ) 
continue; 
 
  541     tools::hbook::h1* h1 = fH1Vector[i];
 
  544     if ( fState.GetVerboseL3() ) 
 
  545       fState.GetVerboseL3()->Message(
"write on ascii", 
"h1", info->
fName);
 
  548     output << 
"\n  1D histogram " << 
id << 
": " << h1->title() 
 
  549            << 
"\n \n \t     X \t\t     Y" << 
G4endl;
 
  551     for (
G4int j=0; j< 
G4int(h1->axis().bins()); ++j) {
 
  552        output << 
"  " << j << 
"\t"  
  553               << h1->axis().bin_center(j) << 
"\t" 
  554               << h1->bin_height(j) << 
G4endl;
 
  562 tools::hbook::h1*  ExG4HbookH1Manager::GetH1InFunction(
G4int id, 
 
  564                                       G4bool onlyIfActive)
 const 
  566   G4int index = 
id - fFirstId;
 
  567   if ( index < 0 || index >= 
G4int(fH1Vector.size()) ) {
 
  569       G4String inFunction = 
"ExG4HbookH1Manager::";
 
  570       inFunction += functionName;
 
  572       description << 
"      " << 
"histogram " << 
id << 
" does not exist.";
 
  579   if ( fState.GetIsActivation() && onlyIfActive && ( ! fHnManager->GetActivation(
id) ) ) {
 
  583   return fH1Vector[index];
 
  591 G4int ExG4HbookH1Manager::CreateH1(
 
  602   h1_booking* h1Booking 
 
  603     = CreateH1Booking(title, nbins, xmin, xmax, unitName, fcnName, binScheme);
 
  605   return FinishCreateH1(name, h1Booking, unitName, fcnName, binScheme); 
 
  609 G4int ExG4HbookH1Manager::CreateH1(
 
  611                                const std::vector<G4double>& edges,
 
  618   h1_booking* h1Booking 
 
  619     = CreateH1Booking(title, edges, unitName, fcnName);
 
  621   return FinishCreateH1(name, h1Booking, unitName, fcnName, 
kUserBinScheme); 
 
  632   h1_booking* h1Booking = 0;
 
  635   if ( ! BeginSetH1(
id, h1Booking, info) ) 
return false; 
 
  640   UpdateH1Booking(h1Booking, 
 
  641                   nbins, xmin, xmax, unitName, fcnName, binScheme);
 
  644   if ( fH1Vector.size() ) {
 
  645     tools::hbook::h1* h1 = GetH1(
id);
 
  646     ConfigureHbookH1(h1, nbins, xmin, xmax, fcnName, binScheme);
 
  649   return FinishSetH1(
id, info, unitName, fcnName, binScheme);
 
  654                                const std::vector<G4double>& edges,
 
  658   h1_booking* h1Booking = 0;
 
  661   if ( ! BeginSetH1(
id, h1Booking, info) ) 
return false; 
 
  664   UpdateH1Booking(h1Booking, edges, unitName, fcnName);
 
  667   if ( fH1Vector.size() ) {
 
  668     tools::hbook::h1* h1 = GetH1(
id);
 
  669     ConfigureHbookH1(h1, edges, fcnName);
 
  679   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"ScaleH1", 
false, 
false);
 
  680   if ( ! h1 ) 
return false;
 
  682   return h1->scale(factor);
 
  688   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"FillH1", 
true, 
false);
 
  689   if ( ! h1 ) 
return false;
 
  691   if ( fState.GetIsActivation() && ( ! fHnManager->GetActivation(
id) ) ) {
 
  699   if ( fState.GetVerboseL4() ) {
 
  701     description << 
" id " << 
id << 
" value " << value;
 
  702     fState.GetVerboseL4()->Message(
"fill", 
"H1", description);
 
  709 tools::hbook::h1*  ExG4HbookH1Manager::GetH1(
G4int id, 
G4bool warn,
 
  710                                              G4bool onlyIfActive)
 const  
  712   return GetH1InFunction(
id, 
"GetH1", warn, onlyIfActive);
 
  718   std::map<G4String, G4int>::const_iterator it = fH1NameIdMap.find(name);
 
  719   if ( it ==  fH1NameIdMap.end() ) {  
 
  721       G4String inFunction = 
"ExG4HbookH1Manager::GetH1Id";
 
  723       description << 
"      " << 
"histogram " << name << 
" does not exist.";
 
  732 G4int ExG4HbookH1Manager::GetH1Nbins(
G4int id)
 const 
  734   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"GetH1Nbins");
 
  735   if ( ! h1 ) 
return 0;
 
  737   return h1->axis().bins();
 
  745   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"GetH1Xmin");
 
  746   if ( ! h1 ) 
return 0;
 
  749   return info->
fXFcn(h1->axis().lower_edge()*info->
fXUnit);
 
  755   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"GetH1Xmax");
 
  756   if ( ! h1 ) 
return 0;
 
  759   return info->
fXFcn(h1->axis().upper_edge()*info->
fXUnit);
 
  765   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"GetH1XWidth", 
true, 
false);
 
  766   if ( ! h1 ) 
return 0;
 
  768   G4int nbins = h1->axis().bins();
 
  771     description << 
"    nbins = 0 (for h1 id = " << 
id << 
").";
 
  777   G4HnInformation* info = fHnManager->GetHnInformation(
id, 
"GetH1XWidth");
 
  778   return ( info->
fXFcn(h1->axis().upper_edge()) 
 
  779            - info->
fXFcn(h1->axis().lower_edge()))*info->
fXUnit/nbins;
 
  785   h1_booking* h1Booking = GetH1Booking(
id, 
false);
 
  788     description << 
"      " << 
"histogram " << 
id << 
" does not exist.";
 
  789     G4Exception(
"G4HbookAnalysisManager::SetH1Title()",
 
  794   h1Booking->fTitle = title;
 
  801   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"SetH1XAxisTitle");
 
  802   if ( ! h1 ) 
return false;
 
  804   h1->add_annotation(tools::hbook::key_axis_x_title(), title);
 
  811   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"SetH1YAxisTitle");
 
  812   if ( ! h1 ) 
return false;
 
  814   h1->add_annotation(tools::hbook::key_axis_y_title(), title);
 
  821   h1_booking* h1Booking = GetH1Booking(
id, 
false);
 
  824     description << 
"      " << 
"histogram " << 
id << 
" does not exist.";
 
  825     G4Exception(
"G4HbookAnalysisManager::GetH1Title()",
 
  830   return h1Booking->fTitle;
 
  837   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"GetH1XAxisTitle");
 
  838   if ( ! h1 ) 
return "";
 
  841   G4bool result = h1->annotation(tools::hbook::key_axis_x_title(), title);
 
  844     description << 
"    Failed to get x_axis title for h1 id = " << 
id << 
").";
 
  856   tools::hbook::h1* h1 = GetH1InFunction(
id, 
"GetH1YAxisTitle");
 
  857   if ( ! h1 ) 
return "";
 
  860   G4bool result = h1->annotation(tools::hbook::key_axis_y_title(), title);
 
  863     description << 
"    Failed to get y_axis title for h1 id = " << 
id << 
").";
 
  873 G4bool ExG4HbookH1Manager::SetH1HbookIdOffset(
G4int offset) 
 
  875   if ( fH1Vector.size() ) {
 
  878       << 
"Cannot set H1HbookIdOffset as some H1 histogramms already exist.";
 
  879     G4Exception(
"G4HbookAnalysisManager::SetH1HbookIdOffset()",
 
  884   if ( fFirstId + offset < 1 ) {
 
  886     description << 
"The first histogram HBOOK id must be >= 1.";
 
  887     G4Exception(
"G4HbookAnalysisManager::SetH1HbookIdOffset()",
 
  892   fH1HbookIdOffset = offset;
 
std::ostringstream G4ExceptionDescription
 
G4double(* G4Fcn)(G4double)
 
void UpdateTitle(G4String &title, const G4String &unitName, const G4String &fcnName)
 
G4GLOB_DLL std::ostream G4cout
 
G4double GetUnitValue(const G4String &unit)
 
Definition of the ExG4HbookH1Manager class. 
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
const char * data() const 
 
G4Fcn GetFunction(const G4String &fcnName)
 
G4String & append(const G4String &)
 
G4BinScheme GetBinScheme(const G4String &binSchemeName)
 
void ComputeEdges(G4int nbins, G4double xmin, G4double xmax, G4Fcn fcn, G4BinScheme, std::vector< G4double > &edges)
 
Definition of the ExG4HbookFileManager class.