#include "TKDNodeInfo.h" #include "TVectorD.h" #include "TMatrixD.h" #include "TMath.h" ClassImp(TKDNodeInfo) //_________________________________________________________________ TKDNodeInfo::TKDNodeInfo(Int_t dim): TObject() ,fNDim(3*dim) ,fData(0x0) ,fCov(0x0) ,fPar(0x0) { // Default constructor fVal[0] = 0.; fVal[1] = 0.; Build(dim); } //_________________________________________________________________ TKDNodeInfo::TKDNodeInfo(const TKDNodeInfo &ref): TObject((TObject&) ref) ,fNDim(fNDim) ,fData(0x0) ,fCov(0x0) ,fPar(0x0) { // Copy constructor Build(fNDim/3); memcpy(fData, ref.fData, fNDim*sizeof(Float_t)); fVal[0] = ref.fVal[0]; fVal[1] = ref.fVal[1]; if(ref.fCov) (*fCov) = (*ref.fCov); if(ref.fPar) (*fPar) = (*ref.fPar); } //_________________________________________________________________ TKDNodeInfo::~TKDNodeInfo() { // Destructor if(fData) delete [] fData; if(fCov){ delete fPar; delete fCov; } } //_________________________________________________________________ TKDNodeInfo& TKDNodeInfo::operator=(const TKDNodeInfo & ref) { // Info("operator==()", "..."); Int_t ndim = fNDim/3; if(fNDim != ref.fNDim){ fNDim = ref.fNDim; Build(ndim); } memcpy(fData, ref.fData, fNDim*sizeof(Float_t)); fVal[0] = ref.fVal[0]; fVal[1] = ref.fVal[1]; if(ref.fCov) (*fCov) = (*ref.fCov); if(ref.fPar) (*fPar) = (*ref.fPar); return *this; } //_________________________________________________________________ void TKDNodeInfo::Build(Int_t dim) { // Allocate/Reallocate space for this node. // Info("Build()", "..."); if(!dim) return; Int_t lambda = Int_t(1 + dim + .5*dim*(dim+1)); if(fData) delete [] fData; fData = new Float_t[fNDim]; if(fCov){ fCov->ResizeTo(lambda, lambda); fPar->ResizeTo(lambda); } return; } //_________________________________________________________________ void TKDNodeInfo::Print(const Option_t *) const { // Print the content of the node Int_t dim = fNDim/3; printf("x["); for(int idim=0; idim10) return 0.; // support only up to 10 dimensions Int_t lambda = 1 + ndim + (ndim*(ndim+1)>>1); Double_t fdfdp[66]; Int_t ipar = 0; fdfdp[ipar++] = 1.; for(int idim=0; idim