3 #include "NBinningDef.h"
5 #include "NStorageTree.h"
9 #include "NBinningPoint.h"
24 NLogError(
"NBinningPoint: Binning has no axes");
28 NLogError(
"NBinningPoint: Binning content is nullptr");
61 NLogTrace(
"NBinningPoint::Reset: Resetting point ...");
64 NLogError(
"NBinningPoint::Reset: Invalid dimensions or coordinates");
86 NLogError(
"NBinningPoint::Print: Invalid dimensions or coordinates");
92 NLogInfo(
"NBinningPoint: %s",
94 NLogInfo(
" Storage coordinates: %s",
97 NLogInfo(
" Title: '%s'",
GetString().c_str());
98 if (opt.Contains(
"C")) {
99 NLogInfo(
" Config: %s",
fCfg.dump().c_str());
102 if (opt.Contains(
"A")) {
104 NLogInfo(
" Axis %d: min=%.3f max=%.3f label='%s'", i,
fMins[i],
fMaxs[i],
fLabels[i].c_str());
116 NLogError(
"NBinningPoint::RecalculateStorageCoords: Binning or content is nullptr");
127 if (binDef ==
nullptr) {
128 NLogError(
"NBinningPoint::RecalculateStorageCoords: Binning definition is nullptr");
131 std::vector<Long64_t> ids = binDef->
GetIds();
134 if (useBinningDefCheck) {
136 NLogError(
"NBinningPoint::RecalculateStorageCoords: Storage tree is nullptr !!! Skipping check ...");
140 fEntryNumber < fTreeStorage->GetEntries()) {
141 NLogError(
"NBinningPoint::RecalculateStorageCoords: Entry %lld not found in binning definition '%s' !!!",
145 NLogError(
"Available binning definitions for entry=%lld :",
fEntryNumber);
146 std::string firstDefName;
149 if (def ==
nullptr)
continue;
150 std::vector<Long64_t> defIds = def->
GetIds();
151 if (std::find(defIds.begin(), defIds.end(),
fEntryNumber) != defIds.end()) {
152 if (firstDefName.empty()) firstDefName = kv.first;
153 NLogError(
" Definition '%s' size=%zu ", kv.first.c_str(), defIds.size());
158 "One can set definition via 'NBinning::SetCurrentDefinitionName(\"%s\")' before calling 'GetEntry(%lld)'",
169 TAxis * axisStorage = (TAxis *)binDef->
GetAxes()->At(i);
172 fMins[i] = axis->GetBinLowEdge(axisRanges[i][1]);
173 fMaxs[i] = axis->GetBinUpEdge(axisRanges[i][2]);
175 fLabels[i] = axis->GetBinLabel(axisRanges[i][1]);
189 std::map<int, std::vector<int>> axisRanges;
203 std::string title = !prefix.empty() ? prefix +
" " :
"";
207 NLogError(
"NBinningPoint::GetTitle: Axis %d is nullptr !!!", i);
213 if (a->IsAlphanumeric()) {
214 title += TString::Format(
"%s[%s] ", a->GetName(), a->GetBinLabel(
fBaseBinMin[i])).Data();
217 title += TString::Format(
"%s[%.3f,%.3f] ", a->GetName(),
fMins[i],
fMaxs[i]).Data();
221 if (title.back() ==
' ') {
232 NLogError(
"NBinningPoint::Fill: Binning or content is nullptr");
238 if (bin >= 0 && ignoreFilledCheck ==
false) {
257 NLogError(
"NBinningPoint::SetPointContentFromLinearIndex: Binning or content is nullptr");
262 NLogError(
"NBinningPoint::SetPointContentFromLinearIndex: Invalid linear bin index: %lld", linBin);
280 NLogError(
"NBinningPoint::GetMin: Axis %d is nullptr !!!", i);
283 if (axis.compare(a->GetName()) == 0) {
288 NLogError(
"NBinningPoint::GetMin: Axis '%s' not found !!!", axis.c_str());
302 NLogError(
"NBinningPoint::GetMax: Axis %d is nullptr !!!", i);
305 if (axis.compare(a->GetName()) == 0) {
310 NLogError(
"NBinningPoint::GetMax: Axis '%s' not found !!!", axis.c_str());
324 NLogError(
"NBinningPoint::GetCenter: Axis %d is nullptr !!!", i);
327 if (axis.compare(a->GetName()) == 0) {
332 NLogError(
"NBinningPoint::GetCenter: Axis '%s' not found !!!", axis.c_str());
346 NLogError(
"NBinningPoint::GetLabel: Axis %d is nullptr !!!", i);
349 if (axis.compare(a->GetName()) == 0) {
354 NLogError(
"NBinningPoint::GetLabel: Axis '%s' not found !!!", axis.c_str());
368 NLogError(
"NBinningPoint::GetBin: Axis %d is nullptr !!!", i);
371 if (axis.compare(a->GetName()) == 0) {
376 NLogError(
"NBinningPoint::GetLabel: Axis '%s' not found !!!", axis.c_str());
Defines binning mapping and content for NDMSPC histograms.
THnSparse * GetContent() const
Get the template content histogram.
TObjArray * GetAxes() const
Get list of axes from content histogram.
std::vector< Long64_t > GetIds() const
Get list of bin IDs.
Represents a single point in multi-dimensional binning.
NBinningPoint(NBinning *b=nullptr)
Constructor.
Double_t GetBinMax(std::string axis) const
Get the maximum value for a specific axis.
Long64_t Fill(bool ignoreFilledCheck=false)
Fill the binning point content.
Int_t fNDimensions
Number of dimensions.
std::map< int, std::vector< int > > GetBaseAxisRanges() const
Get base axis ranges for the point.
std::string GetString(const std::string &prefix="", bool all=false) const
Returns a string representation of the binning point.
std::string GetBinLabel(std::string axis) const
Get the label for a specific axis.
bool RecalculateStorageCoords(Long64_t entry=-1, bool useBinningDefCheck=false)
Recalculate storage coordinates for the point.
virtual ~NBinningPoint()
Destructor.
Int_t * fContentCoords
Coordinates of the point.
std::vector< std::string > fLabels
Labels for each axis.
Double_t GetBinCenter(std::string axis) const
Returns the center value of the bin along the specified axis.
NBinning * fBinning
Binning object.
NParameters * fParameters
Parameter axis (if any)
Int_t * fBaseBinMin
Base bin minimum (for variable binning)
virtual void Print(Option_t *option="") const
Print binning point information.
Double_t * fMaxs
Maximum values for each axis.
bool SetPointContentFromLinearIndex(Long64_t linBin, bool checkBinningDef=false)
Set point content from linear index.
Int_t fContentNDimensions
Number of dimensions in content histogram.
Double_t * fMins
Minimum values for each axis.
TObject * GetTempObject(const std::string &name) const
Retrieve a temporary object by name.
NStorageTree * fTreeStorage
Storage tree object.
Int_t GetBin(std::string axis) const
Returns the bin index for the specified axis.
std::map< std::string, TObject * > fTempObjects
! Outputs map
Long64_t fEntryNumber
Entry in the storage tree.
Int_t * fBaseBinMax
Base bin maximum (for variable binning)
json fCfg
Configuration object.
virtual void Reset()
Reset the binning point to initial state.
Int_t * fStorageCoords
Storage coordinates of the point.
Double_t GetBinMin(std::string axis) const
Get the minimum value for a specific axis.
NBinning object for managing multi-dimensional binning and axis definitions.
NBinningDef * GetDefinition(const std::string &name="")
Get binning definition by name.
std::string GetCurrentDefinitionName() const
Get current definition name.
std::vector< std::vector< int > > GetAxisRanges(std::vector< int > c) const
Get axis ranges for given coordinates.
AxisType GetAxisType(size_t i) const
Get axis type for a specific axis.
std::vector< TAxis * > GetAxes() const
Get vector of axis pointers.
std::map< std::string, NBinningDef * > GetDefinitions() const
Get all binning definitions.
THnSparse * GetContent() const
Get the content histogram.
TH1D * GetHisto() const
Returns the associated histogram.
static std::string GetCoordsString(const std::vector< int > &coords, int index=-1, int width=0)
Get string representation of coordinates.
static std::vector< int > ArrayToVector(Int_t *v1, int size)
Convert array to vector.