|
Geant4 examples
|
HBook Analysis manager. More...
#include <Doxymodules_common.h>
Public Member Functions | |
| ExG4HbookAnalysisManager () | |
| virtual | ~ExG4HbookAnalysisManager () |
| virtual G4bool | OpenFile (const G4String &fileName) |
| virtual G4bool | Write () |
| virtual G4bool | CloseFile () |
| virtual G4int | CreateH1 (const G4String &name, const G4String &title, G4int nbins, G4double xmin, G4double xmax) |
| virtual G4int | CreateH2 (const G4String &name, const G4String &title, G4int nxbins, G4double xmin, G4double xmax, G4int nybins, G4double ymin, G4double ymax) |
| virtual void | CreateNtuple (const G4String &name, const G4String &title) |
| virtual G4int | CreateNtupleIColumn (const G4String &name) |
| virtual G4int | CreateNtupleFColumn (const G4String &name) |
| virtual G4int | CreateNtupleDColumn (const G4String &name) |
| virtual void | FinishNtuple () |
| virtual G4bool | FillH1 (G4int id, G4double value, G4double weight=1.0) |
| virtual G4bool | FillH2 (G4int id, G4double xvalue, G4double yvalue, G4double weight=1.0) |
| virtual G4bool | FillNtupleIColumn (G4int id, G4int value) |
| virtual G4bool | FillNtupleFColumn (G4int id, G4float value) |
| virtual G4bool | FillNtupleDColumn (G4int id, G4double value) |
| virtual G4bool | AddNtupleRow () |
| virtual tools::hbook::h1 * | GetH1 (G4int id, G4bool warn=true) const |
| virtual tools::hbook::h2 * | GetH2 (G4int id, G4bool warn=true) const |
Static Public Member Functions | |
| static ExG4HbookAnalysisManager * | Instance () |
Private Member Functions | |
| tools::hbook::wntuple::column < int > * | GetNtupleIColumn (G4int id) const |
| tools::hbook::wntuple::column < float > * | GetNtupleFColumn (G4int id) const |
| tools::hbook::wntuple::column < double > * | GetNtupleDColumn (G4int id) const |
Private Attributes | |
| tools::hbook::wfile * | fFile |
| std::vector< tools::hbook::h1 * > | fH1Vector |
| std::map< G4String, tools::hbook::h1 * > | fH1MapByName |
| std::vector< tools::hbook::h2 * > | fH2Vector |
| std::map< G4String, tools::hbook::h2 * > | fH2MapByName |
| G4String | fNtupleName |
| G4String | fNtupleTitle |
| tools::hbook::wntuple * | fNtuple |
| std::map< G4int, tools::hbook::wntuple::column < int > * > | fNtupleIColumnMap |
| std::map< G4int, tools::hbook::wntuple::column < float > * > | fNtupleFColumnMap |
| std::map< G4int, tools::hbook::wntuple::column < double > * > | fNtupleDColumnMap |
Static Private Attributes | |
| static ExG4HbookAnalysisManager * | fgInstance = 0 |
HBook Analysis manager.
The class implements the G4VAnalysisManager manager for HBook. It is provided separately from geant4/source/analysis in order to avoid a need of linking Geant4 kernel libraries with cerblib.
Definition at line 19 of file Doxymodules_common.h.
| ExG4HbookAnalysisManager::ExG4HbookAnalysisManager | ( | ) |
Definition at line 56 of file ExG4HbookAnalysisManager.cc.
: G4VAnalysisManager("Hbook"), fFile(0), fH1Vector(), fH1MapByName(), fH2Vector(), fH2MapByName(), fNtupleName(), fNtupleTitle(), fNtuple(0), fNtupleIColumnMap(), fNtupleFColumnMap(), fNtupleDColumnMap() { if ( fgInstance ) { G4ExceptionDescription description; description << " " << "G4HbookAnalysisManager already exists." << "Cannot create another instance."; G4Exception("G4HbookAnalysisManager::G4HbookAnalysisManager()", "Analysis_F001", FatalException, description); } fgInstance = this; // Initialize HBOOK : tools::hbook::CHLIMIT(setpawc()); setntuc(); //for ntuple. }
| ExG4HbookAnalysisManager::~ExG4HbookAnalysisManager | ( | ) | [virtual] |
Definition at line 87 of file ExG4HbookAnalysisManager.cc.
| ExG4HbookAnalysisManager * ExG4HbookAnalysisManager::Instance | ( | void | ) | [static] |
Definition at line 46 of file ExG4HbookAnalysisManager.cc.
{
if ( fgInstance == 0 ) {
fgInstance = new ExG4HbookAnalysisManager();
}
return fgInstance;
}
Definition at line 164 of file ExG4HbookAnalysisManager.cc.
{
G4String name(fileName);
if ( name.find(".") == std::string::npos ) name.append(".hbook");
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("open", "analysis file", name);
#endif
tools::hbook::CHCDIR("//PAWC"," ");
unsigned int unit = 1;
fFile = new tools::hbook::wfile(std::cout, name, unit);
if ( ! fFile->is_valid() ) {
G4ExceptionDescription description;
description << " " << "Cannot open file " << fileName;
G4Exception("G4HbookAnalysisManager::OpenFile()",
"Analysis_W001", JustWarning, description);
return false;
}
// At this point, in HBOOK, we should have :
// - created a //LUN1 directory attached to the file
// - created a //PAWC/LUN1 in memory
// - be in the directory //PAWC/LUN1.
// create an "histo" HBOOK directory both in memory and in the file :
tools::hbook::CHCDIR("//PAWC/LUN1"," ");
tools::hbook::CHMDIR(fHistoDirectoryName.data()," ");
tools::hbook::CHCDIR("//LUN1"," ");
tools::hbook::CHMDIR("histo"," ");
/*
G4String histoPath = "//PAWC/LUN1/";
histoPath.append(fHistoDirectoryName.data());
tools::hbook::CHCDIR(histoPath.data()," ");
*/
// the five upper lines could have been done with :
//fFile->cd_home();
//fFile->mkcd("histo");
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("open", "analysis file", name);
#endif
return true;
}
| G4bool ExG4HbookAnalysisManager::Write | ( | ) | [virtual] |
Definition at line 214 of file ExG4HbookAnalysisManager.cc.
| G4bool ExG4HbookAnalysisManager::CloseFile | ( | ) | [virtual] |
Definition at line 235 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("close", "file", "");
#endif
//WARNING : have to delete the ntuple before closing the file.
delete fNtuple;
fNtuple = 0;
G4bool result = fFile->close();
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("close", "file", "", result);
#endif
return result;
}
| G4int ExG4HbookAnalysisManager::CreateH1 | ( | const G4String & | name, |
| const G4String & | title, | ||
| G4int | nbins, | ||
| G4double | xmin, | ||
| G4double | xmax | ||
| ) | [virtual] |
Definition at line 257 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("create", "H1", name);
#endif
// Go to histograms directory
G4String histoPath = "//PAWC/LUN1/";
histoPath.append(fHistoDirectoryName.data());
tools::hbook::CHCDIR(histoPath.data()," ");
G4int index = fH1Vector.size();
G4int pawIndex = ( fH1Vector.size() + fH2Vector.size() + 1 )*10;
tools::hbook::h1* h1 = new tools::hbook::h1(pawIndex, title, nbins, xmin, xmax);
fH1Vector.push_back(h1);
fH1MapByName[name] = h1;
// Return to //PAWC/LUN1 :
tools::hbook::CHCDIR("//PAWC/LUN1"," ");
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("create", "H1", name);
#endif
return index + fFirstHistoId;
}
| G4int ExG4HbookAnalysisManager::CreateH2 | ( | const G4String & | name, |
| const G4String & | title, | ||
| G4int | nxbins, | ||
| G4double | xmin, | ||
| G4double | xmax, | ||
| G4int | nybins, | ||
| G4double | ymin, | ||
| G4double | ymax | ||
| ) | [virtual] |
Definition at line 288 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("create", "H2", name);
#endif
// Go to histograms directory
G4String histoPath = "//PAWC/LUN1/";
histoPath.append(fHistoDirectoryName.data());
tools::hbook::CHCDIR(histoPath.data()," ");
G4int index = fH2Vector.size();
G4int pawIndex = ( fH1Vector.size() + fH2Vector.size() + 1 )*10;
tools::hbook::h2* h2
= new tools::hbook::h2(pawIndex, title, nxbins, xmin, xmax, nybins, ymin, ymax);
fH2Vector.push_back(h2);
fH2MapByName[name] = h2;
// Return to //PAWC/LUN1 :
tools::hbook::CHCDIR("//PAWC/LUN1"," ");
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("create", "H2", name);
#endif
return index + fFirstHistoId;
}
| void ExG4HbookAnalysisManager::CreateNtuple | ( | const G4String & | name, |
| const G4String & | title | ||
| ) | [virtual] |
Definition at line 321 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("create", "ntuple", name);
#endif
if ( fNtuple ) {
G4ExceptionDescription description;
description << " "
<< "Ntuple already exists. "
<< "(Only one ntuple is currently supported.)";
G4Exception("G4HbookAnalysisManager::CreateNtuple()",
"Analysis_W006", JustWarning, description);
return;
}
// create an "ntuple" directory both in memory and in the file :
fFile->cd_home(); //go under //PAWC/LUN1
//fFile->cd_up(); //could have been ok too.
fFile->mkcd("ntuple"); //create //LUN1/ntuple and //PAWC/LUN1/ntuple
// We should be under //PAWC/LUN1/ntuple
G4int pawIndex = ( fH1Vector.size() + fH2Vector.size() + 1 )*10;
fNtuple = new tools::hbook::wntuple(pawIndex, name);
fNtupleName = name;
fNtupleTitle = title;
#ifdef G4VERBOSE
if ( fpVerboseL1 ) {
G4ExceptionDescription description;
description << " name : " << name << " index : " << pawIndex;
fpVerboseL1->Message("create", "ntuple", description);
}
#endif
}
Definition at line 360 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("create", "ntuple I column", name);
#endif
G4int index = fNtuple->columns().size();
tools::hbook::wntuple::column<int>* column = fNtuple->create_column<int>(name);
fNtupleIColumnMap[index] = column;
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("create", "ntuple I column", name);
#endif
return index + fFirstNtupleId;
}
Definition at line 380 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("create", "ntuple F column", name);
#endif
G4int index = fNtuple->columns().size();
tools::hbook::wntuple::column<float>* column = fNtuple->create_column<float>(name);
fNtupleFColumnMap[index] = column;
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("create", "ntuple F column", name);
#endif
return index + fFirstNtupleId;
}
Definition at line 401 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("create", "ntuple D column", name);
#endif
G4int index = fNtuple->columns().size();
tools::hbook::wntuple::column<double>* column = fNtuple->create_column<double>(name);
fNtupleDColumnMap[index] = column;
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("create", "ntuple D column", name);
#endif
return index + fFirstNtupleId;
}
| void ExG4HbookAnalysisManager::FinishNtuple | ( | ) | [virtual] |
Definition at line 421 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("finish", "ntuple", fNtupleName);
#endif
// Return to //PAWC/LUN1 :
tools::hbook::CHCDIR("//PAWC/LUN1"," ");
//fNtuple->add_row_beg();
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("finish", "ntuple", fNtupleName);
#endif
}
| G4bool ExG4HbookAnalysisManager::FillH1 | ( | G4int | id, |
| G4double | value, | ||
| G4double | weight = 1.0 |
||
| ) | [virtual] |
Definition at line 439 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL2->Message("fill", "H1", description);
}
#endif
tools::hbook::h1* h1 = GetH1(id);
if ( ! h1 ) {
G4ExceptionDescription description;
description << " " << "histogram " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::FillH1()",
"Analysis_W007", JustWarning, description);
return false;
}
h1->fill(value, weight);
#ifdef G4VERBOSE
if ( fpVerboseL1 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL1->Message("fill", "H1", description);
}
#endif
return true;
}
| G4bool ExG4HbookAnalysisManager::FillH2 | ( | G4int | id, |
| G4double | xvalue, | ||
| G4double | yvalue, | ||
| G4double | weight = 1.0 |
||
| ) | [virtual] |
Definition at line 470 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 ) {
G4ExceptionDescription description;
description << " id " << id
<< " xvalue " << xvalue << " yvalue " << yvalue;
fpVerboseL2->Message("fill", "H2", description);
}
#endif
tools::hbook::h2* h2 = GetH2(id);
if ( ! h2 ) {
G4ExceptionDescription description;
description << " " << "histogram " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::FillH2()",
"Analysis_W007", JustWarning, description);
return false;
}
h2->fill(xvalue, yvalue, weight);
#ifdef G4VERBOSE
if ( fpVerboseL1 ) {
G4ExceptionDescription description;
description << " id " << id
<< " xvalue " << xvalue << " yvalue " << yvalue;
fpVerboseL1->Message("fill", "H2", description);
}
#endif
return true;
}
Definition at line 505 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL2->Message("fill", "ntuple I column", description);
}
#endif
tools::hbook::wntuple::column<int>* column = GetNtupleIColumn(id);
if ( ! column ) {
G4ExceptionDescription description;
description << " " << "column " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::FillNtupleIColumn()",
"Analysis_W009", JustWarning, description);
return false;
}
column->fill(value);
#ifdef G4VERBOSE
if ( fpVerboseL1 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL1->Message("fill", "ntuple I column", description);
}
#endif
return true;
}
Definition at line 535 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL2->Message("fill", "ntuple F column", description);
}
#endif
tools::hbook::wntuple::column<float>* column = GetNtupleFColumn(id);
if ( ! column ) {
G4ExceptionDescription description;
description << " " << "column " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::FillNtupleFColumn()",
"Analysis_W009", JustWarning, description);
return false;
}
column->fill(value);
#ifdef G4VERBOSE
if ( fpVerboseL1 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL1->Message("fill", "ntuple F column", description);
}
#endif
return true;
}
Definition at line 565 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL2->Message("fill", "ntuple D column", description);
}
#endif
tools::hbook::wntuple::column<double>* column = GetNtupleDColumn(id);
if ( ! column ) {
G4ExceptionDescription description;
description << " " << "column " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::FillNtupleDColumn()",
"Analysis_W009", JustWarning, description);
return false;
}
column->fill(value);
#ifdef G4VERBOSE
if ( fpVerboseL1 ) {
G4ExceptionDescription description;
description << " id " << id << " value " << value;
fpVerboseL1->Message("fill", "ntuple D column", description);
}
#endif
return true;
}
| G4bool ExG4HbookAnalysisManager::AddNtupleRow | ( | ) | [virtual] |
Definition at line 596 of file ExG4HbookAnalysisManager.cc.
{
#ifdef G4VERBOSE
if ( fpVerboseL2 )
fpVerboseL2->Message("add", "ntuple row", "");
#endif
//G4cout << "Hbook: Going to add Ntuple row ..." << G4endl;
if ( ! fNtuple ) {
G4ExceptionDescription description;
description << " " << "ntuple does not exist. ";
G4Exception("G4HbookAnalysisManager::AddNtupleRow()",
"Analysis_W008", JustWarning, description);
return false;
}
//fNtuple->add_row_fast();
fNtuple->add_row();
#ifdef G4VERBOSE
if ( fpVerboseL1 )
fpVerboseL1->Message("add", "ntuple row", "");
#endif
return true;
}
Definition at line 622 of file ExG4HbookAnalysisManager.cc.
{
G4int index = id - fFirstHistoId;
if ( index < 0 || index >= G4int(fH1Vector.size()) ) {
if ( warn) {
G4ExceptionDescription description;
description << " " << "histo " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::GetH1()",
"Analysis_W007", JustWarning, description);
}
return 0;
}
return fH1Vector[index];
}
Definition at line 638 of file ExG4HbookAnalysisManager.cc.
{
G4int index = id - fFirstHistoId;
if ( index < 0 || index >= G4int(fH2Vector.size()) ) {
if ( warn) {
G4ExceptionDescription description;
description << " " << "histo " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::GetH2()",
"Analysis_W007", JustWarning, description);
}
return 0;
}
return fH2Vector[index];
}
| tools::hbook::wntuple::column< int > * ExG4HbookAnalysisManager::GetNtupleIColumn | ( | G4int | id | ) | const [private] |
Definition at line 109 of file ExG4HbookAnalysisManager.cc.
{
std::map<G4int, tools::hbook::wntuple::column<int>* >::const_iterator it
= fNtupleIColumnMap.find(id);
if ( it == fNtupleIColumnMap.end() ) {
G4ExceptionDescription description;
description << " " << "column " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::GetNtupleIColumn()",
"Analysis_W009", JustWarning, description);
return 0;
}
return it->second;
}
| tools::hbook::wntuple::column< float > * ExG4HbookAnalysisManager::GetNtupleFColumn | ( | G4int | id | ) | const [private] |
Definition at line 126 of file ExG4HbookAnalysisManager.cc.
{
std::map<G4int, tools::hbook::wntuple::column<float>* >::const_iterator it
= fNtupleFColumnMap.find(id);
if ( it == fNtupleFColumnMap.end() ) {
G4ExceptionDescription description;
description << " " << "column " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::GetNtupleFColumn()",
"Analysis_W009", JustWarning, description);
return 0;
}
return it->second;
}
| tools::hbook::wntuple::column< double > * ExG4HbookAnalysisManager::GetNtupleDColumn | ( | G4int | id | ) | const [private] |
Definition at line 144 of file ExG4HbookAnalysisManager.cc.
{
std::map<G4int, tools::hbook::wntuple::column<double>* >::const_iterator it
= fNtupleDColumnMap.find(id);
if ( it == fNtupleDColumnMap.end() ) {
G4ExceptionDescription description;
description << " " << "column " << id << " does not exist.";
G4Exception("G4HbookAnalysisManager::GetNtupleDColumn()",
"Analysis_W009", JustWarning, description);
return 0;
}
return it->second;
}
ExG4HbookAnalysisManager * ExG4HbookAnalysisManager::fgInstance = 0 [static, private] |
Definition at line 111 of file ExG4HbookAnalysisManager.hh.
tools::hbook::wfile* ExG4HbookAnalysisManager::fFile [private] |
Definition at line 121 of file ExG4HbookAnalysisManager.hh.
std::vector<tools::hbook::h1*> ExG4HbookAnalysisManager::fH1Vector [private] |
Definition at line 123 of file ExG4HbookAnalysisManager.hh.
std::map<G4String, tools::hbook::h1*> ExG4HbookAnalysisManager::fH1MapByName [private] |
Definition at line 124 of file ExG4HbookAnalysisManager.hh.
std::vector<tools::hbook::h2*> ExG4HbookAnalysisManager::fH2Vector [private] |
Definition at line 126 of file ExG4HbookAnalysisManager.hh.
std::map<G4String, tools::hbook::h2*> ExG4HbookAnalysisManager::fH2MapByName [private] |
Definition at line 127 of file ExG4HbookAnalysisManager.hh.
Definition at line 129 of file ExG4HbookAnalysisManager.hh.
Definition at line 130 of file ExG4HbookAnalysisManager.hh.
tools::hbook::wntuple* ExG4HbookAnalysisManager::fNtuple [private] |
Definition at line 131 of file ExG4HbookAnalysisManager.hh.
std::map<G4int, tools::hbook::wntuple::column<int>* > ExG4HbookAnalysisManager::fNtupleIColumnMap [private] |
Definition at line 132 of file ExG4HbookAnalysisManager.hh.
std::map<G4int, tools::hbook::wntuple::column<float>* > ExG4HbookAnalysisManager::fNtupleFColumnMap [private] |
Definition at line 133 of file ExG4HbookAnalysisManager.hh.
std::map<G4int, tools::hbook::wntuple::column<double>* > ExG4HbookAnalysisManager::fNtupleDColumnMap [private] |
Definition at line 134 of file ExG4HbookAnalysisManager.hh.
1.7.4