ROOT logo
/*****************************************************************************
 * Project: RooFit                                                           *
 * Package: RooFitCore                                                       *
 * @(#)root/roofitcore:$Id: RooBinning.cxx 30333 2009-09-21 15:39:17Z wouter $
 * Authors:                                                                  *
 *   WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu       *
 *   DK, David Kirkby,    UC Irvine,         dkirkby@uci.edu                 *
 *                                                                           *
 * Copyright (c) 2000-2005, Regents of the University of California          *
 *                          and Stanford University. All rights reserved.    *
 *                                                                           *
 * Redistribution and use in source and binary forms,                        *
 * with or without modification, are permitted according to the terms        *
 * listed in LICENSE (http://roofit.sourceforge.net/license.txt)             *
 *****************************************************************************/

//////////////////////////////////////////////////////////////////////////////
// 
// BEGIN_HTML 
// Class RooBinning is an implements RooAbsBinning in terms
// of an array of boundary values, posing no constraints on the choice
// of binning, thus allowing variable bin sizes. Various methods allow
// the user to add single bin boundaries, mirrored pairs, or sets of
// uniformly spaced boundaries.  
// END_HTML
//

#include "RooFit.h"

#include "Riostream.h"
#include "Riostream.h"
#include "RooBinning.h"
#include "RooDouble.h"
#include "RooAbsPdf.h"
#include "RooRealVar.h"
#include "RooNumber.h"
#include "RooMsgService.h"
#include "TList.h"

ClassImp(RooBinning)
;


//_____________________________________________________________________________
RooBinning::RooBinning(Double_t xlo, Double_t xhi, const char* name) : 
  RooAbsBinning(name), 
  _xlo(0),
  _xhi(0),
  _ownBoundLo(kTRUE), 
  _ownBoundHi(kTRUE), 
  _array(0)
{
  // Constructor for an initially empty binning defining the range [xlo,xhi]

  setRange(xlo,xhi) ;
}



//_____________________________________________________________________________
RooBinning::RooBinning(Int_t nbins, Double_t xlo, Double_t xhi, const char* name) : 
  RooAbsBinning(name), 
  _xlo(0),
  _xhi(0),
  _ownBoundLo(kTRUE), 
  _ownBoundHi(kTRUE), 
  _array(0)
{
  // Constructor for a uniform binning in 'nbins' bins in the range [xlo,xhi]

  // Uniform bin size constructor
  setRange(xlo,xhi) ;
  addUniform(nbins,xlo,xhi) ;
}




//_____________________________________________________________________________
RooBinning::RooBinning(Int_t nbins, const Double_t* boundaries, const char* name) : 
  RooAbsBinning(name),
  _xlo(0),
  _xhi(0),
  _ownBoundLo(kTRUE), 
  _ownBoundHi(kTRUE), 
  _array(0)
{
  // Constructor for a binning in the range[xlo,xhi] with 'nbins' bin boundaries listed
  // array 'boundaries'

  // Variable bin size constructor
  setRange(boundaries[0],boundaries[nbins]) ;
  while(nbins--) addBoundary(boundaries[nbins]) ;
}



//_____________________________________________________________________________
RooBinning::RooBinning(const RooBinning& other, const char* name) : 
  RooAbsBinning(name),
  _boundaries(other._boundaries),
  _array(0)
{ 
  // Copy constructor
  _xlo = other._xlo ;
  _xhi = other._xhi ;
  _ownBoundLo = other._ownBoundLo ;
  _ownBoundHi = other._ownBoundHi ;
  _nbins = other._nbins ;
}



//_____________________________________________________________________________
RooBinning::~RooBinning() 
{
  // Destructor

  if (_array) delete[] _array ;

}


