/usr/include/root/Roo2DMomentMorphFunction.h is in libroot-roofit-dev 5.34.30-0ubuntu8.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | /*****************************************************************************
* Project: RooFit *
* author: Max Baak (mbaak@cern.ch) *
*****************************************************************************/
// Written by Max Baak (mbaak@cern.ch)
// 2-dimensional morph function between a list of input functions (varlist) as a function of one input parameter (m).
// The vector mrefpoints assigns an m-number to each function in the function list.
// For example: varlist can contain MC histograms (or single numbers) of a reconstructed mass, for certain
// true Higgs masses indicated in mrefpoints. the input parameter m is the true (continuous) Higgs mass.
// Morphing can be set to be linear or non-linear, or mixture of the two.
#ifndef ROO2DMOMENTMORPHFUNCTION
#define ROO2DMOMENTMORPHFUNCTION
#include "RooAbsReal.h"
#include "RooRealProxy.h"
#include "RooCategoryProxy.h"
#include "RooAbsReal.h"
#include "RooAbsCategory.h"
#include "TMatrix.h"
#include "TVectorD.h"
#include <vector>
#include <string>
class Roo2DMomentMorphFunction : public RooAbsReal {
public:
enum Setting { Linear, LinearPosFractions } ;
Roo2DMomentMorphFunction() {} ;
Roo2DMomentMorphFunction( const char *name, const char *title,
RooAbsReal& _m1, RooAbsReal& _m2,
const TMatrixD& mrefpoints, const Setting& setting = Linear, const Bool_t& verbose=false ) ;
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 = Linear, const Bool_t& verbose=false ) ;
Roo2DMomentMorphFunction( const Roo2DMomentMorphFunction& other, const char* name=0 );
virtual TObject* clone( const char* newname ) const { return new Roo2DMomentMorphFunction(*this,newname); }
virtual ~Roo2DMomentMorphFunction() ;
void setMode( const Setting& setting ) { _setting=setting; }
void Summary() const;
protected:
Double_t evaluate() const ;
void initialize();
void calculateFractions(Bool_t verbose=kTRUE) const;
RooRealProxy m1 ;
RooRealProxy m2 ;
Setting _setting;
Bool_t _verbose;
Int_t _ixmin, _ixmax, _iymin, _iymax;
Int_t _npoints;
mutable TMatrixD _mref;
mutable TMatrixD _MSqr;
mutable TVectorD _frac;
mutable TMatrixD _squareVec;
mutable int _squareIdx[4];
private:
Bool_t findSquare(const double& x, const double& y) const;
Bool_t 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 ;
Bool_t 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_t 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 ;
Double_t myCrossProduct(const double& ax, const double& ay, const double& bx, const double& by) const ;
Bool_t 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;
struct SorterL2H {
bool operator() (const std::pair<int,double>& p1, const std::pair<int,double>& p2) {
return (p1.second<p2.second);
}
};
private:
ClassDef(Roo2DMomentMorphFunction,1)
};
#endif
|