#include "hsymmat.h"
#include <math.h>
HSymMat::HSymMat(void) {
size = 0;
pData = 0;
}
HSymMat::HSymMat(Int_t idim) {
size = (idim * (idim + 1) / 2);
pData = 0;
dim = idim;
}
HSymMat::~HSymMat(void) {
}
Float_t HSymMat::convolution(Float_t v1[], Float_t v2[]) {
Float_t r=0.;
for (Int_t i=0;i<dim;i++) {
for (Int_t j=0;j<dim;j++) {
r += v1[i]*getElement(i,j)*v2[j];
}
}
return r;
}
void HSymMat::transform(const HSymMat &m, Float_t der[]) {
Int_t cols = m.getDim();
Float_t sum;
for (Int_t i=0;i<dim;i++) {
for (Int_t j=i; j<dim; j++) {
sum = 0.;
for (Int_t k=0;k<cols;k++) {
for (Int_t l=0;l<cols;l++) {
sum += m.getElement(k,l)*der[i*cols + k]*der[j*cols + l];
}
}
setElement(i,j,sum);
}
}
}
void HSymMat::Clear(void){
for (Int_t i=0;i<size;i++) pData[i]=0.F;
}
void HSymMat::setElement(const Int_t i,const Float_t elel){
if (i<size)
pData[i]=elel;
else
Error("setElement","Index %i out of bounds",i);
}
void HSymMat::setElement(const Int_t i,const Int_t j,Float_t elel) {
if (i >= dim || j >= dim) {
Error("setElement","Out of bounds! ");
} else {
pData[getLinear(i,j)]=elel;
}
}
void HSymMat::setErr(const Int_t i,const Float_t elel){
if (i >= dim) {
Error("setErr","Out of bounds! ");
} else {
pData[getLinear(i,i)]=elel*elel;
}
}
void HSymMat::setCov(HSymMat& a){
if( dim != a.dim){
Error("setCov","Dimensions don't match! ");
} else {
for(Int_t ind=0; ind<size; ind++) {
pData[ind]=a.pData[ind];
}
}
}
Float_t HSymMat::getElement(const Int_t i) const {
if (i<size)
return pData[i];
else
Error("getElement","Index %i out of bounds",i);
return 0.F;
}
Float_t HSymMat::getElement(const Int_t i,const Int_t j) const {
Int_t ind;
if (i >= dim || j >= dim) {
Error("getElement","Out of bounds! ");
} else {
ind=getLinear(i,j);
return pData[ind];
}
return 0;
}
Float_t HSymMat::getErr(const Int_t i){
if (i >= dim) {
Error("getErr","Out of bounds! ");
} else {
return sqrt(pData[getLinear(i,i)]);
}
return 0;
}
void HSymMat::getCov(HSymMat& a){
if( dim != a.dim) {
Error("getCov","Dimensions don't match! ");
} else {
for(Int_t ind=0; ind<size; ind++){
a.pData[ind]=pData[ind];
}
}
}
void HSymMat::print(void){
printf("Covariance matrix dimension: %i \n",dim);
for(Int_t ir=0; ir<dim; ir++) {
for(Int_t ic=0; ic<dim; ic++) {
printf("%11.4g ",getElement(ir,ic));
}
printf(" \n");
}
}
ClassImp(HSymMat)
ClassImp(HSymMat2)
ClassImp(HSymMat3)
ClassImp(HSymMat4)
ClassImp(HSymMat5)
ClassImp(HSymMat6)
Last change: Sat May 22 13:15:02 2010
Last generated: 2010-05-22 13:15
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.