//_____________________________________________________________________________
Bool_t RooBinning::addBoundary(Double_t boundary) 
{  
  // Add bin boundary at given value

  if (_boundaries.find(boundary)!=_boundaries.end()) {
    // If boundary previously existed as range delimiter, 
    //                    convert to regular boundary now
    if (boundary==_xlo) _ownBoundLo = kFALSE ;
    if (boundary==_xhi) _ownBoundHi = kFALSE ;
    return kFALSE ;    
  }

  // Add a new boundary
  _boundaries.insert(boundary) ;
  updateBinCount() ;
  return kTRUE ;
}



//_____________________________________________________________________________
void RooBinning::addBoundaryPair(Double_t boundary, Double_t mirrorPoint) 
{
  // Add pair of boundaries: one at 'boundary' and one at 2*mirrorPoint-boundary

  addBoundary(boundary) ;
  addBoundary(2*mirrorPoint-boundary) ;
}



//_____________________________________________________________________________
Bool_t RooBinning::removeBoundary(Double_t boundary)
{
  // Remove boundary at given value

  if (_boundaries.find(boundary)!=_boundaries.end()) {
    _boundaries.erase(boundary) ;
    return kFALSE ;
  }

  // Return error status - no boundary found
  return kTRUE ;
}



//_____________________________________________________________________________
Bool_t RooBinning::hasBoundary(Double_t boundary)
{
  // Check if boundary exists at given value

  return (_boundaries.find(boundary)!=_boundaries.end()) ;
}



//_____________________________________________________________________________
void RooBinning::addUniform(Int_t nbins, Double_t xlo, Double_t xhi)
{
  // Add array of nbins uniformly sized bins in range [xlo,xhi]

  Int_t i ;
  Double_t binw = (xhi-xlo)/nbins ;
  for (i=0 ; i<=nbins ; i++) 
    addBoundary(xlo+i*binw) ;  
}



//_____________________________________________________________________________
Int_t RooBinning::binNumber(Double_t x) const
{
  // Return sequential bin number that contains value x where bin
  // zero is the first bin with an upper boundary above the lower bound
  // of the range

  Int_t n(0) ;
  for (set<Double_t>::const_iterator iter = _boundaries.begin() ; iter!=_boundaries.end() ; ++iter) {
    if (x<*iter) {
      return n ;
    }

    // Only increment counter in valid range
    if (*iter> _xlo && n<_nbins-1) n++ ;    
  }  
  return n;
}



//_____________________________________________________________________________
Int_t RooBinning::rawBinNumber(Double_t x) const 
{
  // Return sequential bin number that contains value x where bin
  // zero is the first bin that is defined, regardless if that bin
  // is outside the current defined range
  
 
  // Determine 'raw' bin number (i.e counting all defined boundaries) for given value
  Int_t n(0) ;

  for (set<Double_t>::const_iterator iter = _boundaries.begin() ; iter!=_boundaries.end() ; ++iter) {    
    if (x<*iter) return n>0?n-1:0 ;
    n++ ;
  }
  return n-1;
}



//_____________________________________________________________________________
Double_t RooBinning::nearestBoundary(Double_t x) const 
{
  // Return the value of the nearest boundary to x

  Int_t bn = binNumber(x) ;
  if (fabs(binLow(bn)-x)<fabs(binHigh(bn)-x)) {
    return binLow(bn) ;
  } else {
    return binHigh(bn) ;
  }
}



//_____________________________________________________________________________
Double_t* RooBinning::array() const
{
  // Return array of boundary values

  if (_array) delete[] _array ;
  _array = new Double_t[numBoundaries()] ;

  Int_t i(0) ;
  for (set<Double_t>::const_iterator iter = _boundaries.begin() ; iter!=_boundaries.end() ; ++iter) {
    if (*iter>=_xlo && *iter <=_xhi) {
      _array[i++] = *iter ;
    }
  }
  return _array ;
}



