```/*****************************************************************************
* Project: RooFit                                                           *
* author: Max Baak (mbaak@cern.ch)                                          *
*****************************************************************************/

// Written by Max Baak (mbaak@cern.ch)
// 2-dimensional morph function between a list of function-numbers as a function of two input parameter (m1 and m2).
// The matrix mrefpoints assigns a function value to each m1,m2 coordinate.
// Morphing can be set to be linear or non-linear, or mixture of the two.

#include "Riostream.h"

#include "Roo2DMomentMorphFunction.h"
#include "RooAbsReal.h"
#include "RooAbsCategory.h"
#include <math.h>
#include "TMath.h"
#include "TTree.h"

/*
// Example usage:

TMatrixD foo(9,3);

foo(0,0) =   0;      // coordinate of variable m1
foo(0,1) =   0;      // coordinate of variable m2
foo(0,2) =   0**2;   // function value at (m1,m2) = 0,0
foo(1,0) = 100;
foo(1,1) =   0;
foo(1,2) =   1**2;
foo(2,0) = 200;
foo(2,1) =   0;
foo(2,2) =   2**2;

foo(3,0) = 0;
foo(3,1) = 150;
foo(3,2) = 4**2;
foo(4,0) = 100;
foo(4,1) = 150;
foo(4,2) = 5**2;
foo(5,0) = 200;
foo(5,1) = 150;
foo(5,2) = 8**2;

foo(6,0) = 0;
foo(6,1) = 300;
foo(6,2) = 8**2;
foo(7,0) = 100;
foo(7,1) = 300;
foo(7,2) = 8.5**2;
foo(8,0) = 200;
foo(8,1) = 300;
foo(8,2) = 9**2;

// need to provide at least 4 coordinates to Roo2DMomentMorphFunction for 2d extrapolation

foo.Print();

RooRealVar m1("m1","m1",50,0,200);
RooRealVar m2("m2","m2",50,0,300);
Roo2DMomentMorphFunction bar("bar","bar", m1, m2, foo );

bar.Print();
*/

using namespace std;

ClassImp(Roo2DMomentMorphFunction)

//_____________________________________________________________________________
Roo2DMomentMorphFunction::Roo2DMomentMorphFunction(const char *name, const char *title,
RooAbsReal& _m1, RooAbsReal& _m2,
const TMatrixD& mrefpoints, const Setting& setting, const Bool_t& verbose ) :
RooAbsReal(name,title),
m1("m1","m1",this,_m1),
m2("m2","m2",this,_m2),
_setting(setting),
_verbose(verbose),
_npoints( mrefpoints.GetNrows() ),
_mref(mrefpoints)
{
// cross-check that we have enough reference points
if ( mrefpoints.GetNrows()<4 ) {
cerr << "Roo2DMomentMorphFunction::constructor(" << GetName() << ") ERROR: less than four reference points provided." << endl ;
assert(0);
}
// cross-check that we have enough reference points
if ( mrefpoints.GetNcols()!=3 ) {
cerr << "RooPolyMorph2D::constructor(" << GetName() << ") ERROR: no reference values provided." << endl ;
assert(0);
}

// recast matrix into more useful form
_frac.ResizeTo( _npoints );

initialize();
}

//_____________________________________________________________________________
Roo2DMomentMorphFunction::Roo2DMomentMorphFunction( const char *name, const char *title,
RooAbsReal& _m1, RooAbsReal& _m2,
const Int_t& nrows, const Double_t* dm1arr, const Double_t* dm2arr, const Double_t* dvalarr,
const Setting& setting, const Bool_t& verbose ) :
RooAbsReal(name,title),
m1("m1","m1",this,_m1),
m2("m2","m2",this,_m2),
_setting(setting),
_verbose( verbose ),
_npoints( nrows )
{
// cross-check that we have enough reference points
if ( nrows<4 ) {
cerr << "Roo2DMomentMorphFunction::constructor(" << GetName() << ") ERROR: less than four reference points provided." << endl ;
assert(0);
}

// recast tree into more useful form
_mref.ResizeTo( _npoints,3 );
_frac.ResizeTo( _npoints );

for (int i=0; i<_npoints; ++i) {
_mref(i,0) = dm1arr[i] ;
_mref(i,1) = dm2arr[i]  ;
_mref(i,2) = dvalarr[i] ;
}

initialize();
}

//_____________________________________________________________________________
Roo2DMomentMorphFunction::Roo2DMomentMorphFunction(const Roo2DMomentMorphFunction& other, const char* name) :
RooAbsReal(other,name),
m1("m1",this,other.m1),
m2("m2",this,other.m2),
_setting(other._setting),
_verbose(other._verbose),
_npoints(other._npoints),
_mref(other._mref),
_frac(other._frac)
{
initialize();
}

//_____________________________________________________________________________
Roo2DMomentMorphFunction::~Roo2DMomentMorphFunction()
{
}

//_____________________________________________________________________________
void
Roo2DMomentMorphFunction::initialize()
{
Double_t xmin(1e300), xmax(-1e300), ymin(1e300), ymax(-1e300);

// transformation matrix for non-linear extrapolation, needed in evaluate()
for (Int_t k=0; k<_npoints; ++k) {
if (_mref(k,0)<xmin) { xmin=_mref(k,0); _ixmin=k; }
if (_mref(k,0)>xmax) { xmax=_mref(k,0); _ixmax=k; }
if (_mref(k,1)<ymin) { ymin=_mref(k,1); _iymin=k; }
if (_mref(k,1)>ymax) { ymax=_mref(k,1); _iymax=k; }
}

// resize
_MSqr.ResizeTo(4,4);
_squareVec.ResizeTo(4,2);
}

//_____________________________________________________________________________
Double_t
Roo2DMomentMorphFunction::evaluate() const
{
if (_verbose) { cout << "Now in evaluate." << endl; }
if (_verbose)  { cout << "x = " << m1 << " ; y = " << m2 << endl; }

calculateFractions(_verbose); // verbose turned off

Double_t ret = 0.0;
for (Int_t i=0; i<4; ++i) { ret += ( _mref(_squareIdx[i],2) * _frac[_squareIdx[i]] ) ; }

if (_verbose) { cout << "End of evaluate : " << ret << endl; }

//return (ret>0 ? ret : 0) ;
return ret;
}

//_____________________________________________________________________________
void
Roo2DMomentMorphFunction::calculateFractions(Bool_t verbose) const
{
double sumfrac(0.);

if (_setting == Linear || _setting == LinearPosFractions) {
// reset all fractions
for (Int_t i=0; i<_npoints; ++i) { _frac[i]=0.0; }

// this sets _squareVec and _squareIdx quantities and MSqr
(void) findSquare(m1,m2);

std::vector<double> deltavec(4,1.0);
deltavec[1] = m1-_squareVec(0,0) ;
deltavec[2] = m2-_squareVec(0,1) ;
deltavec[3] = deltavec[1]*deltavec[2] ;

for (Int_t i=0; i<4; ++i) {
double ffrac=0.;
for (Int_t j=0; j<4; ++j) { ffrac += _MSqr(j,i) * deltavec[j]; }

// set fractions
_frac[_squareIdx[i]] = ffrac;
if (ffrac>0) sumfrac += ffrac;

if (verbose) {
cout << _squareIdx[i] << " " << ffrac << " " << _squareVec(i,0) << " " << _squareVec(i,1) << endl;
}
}
}

if (_setting == LinearPosFractions) {
for (Int_t i=0; i<4; ++i) {
if (_frac[_squareIdx[i]]<0) { _frac[_squareIdx[i]] = 0; }
_frac[_squareIdx[i]] *= (1.0/sumfrac) ;
}
}
}

//_____________________________________________________________________________
Bool_t
Roo2DMomentMorphFunction::findSquare(const double& x, const double& y) const
{
bool squareFound(false);

std::vector< std::pair<int,double> > idvec;

Double_t xspacing = (_mref(_ixmax,0)-_mref(_ixmin,0)) / TMath::Sqrt(_npoints) ;
Double_t yspacing = (_mref(_iymax,1)-_mref(_iymin,1)) / TMath::Sqrt(_npoints) ;

Double_t dx(0), dy(0), delta(0);
for (Int_t k=0; k<_npoints; ++k) {
dx = (x-_mref(k,0))/xspacing ;
dy = (y-_mref(k,1))/yspacing ;
delta = TMath::Sqrt(dx*dx+dy*dy) ;
idvec.push_back( std::pair<int,double>(k,delta) );
}

// order points closest to (x,y)
sort(idvec.begin(),idvec.end(),SorterL2H());
std::vector< std::pair<int,double> >::iterator itr = idvec.begin();
std::vector<int> cidx;
for(; itr!=idvec.end(); ++itr) {
cidx.push_back(itr->first);
}

// 1. point falls outside available ref points: pick three square points.
//    fall-back option
_squareVec(0,0) = _mref(cidx[0],0);
_squareVec(0,1) = _mref(cidx[0],1);
_squareIdx[0] = cidx[0];
_squareVec(1,0) = _mref(cidx[1],0);
_squareVec(1,1) = _mref(cidx[1],1);
_squareIdx[1] = cidx[1];
_squareVec(2,0) = _mref(cidx[2],0);
_squareVec(2,1) = _mref(cidx[2],1);
_squareIdx[2] = cidx[2];
_squareVec(3,0) = _mref(cidx[3],0);
_squareVec(3,1) = _mref(cidx[3],1);
_squareIdx[3] = cidx[3];

// 2. try to find square enclosing square
if ( x>_mref(_ixmin,0) &&
x<_mref(_ixmax,0) &&
y>_mref(_iymin,1) &&
y<_mref(_iymax,1) )
{
for (unsigned int i=0; i<cidx.size() && !squareFound; ++i)
for (unsigned int j=i+1; j<cidx.size() && !squareFound; ++j)
for (unsigned int k=j+1; k<cidx.size() && !squareFound; ++k)
for (unsigned int l=k+1; l<cidx.size() && !squareFound; ++l) {
if ( isAcceptableSquare(_mref(cidx[i],0),_mref(cidx[i],1),_mref(cidx[j],0),_mref(cidx[j],1),_mref(cidx[k],0),_mref(cidx[k],1),_mref(cidx[l],0),_mref(cidx[l],1)) ) {
if (  pointInSquare(x,y,_mref(cidx[i],0),_mref(cidx[i],1),_mref(cidx[j],0),_mref(cidx[j],1),_mref(cidx[k],0),_mref(cidx[k],1),_mref(cidx[l],0),_mref(cidx[l],1)) ) {
_squareVec(0,0) = _mref(cidx[i],0);
_squareVec(0,1) = _mref(cidx[i],1);
_squareIdx[0] = cidx[i];
_squareVec(1,0) = _mref(cidx[j],0);
_squareVec(1,1) = _mref(cidx[j],1);
_squareIdx[1] = cidx[j];
_squareVec(2,0) = _mref(cidx[k],0);
_squareVec(2,1) = _mref(cidx[k],1);
_squareIdx[2] = cidx[k];
_squareVec(3,0) = _mref(cidx[l],0);
_squareVec(3,1) = _mref(cidx[l],1);
_squareIdx[3] = cidx[l];
squareFound=true;
}
}
}
}

// construct transformation matrix for linear extrapolation
TMatrixD M(4,4);
for (Int_t k=0; k<4; ++k) {
dx = _squareVec(k,0) - _squareVec(0,0) ;
dy = _squareVec(k,1) - _squareVec(0,1) ;
M(k,0) = 1.0 ;
M(k,1) = dx ;
M(k,2) = dy ;
M(k,3) = dx*dy ;
}

_MSqr = M.Invert();

return squareFound;
}

//_____________________________________________________________________________
Bool_t Roo2DMomentMorphFunction::onSameSide(const double& p1x, const double& p1y, const double& p2x, const double& p2y, const double& ax, const double& ay, const double& bx, const double& by) const
{
// p1 and p2 on same side of line b-a ?
Double_t cp1 = myCrossProduct(bx-ax, by-ay, p1x-ax, p1y-ay);
Double_t cp2 = myCrossProduct(bx-ax, by-ay, p2x-ax, p2y-ay);
if (cp1*cp2 >= 0) return true;
else return false;
}

//_____________________________________________________________________________
Bool_t
Roo2DMomentMorphFunction::pointInSquare(const double& px, const double& py, const double& ax, const double& ay, const double& bx, const double& by, const double& cx, const double& cy, const double& dx, const double& dy) const
{
bool insquare(false);

int ntri(0);
if (ntri<2) ntri += static_cast<int>( pointInTriangle(px,py,ax,ay,bx,by,cx,cy) );
if (ntri<2) ntri += static_cast<int>( pointInTriangle(px,py,ax,ay,bx,by,dx,dy) );
if (ntri<2) ntri += static_cast<int>( pointInTriangle(px,py,ax,ay,cx,cy,dx,dy) );
if (ntri<2) ntri += static_cast<int>( pointInTriangle(px,py,bx,by,cx,cy,dx,dy) );

if (ntri>=2) insquare=true;
else insquare=false;

return insquare;
}

//_____________________________________________________________________________
Bool_t
Roo2DMomentMorphFunction::pointInTriangle(const double& px, const double& py, const double& ax, const double& ay, const double& bx, const double& by, const double& cx, const double& cy) const
{
if (onSameSide(px,py,ax,ay,bx,by,cx,cy) && onSameSide(px,py,bx,by,ax,ay,cx,cy) && onSameSide(px,py,cx,cy,ax,ay,bx,by)) return true;
else return false;
}

//_____________________________________________________________________________
Double_t
Roo2DMomentMorphFunction::myCrossProduct(const double& ax, const double& ay, const double& bx, const double& by) const
{
return ( ax*by - bx*ay );
}

//_____________________________________________________________________________
Bool_t
Roo2DMomentMorphFunction::isAcceptableSquare(const double& ax, const double& ay, const double& bx, const double& by, const double& cx, const double& cy, const double& dx, const double& dy) const
{
// reject kinked shapes
if ( pointInTriangle(dx,dy,ax,ax,bx,by,cx,cy) ||
pointInTriangle(cx,cy,ax,ay,bx,by,dx,dy) ||
pointInTriangle(bx,by,ax,ay,cx,cy,dx,dy) ||
pointInTriangle(ax,ay,bx,by,cx,cy,dx,dy) ) return false;
else return true;
}

void
Roo2DMomentMorphFunction::Summary() const
{
for( Int_t i=0; i<_npoints; i++ ){
cout << this << " " << i << " " << _mref(i,0) << " " << _mref(i,1) << " " << _mref(i,2) << endl;
}
}

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