@@ -132,15 +132,21 @@ void Domains::ProductDomain::readVariable(RooRealVar const &var)
132132
133133void Domains::ProductDomain::readBinning (ProductDomainElement &elem, RooAbsBinning const &binning)
134134{
135+ elem.hasNBins = false ;
136+ elem.nBins = 0 ;
137+ elem.edges .clear ();
138+
139+ const int nBins = binning.numBins ();
140+ if (nBins <= 0 ) {
141+ return ;
142+ }
143+
135144 if (binning.isUniform ()) {
136145 elem.hasNBins = true ;
137- elem.nBins = binning.numBins ();
138- elem.edges .clear ();
146+ elem.nBins = nBins;
139147 } else {
140- elem.hasNBins = false ;
141- elem.edges .clear ();
142148 elem.edges .push_back (binning.binLow (0 ));
143- for (int i = 0 ; i < binning. numBins () ; ++i) {
149+ for (int i = 0 ; i < nBins ; ++i) {
144150 elem.edges .push_back (binning.binHigh (i));
145151 }
146152 }
@@ -178,7 +184,7 @@ void Domains::ProductDomain::applyBinning(RooRealVar &var, ProductDomainElement
178184 binning.addBoundary (edge);
179185 }
180186 var.setBinning (binning, name);
181- } else if (elem.hasNBins ) {
187+ } else if (elem.hasNBins && elem. nBins != 0 ) {
182188 var.setBins (elem.nBins , name);
183189 }
184190}
@@ -190,7 +196,7 @@ void Domains::ProductDomain::writeBinning(RooFit::Detail::JSONNode &node, Produc
190196 for (double edge : elem.edges ) {
191197 edges.append_child () << edge;
192198 }
193- } else if (elem.hasNBins ) {
199+ } else if (elem.hasNBins && elem. nBins != 0 ) {
194200 node[" nbins" ] << elem.nBins ;
195201 }
196202}
@@ -255,8 +261,8 @@ void Domains::ProductDomain::readJSON(RooFit::Detail::JSONNode const &node)
255261 }
256262 }
257263 } else if (varNode.has_child (" nbins" )) {
258- elem.hasNBins = true ;
259264 elem.nBins = varNode[" nbins" ].val_int ();
265+ elem.hasNBins = elem.nBins != 0 ;
260266 elem.edges .clear ();
261267 }
262268 }
0 commit comments