//_____________________________________________________________________________
void RooBinning::setRange(Double_t xlo, Double_t xhi) 
{
  // Change the defined range associated with this binning.
  // Bins that lie outside the new range [xlo,xhi] will not be
  // removed, but will be 'inactive', i.e. the new 0 bin will
  // be the first bin with an upper boundarie > xlo

  if (xlo>xhi) {
    coutE(InputArguments) << "RooUniformBinning::setRange: ERROR low bound > high bound" << endl ;
    return ;
  }
  
  // Remove previous boundaries 
  
  for (set<Double_t>::iterator iter = _boundaries.begin() ; iter!=_boundaries.end() ; ++iter) {    
    if ((*iter == _xlo && _ownBoundLo) || (*iter == _xhi && _ownBoundHi)) {
      _boundaries.erase(iter) ;
    }
  }

  // Insert boundaries at range delimiter, if necessary 
  _ownBoundLo = kFALSE ;
  _ownBoundHi = kFALSE ;
  if (!hasBoundary(xlo)) {
    addBoundary(xlo) ;
    _ownBoundLo = kTRUE ;
  }
  if (!hasBoundary(xhi)) {
    addBoundary(xhi) ;
    _ownBoundHi = kTRUE ;
  }

  _xlo = xlo ;
  _xhi = xhi ;
  
  // Count number of bins with new range 
  updateBinCount() ;
}




//_____________________________________________________________________________
void RooBinning::updateBinCount()
{
  // Update the internal bin counter

  Int_t i(-1) ;
  for (set<Double_t>::const_iterator iter = _boundaries.begin() ; iter!=_boundaries.end() ; ++iter) {    
    if (*iter>=_xlo && *iter <=_xhi) {
      i++ ;
    }
  }
  _nbins = i ;
}



//_____________________________________________________________________________
Bool_t RooBinning::binEdges(Int_t bin, Double_t& xlo, Double_t& xhi) const 
{
  // Return upper and lower bound of bin 'bin'. If the return value
  // is true an error occurred

  if (bin<0 || bin>= _nbins) {
    coutE(InputArguments) << "RooBinning::binEdges ERROR: bin number must be in range (0," << _nbins << ")" << endl ; 
    return kTRUE ;
  }
  
  // Determine sequential bin number for given value
  Int_t n(0) ;
  for (set<Double_t>::const_iterator iter = _boundaries.begin() ; iter!=_boundaries.end() ; ++iter) {    

    if (n==bin && *iter>=_xlo) {
      xlo = *iter ;
      iter++ ;
      xhi = *iter ;
      return kFALSE ;
    }

    // Only increment counter in valid range
    if (*iter>= _xlo && n<_nbins-1) n++ ;
  }

  return kTRUE ;
}



//_____________________________________________________________________________
Double_t RooBinning::binCenter(Int_t bin) const 
{
  // Return the position of the center of bin 'bin'

  Double_t xlo,xhi ;
  if (binEdges(bin,xlo,xhi)) return 0 ;
  return (xlo+xhi)/2 ;
}



//_____________________________________________________________________________
Double_t RooBinning::binWidth(Int_t bin) const 
{
  // Return the width of the requested bin

  Double_t xlo,xhi ;
  if (binEdges(bin,xlo,xhi)) return 0 ;
  return (xhi-xlo);
}



//_____________________________________________________________________________
Double_t RooBinning::binLow(Int_t bin) const 
{
  // Return the lower bound of the requested bin

  Double_t xlo,xhi ;
  if (binEdges(bin,xlo,xhi)) return 0 ;
  return xlo ;
}



//_____________________________________________________________________________
Double_t RooBinning::binHigh(Int_t bin) const  
{
  // Return the upper bound of the requested bin

  Double_t xlo,xhi ;
  if (binEdges(bin,xlo,xhi)) return  0 ;
  return xhi ;
}



