35 #include "tools/histo/h3d"
39 using namespace G4Analysis;
42 const G4int G4H3ToolsManager::kDimension = 3;
78 void AddH3Annotation(tools::histo::h3d* h3d,
92 h3d->add_annotation(tools::histo::key_axis_x_title(), xaxisTitle);
93 h3d->add_annotation(tools::histo::key_axis_y_title(), yaxisTitle);
94 h3d->add_annotation(tools::histo::key_axis_z_title(), zaxisTitle);
98 tools::histo::h3d* CreateToolsH3(
129 <<
" User binning scheme setting was ignored." <<
G4endl
130 <<
" Linear binning will be applied with given (nbins, xmin, xmax) values";
134 return new tools::histo::h3d(title,
135 nxbins, xfcn(xmin/xunit), xfcn(xmax/xunit),
136 nybins, yfcn(ymin/yunit), yfcn(ymax/yunit),
137 nzbins, zfcn(zmin/zunit), zfcn(zmax/zunit));
143 std::vector<G4double> xedges;
144 ComputeEdges(nxbins, xmin, xmax, xunit, xfcn, xbinScheme, xedges);
145 std::vector<G4double> yedges;
146 ComputeEdges(nybins, ymin, ymax, yunit, yfcn, ybinScheme, yedges);
147 std::vector<G4double> zedges;
148 ComputeEdges(nzbins, zmin, zmax, zunit, zfcn, zbinScheme, zedges);
149 return new tools::histo::h3d(title, xedges, yedges, zedges);
154 tools::histo::h3d* CreateToolsH3(
156 const std::vector<G4double>& xedges,
157 const std::vector<G4double>& yedges,
158 const std::vector<G4double>& zedges,
174 std::vector<G4double> xnewEdges;
176 std::vector<G4double> ynewEdges;
178 std::vector<G4double> znewEdges;
181 return new tools::histo::h3d(title, xnewEdges, ynewEdges, znewEdges);
187 void ConfigureToolsH3(tools::histo::h3d* h3d,
217 <<
" User binning scheme setting was ignored." <<
G4endl
218 <<
" Linear binning will be applied with given (nbins, xmin, xmax) values";
222 h3d->configure(nxbins, xfcn(xmin/xunit), xfcn(xmax/xunit),
223 nybins, yfcn(ymin/yunit), yfcn(ymax/yunit),
224 nzbins, zfcn(zmin/zunit), zfcn(zmax/zunit));
228 std::vector<G4double> xedges;
229 ComputeEdges(nxbins, xmin, xmax, xunit, xfcn, xbinScheme, xedges);
230 std::vector<G4double> yedges;
231 ComputeEdges(nybins, ymin, ymax, yunit, yfcn, ybinScheme, yedges);
232 std::vector<G4double> zedges;
233 ComputeEdges(nzbins, zmin, zmax, zunit, zfcn, zbinScheme, zedges);
234 h3d->configure(xedges, yedges, zedges);
239 void ConfigureToolsH3(tools::histo::h3d* h3d,
240 const std::vector<G4double>& xedges,
241 const std::vector<G4double>& yedges,
242 const std::vector<G4double>& zedges,
252 std::vector<G4double> xnewEdges;
257 std::vector<G4double> ynewEdges;
262 std::vector<G4double> znewEdges;
265 h3d->configure(xnewEdges, ynewEdges, znewEdges);
276 void G4H3ToolsManager::AddH3Information(
const G4String&
name,
287 auto hnInformation =
fHnManager->AddHnInformation(name, 3);
288 hnInformation->
AddDimension(xunitName, xfcnName, xbinScheme);
289 hnInformation->
AddDimension(yunitName, yfcnName, ybinScheme);
290 hnInformation->
AddDimension(zunitName, zfcnName, zbinScheme);
315 tools::histo::h3d* h3d
316 = CreateToolsH3(title,
317 nxbins, xmin, xmax, nybins, ymin, ymax, nzbins, zmin, zmax,
318 xunitName, yunitName, zunitName,
319 xfcnName, yfcnName, zfcnName,
320 xbinSchemeName, ybinSchemeName, zbinSchemeName);
323 AddH3Annotation(h3d, xunitName, yunitName, zunitName,
324 xfcnName, yfcnName, zfcnName);
331 name, xunitName, yunitName, zunitName, xfcnName, yfcnName, zfcnName,
332 xbinScheme, ybinScheme, zbinScheme);
347 const std::vector<G4double>& xedges,
348 const std::vector<G4double>& yedges,
349 const std::vector<G4double>& zedges,
360 tools::histo::h3d* h3d
361 = CreateToolsH3(title, xedges, yedges, zedges,
362 xunitName, yunitName, zunitName, xfcnName, yfcnName, zfcnName);
365 AddH3Annotation(h3d, xunitName, yunitName, zunitName,
366 xfcnName, yfcnName, zfcnName);
370 name, xunitName, yunitName, zunitName, xfcnName, yfcnName, zfcnName,
398 if ( ! h3d )
return false;
408 h3d, nxbins, xmin, xmax, nybins, ymin, ymax, nzbins, zmin, zmax,
409 xunitName, yunitName, zunitName, xfcnName, yfcnName, zfcnName,
410 xbinSchemeName, ybinSchemeName, zbinSchemeName);
413 AddH3Annotation(h3d, xunitName, yunitName, zunitName,
414 xfcnName, yfcnName, zfcnName);
421 info, xunitName, yunitName, zunitName, xfcnName, yfcnName, zfcnName,
422 xbinScheme, ybinScheme, zbinScheme);
432 const std::vector<G4double>& xedges,
433 const std::vector<G4double>& yedges,
434 const std::vector<G4double>& zedges,
441 if ( ! h3d )
return false;
450 ConfigureToolsH3(h3d, xedges, yedges, zedges,
451 xunitName, yunitName, zunitName, xfcnName, yfcnName, zfcnName);
454 AddH3Annotation(h3d, xunitName, yunitName, zunitName,
455 xfcnName, yfcnName, zfcnName);
459 info, xunitName, yunitName, zunitName, xfcnName, yfcnName, zfcnName,
472 if ( ! h3d )
return false;
474 return h3d->scale(factor);
483 if ( ! h3d )
return false;
490 =
fHnManager->GetHnDimensionInformation(
id,
kX,
"FillH3");
492 =
fHnManager->GetHnDimensionInformation(
id,
kY,
"FillH3");
494 =
fHnManager->GetHnDimensionInformation(
id,
kZ,
"FillH3");
496 h3d->fill(xInfo->
fFcn(xvalue/xInfo->
fUnit),
498 zInfo->
fFcn(zvalue/zInfo->
fUnit), weight);
502 description <<
" id " <<
id
503 <<
" xvalue " << xvalue
504 <<
" xfcn(xvalue/xunit) " << xInfo->
fFcn(xvalue/xInfo->
fUnit)
505 <<
" yvalue " << yvalue
506 <<
" yfcn(yvalue/yunit) " << yInfo->
fFcn(yvalue/yInfo->
fUnit)
507 <<
" zvalue " << zvalue
508 <<
" zfcn(zvalue/zunit) " << zInfo->
fFcn(zvalue/zInfo->
fUnit)
509 <<
" weight " << weight;
519 return GetTId(name, warn);
526 if ( ! h3d )
return 0;
537 if ( ! h3d )
return 0.;
546 if ( ! h3d )
return 0.;
555 if ( ! h3d )
return 0.;
564 if ( ! h3d )
return 0;
575 if ( ! h3d )
return 0.;
584 if ( ! h3d )
return 0.;
593 if ( ! h3d )
return 0.;
602 if ( ! h3d )
return 0;
613 if ( ! h3d )
return 0.;
622 if ( ! h3d )
return 0.;
631 if ( ! h3d )
return 0.;
640 if ( ! h3d )
return false;
649 if ( ! h3d )
return false;
658 if ( ! h3d )
return false;
667 if ( ! h3d )
return false;
676 if ( ! h3d )
return "";
685 if ( ! h3d )
return "";
694 if ( ! h3d )
return "";
703 if ( ! h3d )
return "";
732 AddH3Annotation(h3d,
"none",
"none",
"none",
"none",
"none",
"none");
734 AddH3Information(name,
"none",
"none",
"none",
"none",
"none",
"none",
749 const std::vector<tools::histo::h3d*>& h3Vector)
756 G4bool onlyIfActive)
const
G4double GetWidth(const G4ToolsBaseHisto &baseHisto, G4int dimension, const G4String &hnType)
const XML_Char XML_Encoding * info
void Message(const G4String &action, const G4String &object, const G4String &objectName, G4bool success=true) const
G4String GetTitle(const G4ToolsBaseHisto &baseHisto)
G4String GetAxisTitle(const G4ToolsBaseHisto &baseHisto, G4int dimension, const G4String &hnType)
G4double GetMin(const G4ToolsBaseHisto &baseHisto, G4int dimension)
std::ostringstream G4ExceptionDescription
void ComputeEdges(G4int nbins, G4double xmin, G4double xmax, G4double unit, G4Fcn fcn, G4BinScheme, std::vector< G4double > &edges)
G4bool SetAxisTitle(G4ToolsBaseHisto &baseHisto, G4int dimension, const G4String &title)
std::shared_ptr< G4HnManager > fHnManager
G4int RegisterT(tools::histo::h3d *t, const G4String &name)
const G4AnalysisVerbose * GetVerboseL2() const
void UpdateTitle(G4String &title, const G4String &unitName, const G4String &fcnName)
const G4AnalysisManagerState & fState
G4int GetTId(const G4String &name, G4bool warn=true) const
const G4AnalysisVerbose * GetVerboseL4() const
tools::histo::h3d * GetTInFunction(G4int id, G4String functionName, G4bool warn=true, G4bool onlyIfActive=true) const
G4double GetUnitValue(const G4String &unit)
G4bool SetTitle(G4ToolsBaseHisto &baseHisto, const G4String &title)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4Fcn GetFunction(const G4String &fcnName)
void AddTVector(const std::vector< tools::histo::h3d * > &tVector)
G4BinScheme GetBinScheme(const G4String &binSchemeName)
G4double GetMax(const G4ToolsBaseHisto &baseHisto, G4int dimension)
G4int GetNbins(const G4ToolsBaseHisto &baseHisto, G4int dimension)
G4bool GetIsActivation() const