48    fNtupleHbookIdOffset(-1),
 
   49    fNtupleDescriptionVector(),
 
   55 ExG4HbookNtupleManager::~ExG4HbookNtupleManager()
 
   59   std::vector<ExG4HbookNtupleDescription*>::iterator it;  
 
   60   for (it = fNtupleDescriptionVector.begin(); it != fNtupleDescriptionVector.end(); it++ ) {
 
   70 void ExG4HbookNtupleManager::SetNtupleHbookIdOffset()
 
   74   if ( fNtupleHbookIdOffset == -1 ) {
 
   76       fNtupleHbookIdOffset = 0;
 
   78       fNtupleHbookIdOffset = 1;
 
   80     if ( fNtupleHbookIdOffset > 0 ) {
 
   82       description << 
"Ntuple will be defined in HBOOK with ID = G4_firstNtupleId + 1";
 
   83       G4Exception(
"ExG4HbookNtupleManager::SetNtupleHbookIdOffset()",
 
   90 void ExG4HbookNtupleManager::CreateNtuplesFromBooking()
 
   94   if ( ! fNtupleDescriptionVector.size() ) 
return;     
 
   97   SetNtupleHbookIdOffset();
 
  100   std::vector<ExG4HbookNtupleDescription*>::iterator itn;  
 
  101   for (itn = fNtupleDescriptionVector.begin(); itn != fNtupleDescriptionVector.end(); itn++ ) {
 
  103     tools::ntuple_booking* ntupleBooking = (*itn)->fNtupleBooking;
 
  104     if ( ! ntupleBooking ) 
continue;
 
  107     if ( fState.GetIsActivation() && ( ! (*itn)->fActivation ) ) 
continue;
 
  110     if ( fState.GetVerboseL4() ) 
 
  111       fState.GetVerboseL4()
 
  112         ->Message(
"create from booking", 
"ntuple", ntupleBooking->name());
 
  116     fFileManager->CreateNtupleDirectory();
 
  117     G4int hbookIndex = fNtupleHbookIdOffset + index + fFirstId;
 
  122       = 
new tools::hbook::wntuple(hbookIndex, 
G4cout, *ntupleBooking);
 
  123     fNtupleVector.push_back((*itn)->fNtuple);  
 
  125     if ( ntupleBooking->columns().size() ) {
 
  127       const std::vector<tools::column_booking>& columns 
 
  128         = ntupleBooking->columns();
 
  129       std::vector<tools::column_booking>::const_iterator it;
 
  131       for ( it = columns.begin(); it!=columns.end(); ++it) {
 
  132         if ( it->cls_id() == tools::_cid(
int(0) ) ) {
 
  133           (*itn)->fNtupleIColumnMap[counter++] 
 
  134             = (*itn)->fNtuple->find_column<
int>(it->name());
 
  136         else if( it->cls_id() == tools::_cid(
float(0) ) ) {
 
  137           (*itn)->fNtupleFColumnMap[counter++] 
 
  138             = (*itn)->fNtuple->find_column<
float>(it->name());
 
  140         else if(it->cls_id()== tools::_cid(
double(0))) {
 
  141           (*itn)->fNtupleDColumnMap[counter++] 
 
  142             = (*itn)->fNtuple->find_column<
double>(it->name());
 
  147                       << 
"Unsupported column type " << it->name();
 
  148           G4Exception(
"G4HbookAnalysisManager::CreateNtupleFromBooking()",
 
  155   if ( fState.GetVerboseL3() ) 
 
  156     fState.GetVerboseL3()
 
  157       ->Message(
"create from booking", 
"ntuple", ntupleBooking->name());
 
  163 tools::hbook::wntuple::column<int>*    
 
  164 ExG4HbookNtupleManager::GetNtupleIColumn(
G4int ntupleId, 
G4int columnId)
 const 
  166   ExG4HbookNtupleDescription* ntupleDecription
 
  167     = GetNtupleInFunction(ntupleId, 
"GetNtupleIColumn");
 
  168   if ( ! ntupleDecription ) 
return 0;
 
  170   std::map<G4int, tools::hbook::wntuple::column<int>* >& ntupleIColumnMap
 
  171     = ntupleDecription->fNtupleIColumnMap;
 
  172   std::map<G4int, tools::hbook::wntuple::column<int>* >::const_iterator it
 
  173     = ntupleIColumnMap.find(columnId);
 
  174   if ( it == ntupleIColumnMap.end() ) {
 
  176     description << 
"      "  << 
"ntupleId " << ntupleId
 
  177                 << 
"column " << columnId << 
" does not exist.";
 
  178     G4Exception(
"G4HbookAnalysisManager::GetNtupleIColumn()",
 
  187 tools::hbook::wntuple::column<float>*  
 
  188 ExG4HbookNtupleManager::GetNtupleFColumn(
G4int ntupleId, 
G4int columnId)
 const 
  190   ExG4HbookNtupleDescription* ntupleDecription
 
  191     = GetNtupleInFunction(ntupleId, 
"GetNtupleFColumn");
 
  192   if ( ! ntupleDecription ) 
return 0;
 
  194   std::map<G4int, tools::hbook::wntuple::column<float>* >& ntupleFColumnMap
 
  195     = ntupleDecription->fNtupleFColumnMap;
 
  196   std::map<G4int, tools::hbook::wntuple::column<float>* >::const_iterator it
 
  197     = ntupleFColumnMap.find(columnId);
 
  198   if ( it == ntupleFColumnMap.end() ) {
 
  200     description << 
"      "  << 
"ntupleId " << ntupleId
 
  201                 << 
"column " << columnId << 
" does not exist.";
 
  202     G4Exception(
"G4HbookAnalysisManager::GetNtupleFColumn()",
 
  211 tools::hbook::wntuple::column<double>* 
 
  212 ExG4HbookNtupleManager::GetNtupleDColumn(
G4int ntupleId, 
G4int columnId)
 const 
  214   ExG4HbookNtupleDescription* ntupleDecription
 
  215     = GetNtupleInFunction(ntupleId, 
"GetNtupleDColumn");
 
  216   if ( ! ntupleDecription ) 
return 0;
 
  218   std::map<G4int, tools::hbook::wntuple::column<double>* >& ntupleDColumnMap
 
  219     = ntupleDecription->fNtupleDColumnMap;
 
  220   std::map<G4int, tools::hbook::wntuple::column<double>* >::const_iterator it
 
  221     = ntupleDColumnMap.find(columnId);
 
  222   if ( it == ntupleDColumnMap.end() ) {
 
  224     description << 
"      "  << 
"ntupleId " << ntupleId
 
  225                 << 
"column " << columnId << 
" does not exist.";
 
  226     G4Exception(
"G4HbookAnalysisManager::GetNtupleDColumn()",
 
  235 void ExG4HbookNtupleManager::Reset()
 
  239   std::vector<ExG4HbookNtupleDescription*>::iterator it3;  
 
  240   for (it3 = fNtupleDescriptionVector.begin(); it3 != fNtupleDescriptionVector.end(); it3++ ) {
 
  241     delete (*it3)->fNtuple;
 
  244   fNtupleVector.clear(); 
 
  252 ExG4HbookNtupleDescription* ExG4HbookNtupleManager::GetNtupleInFunction(
 
  257   G4int index = 
id - fFirstId;
 
  258   if ( index < 0 || index >= 
G4int(fNtupleDescriptionVector.size()) ) {
 
  260       G4String inFunction = 
"G4HbookAnalysisManager::";
 
  261       inFunction += functionName;
 
  263       description << 
"      " << 
"ntuple " << 
id << 
" does not exist.";
 
  269   return fNtupleDescriptionVector[index];
 
  281   if ( fFileManager->IsFile() ) 
 
  282     fFileManager->CreateNtupleDirectory();
 
  285   if ( fState.GetVerboseL4() ) 
 
  286     fState.GetVerboseL4()->Message(
"create", 
"ntuple", name);
 
  290   G4int index = fNtupleDescriptionVector.size();
 
  291   ExG4HbookNtupleDescription* ntupleDescription
 
  292     = 
new ExG4HbookNtupleDescription();
 
  293   fNtupleDescriptionVector.push_back(ntupleDescription);  
 
  296   ntupleDescription->fNtupleBooking 
 
  297     = 
new tools::ntuple_booking(name, title);
 
  301   SetNtupleHbookIdOffset();
 
  305   if ( fFileManager->IsFile() ) {
 
  306     G4int hbookIndex = fNtupleHbookIdOffset + index + fFirstId;
 
  307     ntupleDescription->fNtuple 
 
  308       = 
new tools::hbook::wntuple(hbookIndex, name);
 
  310     fNtupleVector.push_back(ntupleDescription->fNtuple);       
 
  314   if ( fState.GetVerboseL2() ) {
 
  316     description << name << 
" ntupleId " << index + fFirstId; 
 
  317     fState.GetVerboseL2()->Message(
"create", 
"ntuple", description);
 
  321   return index + fFirstId;
 
  325 G4int ExG4HbookNtupleManager::CreateNtupleIColumn(
const G4String& name,
 
  326                                                   std::vector<int>* vector)
 
  328   G4int ntupleId = fNtupleDescriptionVector.size() + fFirstId - 1;
 
  329   return CreateNtupleIColumn(ntupleId, name, vector);
 
  333 G4int ExG4HbookNtupleManager::CreateNtupleFColumn(
const G4String& name,
 
  334                                                   std::vector<float>* vector)
 
  336   G4int ntupleId = fNtupleDescriptionVector.size() + fFirstId - 1;
 
  337   return CreateNtupleFColumn(ntupleId, name, vector);
 
  341 G4int ExG4HbookNtupleManager::CreateNtupleDColumn(
const G4String& name,
 
  342                                                   std::vector<double>* vector)
 
  344   G4int ntupleId = fNtupleDescriptionVector.size() + fFirstId - 1;
 
  345   return CreateNtupleDColumn(ntupleId, name, vector);
 
  349 G4int ExG4HbookNtupleManager::CreateNtupleSColumn(
const G4String& name)
 
  351   G4int ntupleId = fNtupleDescriptionVector.size() + fFirstId - 1;
 
  352   return CreateNtupleSColumn(ntupleId, name);
 
  356 void ExG4HbookNtupleManager::FinishNtuple()
 
  358   G4int ntupleId = fNtupleDescriptionVector.size() + fFirstId - 1;
 
  359   FinishNtuple(ntupleId);
 
  363 G4int ExG4HbookNtupleManager::CreateNtupleIColumn(
G4int ntupleId, 
 
  365                                                     std::vector<int>* vector)
 
  371       << 
"Vector columns are not supported in HBOOK."; 
 
  372     G4Exception(
"(ExG4HbookNtupleManager::CreateNtupleIColumn)",
 
  378   if ( fState.GetVerboseL4() ) {
 
  380     description << name << 
" ntupleId " << ntupleId; 
 
  381     fState.GetVerboseL4()->Message(
"create", 
"ntuple I column", description);
 
  385   ExG4HbookNtupleDescription* ntupleDescription
 
  386     = GetNtupleInFunction(ntupleId, 
"CreateNtupleIColumn");
 
  387   tools::ntuple_booking* ntupleBooking
 
  388     = ntupleDescription->fNtupleBooking;  
 
  390   if ( ! ntupleBooking ) {
 
  393                 << 
"Ntuple " << ntupleId << 
" has to be created first. ";
 
  394     G4Exception(
"G4HbookAnalysisManager::CreateNtupleIColumn()",
 
  400   G4int index = ntupleBooking->columns().size();
 
  401   ntupleBooking->add_column<
int>(
name);  
 
  404   if ( ntupleDescription->fNtuple ) {
 
  405     tools::hbook::wntuple::column<int>* column 
 
  406       = ntupleDescription->fNtuple->create_column<
int>(
name);  
 
  407     ntupleDescription->fNtupleIColumnMap[index] = column;
 
  410   fLockFirstNtupleColumnId = 
true;
 
  413   if ( fState.GetVerboseL2() ) {
 
  415     description << name << 
" ntupleId " << ntupleId; 
 
  416     fState.GetVerboseL2()->Message(
"create", 
"ntuple I column", description);
 
  420   return index + fFirstNtupleColumnId;       
 
  424 G4int ExG4HbookNtupleManager::CreateNtupleFColumn(
G4int ntupleId, 
 
  426                                                   std::vector<float>* vector)
 
  432       << 
"Vector columns are not supported in HBOOK."; 
 
  433     G4Exception(
"(ExG4HbookNtupleManager::CreateNtupleFColumn)",
 
  439   if ( fState.GetVerboseL4() ) {
 
  441     description << name << 
" ntupleId " << ntupleId; 
 
  442     fState.GetVerboseL4()->Message(
"create", 
"ntuple F column", description);
 
  446   ExG4HbookNtupleDescription* ntupleDescription
 
  447     = GetNtupleInFunction(ntupleId, 
"CreateNtupleFColumn");
 
  448   tools::ntuple_booking* ntupleBooking
 
  449     = ntupleDescription->fNtupleBooking;  
 
  451   if ( ! ntupleBooking ) {
 
  454                 << 
"Ntuple " << ntupleId << 
" has to be created first. ";
 
  455     G4Exception(
"G4HbookAnalysisManager::CreateNtupleFColumn()",
 
  461   G4int index = ntupleBooking->columns().size();
 
  462   ntupleBooking->add_column<
float>(
name);  
 
  465   if ( ntupleDescription->fNtuple ) {
 
  466     tools::hbook::wntuple::column<float>* column 
 
  467       = ntupleDescription->fNtuple->create_column<
float>(
name);  
 
  468     ntupleDescription->fNtupleFColumnMap[index] = column;
 
  471   fLockFirstNtupleColumnId = 
true;
 
  474   if ( fState.GetVerboseL2() ) {
 
  476     description << name << 
" ntupleId " << ntupleId; 
 
  477     fState.GetVerboseL2()->Message(
"create", 
"ntuple F column", description);
 
  481   return index + fFirstNtupleColumnId;       
 
  486 G4int ExG4HbookNtupleManager::CreateNtupleDColumn(
G4int ntupleId, 
 
  488                                                   std::vector<double>* vector)
 
  494       << 
"Vector columns are not supported in HBOOK."; 
 
  495     G4Exception(
"(ExG4HbookNtupleManager::CreateNtupleDColumn)",
 
  501   if ( fState.GetVerboseL4() ) {
 
  503     description << name << 
" ntupleId " << ntupleId; 
 
  504     fState.GetVerboseL4()->Message(
"create", 
"ntuple D column", description);
 
  508   ExG4HbookNtupleDescription* ntupleDescription
 
  509     = GetNtupleInFunction(ntupleId, 
"CreateNtupleDColumn");
 
  510   tools::ntuple_booking* ntupleBooking
 
  511     = ntupleDescription->fNtupleBooking;  
 
  513   if ( ! ntupleBooking ) {
 
  516                 << 
"Ntuple " << ntupleId << 
" has to be created first. ";
 
  517     G4Exception(
"G4HbookAnalysisManager::CreateNtupleDColumn()",
 
  523   G4int index = ntupleBooking->columns().size();
 
  524   ntupleBooking->add_column<
double>(
name);  
 
  527   if ( ntupleDescription->fNtuple ) {
 
  528     tools::hbook::wntuple::column<double>* column 
 
  529       = ntupleDescription->fNtuple->create_column<
double>(
name);  
 
  530     ntupleDescription->fNtupleDColumnMap[index] = column;
 
  533   fLockFirstNtupleColumnId = 
true;
 
  536   if ( fState.GetVerboseL2() ) {
 
  538     description << name << 
" ntupleId " << ntupleId; 
 
  539     fState.GetVerboseL2()->Message(
"create", 
"ntuple D column", description);
 
  543   return index + fFirstNtupleColumnId;       
 
  547 G4int ExG4HbookNtupleManager::CreateNtupleSColumn(
G4int , 
 
  552     << 
"Columns of string type are not supported in HBOOK."; 
 
  553   G4Exception(
"(ExG4HbookNtupleManager::CreateNtupleDColumn)",
 
  559 void ExG4HbookNtupleManager::FinishNtuple(
G4int ntupleId)
 
  561   ExG4HbookNtupleDescription* ntupleDescription
 
  562     = GetNtupleInFunction(ntupleId, 
"CreateNtupleDColumn");
 
  563   tools::hbook::wntuple* ntuple = ntupleDescription->fNtuple;  
 
  565   if ( ! ntuple ) 
return;
 
  568   if ( fState.GetVerboseL4() ) 
 
  569     fState.GetVerboseL4()
 
  570       ->Message(
"finish", 
"ntuple", ntupleDescription->fNtupleBooking->name());
 
  574   tools::hbook::CHCDIR(
"//PAWC/LUN1",
" ");
 
  578   if ( fState.GetVerboseL2() ) 
 
  579     fState.GetVerboseL2()
 
  580       ->Message(
"finish", 
"ntuple", ntupleDescription->fNtupleBooking->name());
 
  585 G4bool ExG4HbookNtupleManager::FillNtupleIColumn(
G4int columnId, 
G4int value)
 
  587   return FillNtupleIColumn(fFirstId, columnId, value);
 
  593   return FillNtupleFColumn(fFirstId, columnId, value);
 
  599   return FillNtupleDColumn(fFirstId, columnId, value);
 
  603 G4bool ExG4HbookNtupleManager::FillNtupleSColumn(
G4int columnId, 
 
  606   return FillNtupleSColumn(fFirstId, columnId, value);
 
  610 G4bool ExG4HbookNtupleManager::AddNtupleRow()
 
  612   return AddNtupleRow(fFirstId);
 
  616 G4bool ExG4HbookNtupleManager::FillNtupleIColumn(
 
  620   if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
 
  625   tools::hbook::wntuple::column<int>* column 
 
  626     = GetNtupleIColumn(ntupleId, columnId);
 
  629     description << 
"      " << 
"ntupleId " <<  ntupleId
 
  630                 << 
"column " << columnId << 
" does not exist.";
 
  631     G4Exception(
"G4HbookAnalysisManager::FillNtupleIColumn()",
 
  638   if ( fState.GetVerboseL4() ) {
 
  640     description << 
" ntupleId " << ntupleId  
 
  641                 << 
" columnId " << columnId << 
" value " << value;
 
  642     fState.GetVerboseL4()->Message(
"fill", 
"ntuple I column", description);
 
  648 G4bool ExG4HbookNtupleManager::FillNtupleFColumn(
 
  652   if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
 
  657   tools::hbook::wntuple::column<float>* column 
 
  658     = GetNtupleFColumn(ntupleId, columnId);
 
  661     description << 
"      " << 
"ntupleId " <<  ntupleId
 
  662                 << 
"column " << columnId << 
" does not exist.";
 
  663     G4Exception(
"G4HbookAnalysisManager::FillNtupleFColumn()",
 
  670   if ( fState.GetVerboseL4() ) {
 
  672     description << 
" ntupleId " << ntupleId  
 
  673                 << 
" columnId " << columnId << 
" value " << value;
 
  674     fState.GetVerboseL4()->Message(
"fill", 
"ntuple F column", description);
 
  681 G4bool ExG4HbookNtupleManager::FillNtupleDColumn(
 
  685   if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
 
  690   tools::hbook::wntuple::column<double>* column 
 
  691     = GetNtupleDColumn(ntupleId, columnId);
 
  694     description << 
"      " << 
"ntupleId " <<  ntupleId
 
  695                 << 
"column " << columnId << 
" does not exist.";
 
  696     G4Exception(
"G4HbookAnalysisManager::FillNtupleDColumn()",
 
  703   if ( fState.GetVerboseL4() ) {
 
  705     description << 
" ntupleId " << ntupleId  
 
  706                 << 
" columnId " << columnId << 
" value " << value;
 
  707     fState.GetVerboseL4()->Message(
"fill", 
"ntuple D column", description);
 
  714 G4bool ExG4HbookNtupleManager::FillNtupleSColumn(
 
  718   if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
 
  725     << 
"Columns of string type are not supported in HBOOK."; 
 
  726   G4Exception(
"(ExG4HbookNtupleManager::FillNtupleSColumn)",
 
  732 G4bool ExG4HbookNtupleManager::AddNtupleRow(
G4int ntupleId)
 
  734   if ( fState.GetIsActivation() && ( ! GetActivation(ntupleId) ) ) {
 
  740   if ( fState.GetVerboseL4() ) {
 
  742     description << 
" ntupleId " << ntupleId;  
 
  743     fState.GetVerboseL4()->Message(
"add", 
"ntuple row", description);
 
  747   ExG4HbookNtupleDescription* ntupleDescription
 
  748     = GetNtupleInFunction(ntupleId, 
"AddNtupleRow");
 
  750   if ( ! ntupleDescription || ! ntupleDescription->fNtuple ) {
 
  752     description << 
"      " << 
" ntupleId " << ntupleId 
 
  753                 << 
" does not exist. ";
 
  754     G4Exception(
"G4HbookAnalysisManager::AddNtupleRow()",
 
  759   ntupleDescription->fNtuple->add_row();
 
  761   if ( fState.GetVerboseL4() ) {
 
  763     description << 
" ntupleId " << ntupleId;  
 
  764     fState.GetVerboseL4()->Message(
"add", 
"ntuple row", description, 
true);
 
  771 tools::hbook::wntuple* ExG4HbookNtupleManager::GetNtuple()
 const 
  773   return GetNtuple(fFirstId);
 
  777 tools::hbook::wntuple* ExG4HbookNtupleManager::GetNtuple(
G4int ntupleId)
 const 
  779   ExG4HbookNtupleDescription* ntupleDescription
 
  780     = GetNtupleInFunction(ntupleId, 
"GetNtuple");
 
  782   return ntupleDescription->fNtuple;  
 
  786 G4bool ExG4HbookNtupleManager::SetNtupleHbookIdOffset(
G4int offset) 
 
  788   if ( fNtupleDescriptionVector.size() ) {
 
  791       << 
"Cannot set NtupleHbookIdOffset as some ntuples already exist.";
 
  792     G4Exception(
"G4HbookAnalysisManager::SetNtupleHbookIdOffset()",
 
  797   if ( fFirstId + offset < 1 ) {
 
  799     description << 
"The first ntuple HBOOK id must be >= 1.";
 
  800     G4Exception(
"G4HbookAnalysisManager::SetNtupleHbookIdOffset()",
 
  805   fNtupleHbookIdOffset = offset;
 
  812 void  ExG4HbookNtupleManager::SetActivation(
G4bool activation)
 
  814   std::vector<ExG4HbookNtupleDescription*>::iterator it;  
 
  815   for (it = fNtupleDescriptionVector.begin(); it != fNtupleDescriptionVector.end(); it++ ) {
 
  816     (*it)->fActivation = activation;
 
  821 void  ExG4HbookNtupleManager::SetActivation(
G4int ntupleId, 
G4bool activation)
 
  823   ExG4HbookNtupleDescription* ntupleDescription
 
  824     = GetNtupleInFunction(ntupleId, 
"SetActivation");
 
  825   if ( ! ntupleDescription ) 
return;
 
  827   ntupleDescription->fActivation = activation;
 
  831 G4bool  ExG4HbookNtupleManager::GetActivation(
G4int ntupleId)
 const 
  833   ExG4HbookNtupleDescription* ntupleDescription
 
  834     = GetNtupleInFunction(ntupleId, 
"GetActivation");
 
  835   if ( ! ntupleDescription ) 
return false;
 
  837   return ntupleDescription->fActivation;
 
std::ostringstream G4ExceptionDescription
 
G4GLOB_DLL std::ostream G4cout
 
Definition of the ExG4HbookNtupleManager class. 
 
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
 
Definition of the ExG4HbookFileManager class.