//______________________________________________________________________________
void RooBinning::Streamer(TBuffer &R__b)
{
   // Custom streamer that provides backward compatibility to read v1 data

   if (R__b.IsReading()) {

     UInt_t R__s, R__c;
     Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
     if (R__v>1) {
       R__b.ReadClassBuffer(RooBinning::Class(),this,R__v,R__s,R__c);
     } else {
       RooAbsBinning::Streamer(R__b);
       R__b >> _xlo;
       R__b >> _xhi;
       R__b >> _ownBoundLo;
       R__b >> _ownBoundHi;
       R__b >> _nbins;
       
       // Convert TList to set<double>
       TList boundaries ;
       boundaries.Streamer(R__b);
       TIterator* iter = boundaries.MakeIterator() ;
       RooDouble* elem ;
       while((elem=(RooDouble*)iter->Next())) {
	 _boundaries.insert(*elem) ;
       }
       delete iter ;
       
       R__b.CheckByteCount(R__s, R__c, RooBinning::IsA());
     }
   } else {
     R__b.WriteClassBuffer(RooBinning::Class(),this);
   }
}


 RooBinning.cxx:1
 RooBinning.cxx:2
 RooBinning.cxx:3
 RooBinning.cxx:4
 RooBinning.cxx:5
 RooBinning.cxx:6
 RooBinning.cxx:7
 RooBinning.cxx:8
 RooBinning.cxx:9
 RooBinning.cxx:10
 RooBinning.cxx:11
 RooBinning.cxx:12
 RooBinning.cxx:13
 RooBinning.cxx:14
 RooBinning.cxx:15
 RooBinning.cxx:16
 RooBinning.cxx:17
 RooBinning.cxx:18
 RooBinning.cxx:19
 RooBinning.cxx:20
 RooBinning.cxx:21
 RooBinning.cxx:22
 RooBinning.cxx:23
 RooBinning.cxx:24
 RooBinning.cxx:25
 RooBinning.cxx:26
 RooBinning.cxx:27
 RooBinning.cxx:28
 RooBinning.cxx:29
 RooBinning.cxx:30
 RooBinning.cxx:31
 RooBinning.cxx:32
 RooBinning.cxx:33
 RooBinning.cxx:34
 RooBinning.cxx:35
 RooBinning.cxx:36
 RooBinning.cxx:37
 RooBinning.cxx:38
 RooBinning.cxx:39
 RooBinning.cxx:40
 RooBinning.cxx:41
 RooBinning.cxx:42
 RooBinning.cxx:43
 RooBinning.cxx:44
 RooBinning.cxx:45
 RooBinning.cxx:46
 RooBinning.cxx:47
 RooBinning.cxx:48
 RooBinning.cxx:49
 RooBinning.cxx:50
 RooBinning.cxx:51
 RooBinning.cxx:52
 RooBinning.cxx:53
 RooBinning.cxx:54
 RooBinning.cxx:55
 RooBinning.cxx:56
 RooBinning.cxx:57
 RooBinning.cxx:58
 RooBinning.cxx:59
 RooBinning.cxx:60
 RooBinning.cxx:61
 RooBinning.cxx:62
 RooBinning.cxx:63
 RooBinning.cxx:64
 RooBinning.cxx:65
 RooBinning.cxx:66
 RooBinning.cxx:67
 RooBinning.cxx:68
 RooBinning.cxx:69
 RooBinning.cxx:70
 RooBinning.cxx:71
 RooBinning.cxx:72
 RooBinning.cxx:73
 RooBinning.cxx:74
 RooBinning.cxx:75
 RooBinning.cxx:76
 RooBinning.cxx:77
 RooBinning.cxx:78
 RooBinning.cxx:79
 RooBinning.cxx:80
 RooBinning.cxx:81
 RooBinning.cxx:82
 RooBinning.cxx:83
 RooBinning.cxx:84
 RooBinning.cxx:85
 RooBinning.cxx:86
 RooBinning.cxx:87
 RooBinning.cxx:88
 RooBinning.cxx:89
 RooBinning.cxx:90
 RooBinning.cxx:91
 RooBinning.cxx:92
 RooBinning.cxx:93
 RooBinning.cxx:94
 RooBinning.cxx:95
 RooBinning.cxx:96
 RooBinning.cxx:97
 RooBinning.cxx:98
 RooBinning.cxx:99
 RooBinning.cxx:100
 RooBinning.cxx:101
 RooBinning.cxx:102
 RooBinning.cxx:103
 RooBinning.cxx:104
 RooBinning.cxx:105
 RooBinning.cxx:106
 RooBinning.cxx:107
 RooBinning.cxx:108
 RooBinning.cxx:109
 RooBinning.cxx:110
 RooBinning.cxx:111
 RooBinning.cxx:112
 RooBinning.cxx:113
 RooBinning.cxx:114
 RooBinning.cxx:115
 RooBinning.cxx:116
 RooBinning.cxx:117
 RooBinning.cxx:118
 RooBinning.cxx:119
 RooBinning.cxx:120
 RooBinning.cxx:121
 RooBinning.cxx:122
 RooBinning.cxx:123
 RooBinning.cxx:124
 RooBinning.cxx:125
 RooBinning.cxx:126
 RooBinning.cxx:127
 RooBinning.cxx:128
 RooBinning.cxx:129
 RooBinning.cxx:130
 RooBinning.cxx:131
 RooBinning.cxx:132
 RooBinning.cxx:133
 RooBinning.cxx:134
 RooBinning.cxx:135
 RooBinning.cxx:136
 RooBinning.cxx:137
 RooBinning.cxx:138
 RooBinning.cxx:139
 RooBinning.cxx:140
 RooBinning.cxx:141
 RooBinning.cxx:142
 RooBinning.cxx:143
 RooBinning.cxx:144
 RooBinning.cxx:145
 RooBinning.cxx:146
 RooBinning.cxx:147
 RooBinning.cxx:148
 RooBinning.cxx:149
 RooBinning.cxx:150
 RooBinning.cxx:151
 RooBinning.cxx:152
 RooBinning.cxx:153
 RooBinning.cxx:154
 RooBinning.cxx:155
 RooBinning.cxx:156
 RooBinning.cxx:157
 RooBinning.cxx:158
 RooBinning.cxx:159
 RooBinning.cxx:160
 RooBinning.cxx:161
 RooBinning.cxx:162
 RooBinning.cxx:163
 RooBinning.cxx:164
 RooBinning.cxx:165
 RooBinning.cxx:166
 RooBinning.cxx:167
 RooBinning.cxx:168
 RooBinning.cxx:169
 RooBinning.cxx:170
 RooBinning.cxx:171
 RooBinning.cxx:172
 RooBinning.cxx:173
 RooBinning.cxx:174
 RooBinning.cxx:175
 RooBinning.cxx:176
 RooBinning.cxx:177
 RooBinning.cxx:178
 RooBinning.cxx:179
 RooBinning.cxx:180
 RooBinning.cxx:181
 RooBinning.cxx:182
 RooBinning.cxx:183
 RooBinning.cxx:184
 RooBinning.cxx:185
 RooBinning.cxx:186
 RooBinning.cxx:187
 RooBinning.cxx:188
 RooBinning.cxx:189
 RooBinning.cxx:190
 RooBinning.cxx:191
 RooBinning.cxx:192
 RooBinning.cxx:193
 RooBinning.cxx:194
 RooBinning.cxx:195
 RooBinning.cxx:196
 RooBinning.cxx:197
 RooBinning.cxx:198
 RooBinning.cxx:199
 RooBinning.cxx:200
 RooBinning.cxx:201
 RooBinning.cxx:202
 RooBinning.cxx:203
 RooBinning.cxx:204
 RooBinning.cxx:205
 RooBinning.cxx:206
 RooBinning.cxx:207
 RooBinning.cxx:208
 RooBinning.cxx:209
 RooBinning.cxx:210
 RooBinning.cxx:211
 RooBinning.cxx:212
 RooBinning.cxx:213
 RooBinning.cxx:214
 RooBinning.cxx:215
 RooBinning.cxx:216
 RooBinning.cxx:217
 RooBinning.cxx:218
 RooBinning.cxx:219
 RooBinning.cxx:220
 RooBinning.cxx:221
 RooBinning.cxx:222
 RooBinning.cxx:223
 RooBinning.cxx:224
 RooBinning.cxx:225
 RooBinning.cxx:226
 RooBinning.cxx:227
 RooBinning.cxx:228
 RooBinning.cxx:229
 RooBinning.cxx:230
 RooBinning.cxx:231
 RooBinning.cxx:232
 RooBinning.cxx:233
 RooBinning.cxx:234
 RooBinning.cxx:235
 RooBinning.cxx:236
 RooBinning.cxx:237
 RooBinning.cxx:238
 RooBinning.cxx:239
 RooBinning.cxx:240
 RooBinning.cxx:241
 RooBinning.cxx:242
 RooBinning.cxx:243
 RooBinning.cxx:244
 RooBinning.cxx:245
 RooBinning.cxx:246
 RooBinning.cxx:247
 RooBinning.cxx:248
 RooBinning.cxx:249
 RooBinning.cxx:250
 RooBinning.cxx:251
 RooBinning.cxx:252
 RooBinning.cxx:253
 RooBinning.cxx:254
 RooBinning.cxx:255
 RooBinning.cxx:256
 RooBinning.cxx:257
 RooBinning.cxx:258
 RooBinning.cxx:259
 RooBinning.cxx:260
 RooBinning.cxx:261
 RooBinning.cxx:262
 RooBinning.cxx:263
 RooBinning.cxx:264
 RooBinning.cxx:265
 RooBinning.cxx:266
 RooBinning.cxx:267
 RooBinning.cxx:268
 RooBinning.cxx:269
 RooBinning.cxx:270
 RooBinning.cxx:271
 RooBinning.cxx:272
 RooBinning.cxx:273
 RooBinning.cxx:274
 RooBinning.cxx:275
 RooBinning.cxx:276
 RooBinning.cxx:277
 RooBinning.cxx:278
 RooBinning.cxx:279
 RooBinning.cxx:280
 RooBinning.cxx:281
 RooBinning.cxx:282
 RooBinning.cxx:283
 RooBinning.cxx:284
 RooBinning.cxx:285
 RooBinning.cxx:286
 RooBinning.cxx:287
 RooBinning.cxx:288
 RooBinning.cxx:289
 RooBinning.cxx:290
 RooBinning.cxx:291
 RooBinning.cxx:292
 RooBinning.cxx:293
 RooBinning.cxx:294
 RooBinning.cxx:295
 RooBinning.cxx:296
 RooBinning.cxx:297
 RooBinning.cxx:298
 RooBinning.cxx:299
 RooBinning.cxx:300
 RooBinning.cxx:301
 RooBinning.cxx:302
 RooBinning.cxx:303
 RooBinning.cxx:304
 RooBinning.cxx:305
 RooBinning.cxx:306
 RooBinning.cxx:307
 RooBinning.cxx:308
 RooBinning.cxx:309
 RooBinning.cxx:310
 RooBinning.cxx:311
 RooBinning.cxx:312
 RooBinning.cxx:313
 RooBinning.cxx:314
 RooBinning.cxx:315
 RooBinning.cxx:316
 RooBinning.cxx:317
 RooBinning.cxx:318
 RooBinning.cxx:319
 RooBinning.cxx:320
 RooBinning.cxx:321
 RooBinning.cxx:322
 RooBinning.cxx:323
 RooBinning.cxx:324
 RooBinning.cxx:325
 RooBinning.cxx:326
 RooBinning.cxx:327
 RooBinning.cxx:328
 RooBinning.cxx:329
 RooBinning.cxx:330
 RooBinning.cxx:331
 RooBinning.cxx:332
 RooBinning.cxx:333
 RooBinning.cxx:334
 RooBinning.cxx:335
 RooBinning.cxx:336
 RooBinning.cxx:337
 RooBinning.cxx:338
 RooBinning.cxx:339
 RooBinning.cxx:340
 RooBinning.cxx:341
 RooBinning.cxx:342
 RooBinning.cxx:343
 RooBinning.cxx:344
 RooBinning.cxx:345
 RooBinning.cxx:346
 RooBinning.cxx:347
 RooBinning.cxx:348
 RooBinning.cxx:349
 RooBinning.cxx:350
 RooBinning.cxx:351
 RooBinning.cxx:352
 RooBinning.cxx:353
 RooBinning.cxx:354
 RooBinning.cxx:355
 RooBinning.cxx:356
 RooBinning.cxx:357
 RooBinning.cxx:358
 RooBinning.cxx:359
 RooBinning.cxx:360
 RooBinning.cxx:361
 RooBinning.cxx:362
 RooBinning.cxx:363
 RooBinning.cxx:364
 RooBinning.cxx:365
 RooBinning.cxx:366
 RooBinning.cxx:367
 RooBinning.cxx:368
 RooBinning.cxx:369
 RooBinning.cxx:370
 RooBinning.cxx:371
 RooBinning.cxx:372
 RooBinning.cxx:373
 RooBinning.cxx:374
 RooBinning.cxx:375
 RooBinning.cxx:376
 RooBinning.cxx:377
 RooBinning.cxx:378
 RooBinning.cxx:379
 RooBinning.cxx:380
 RooBinning.cxx:381
 RooBinning.cxx:382
 RooBinning.cxx:383
 RooBinning.cxx:384
 RooBinning.cxx:385
 RooBinning.cxx:386
 RooBinning.cxx:387
 RooBinning.cxx:388
 RooBinning.cxx:389
 RooBinning.cxx:390
 RooBinning.cxx:391
 RooBinning.cxx:392
 RooBinning.cxx:393
 RooBinning.cxx:394
 RooBinning.cxx:395
 RooBinning.cxx:396
 RooBinning.cxx:397
 RooBinning.cxx:398
 RooBinning.cxx:399
 RooBinning.cxx:400
 RooBinning.cxx:401
 RooBinning.cxx:402
 RooBinning.cxx:403
 RooBinning.cxx:404
 RooBinning.cxx:405
 RooBinning.cxx:406
 RooBinning.cxx:407
 RooBinning.cxx:408
 RooBinning.cxx:409
 RooBinning.cxx:410
 RooBinning.cxx:411
 RooBinning.cxx:412
 RooBinning.cxx:413
 RooBinning.cxx:414
 RooBinning.cxx:415
 RooBinning.cxx:416
 RooBinning.cxx:417
 RooBinning.cxx:418
 RooBinning.cxx:419
 RooBinning.cxx:420
 RooBinning.cxx:421
 RooBinning.cxx:422
 RooBinning.cxx:423
 RooBinning.cxx:424
 RooBinning.cxx:425
 RooBinning.cxx:426
 RooBinning.cxx:427
 RooBinning.cxx:428
 RooBinning.cxx:429
 RooBinning.cxx:430
 RooBinning.cxx:431
 RooBinning.cxx:432
 RooBinning.cxx:433
 RooBinning.cxx:434
 RooBinning.cxx:435
 RooBinning.cxx:436
 RooBinning.cxx:437
 RooBinning.cxx:438
 RooBinning.cxx:439
 RooBinning.cxx:440
 RooBinning.cxx:441
 RooBinning.cxx:442
 RooBinning.cxx:443
 RooBinning.cxx:444