Skip to content
Snippets Groups Projects
Commit 9b6781e2 authored by Marc Pelizaeus's avatar Marc Pelizaeus
Browse files

Add error propagation for component intensities

parent c5d5bd81
No related branches found
No related tags found
No related merge requests found
#include "Examples/JpsiGamKsKlKK/FitParamErrorMatrix.hh"
using namespace ROOT::Minuit2;
FitParamErrorMatrix::FitParamErrorMatrix( ROOT::Minuit2::MnUserCovariance covMatrix, ROOT::Minuit2::MnUserParameters usrParams){
MnUserTransformation trafo = usrParams.Trafo();
_size = usrParams.Parameters().size();
_errMatrix = boost_matrix(_size,_size);
for(unsigned int irow=0; irow<_size; irow++){
for(unsigned int icol=0; icol<_size; icol++){
_errMatrix(irow,icol)=0.0;
}
}
for(unsigned int row=0;row<covMatrix.Nrow(); row++){
for(unsigned int col=0;col<covMatrix.Nrow(); col++){
double element = covMatrix(row,col);
int trow = trafo.ExtOfInt(row);
int tcol = trafo.ExtOfInt(col);
_errMatrix(trow,tcol)=element;
}
}
}
FitParamErrorMatrix::~FitParamErrorMatrix( ){
}
FitParamErrorMatrix::FitParamErrorMatrix(std::vector<double> &theData, int size){
_size=size;
_errMatrix = boost_matrix(_size,_size);
unsigned int irow(0), icol(0);
std::vector<double>::iterator dataIter;
for(dataIter=theData.begin(); dataIter!=theData.end(); dataIter++){
double val = *dataIter;
_errMatrix(irow,icol) = val;
if(icol==_size-1){
icol=0;
irow++;
}else{
icol++;
}
}
}
void FitParamErrorMatrix::Print(std::ostream &os){
for(unsigned int irow=0;irow<_size;irow++){
for(unsigned int icol=0;icol<_size;icol++){
os << _errMatrix(irow,icol) << " ";
}
os << std::endl;
}
}
std::vector<double> FitParamErrorMatrix::Data(){
std::vector<double> theData;
for(unsigned int irow=0;irow<_size;irow++){
for(unsigned int icol=0;icol<_size;icol++){
theData.push_back(_errMatrix(irow,icol) );
}
}
return theData;
}
void FitParamErrorMatrix::Write(std::ostream& os){
std::vector<double> data = Data();
std::vector<double>::iterator dataIter = data.begin();
for(; dataIter!=data.end();dataIter++){
os << *dataIter << std::endl;
}
}
#ifndef _FitParamErrorMatrix_H
#define _FitParamErrorMatrix_H
#include <iostream>
#include <fstream>
#include "Minuit2/MnUserCovariance.h"
#include "Minuit2/MnUserParameters.h"
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
typedef boost::numeric::ublas::matrix<double> boost_matrix;
class FitParamErrorMatrix {
public:
FitParamErrorMatrix( ROOT::Minuit2::MnUserCovariance covMatrix, ROOT::Minuit2::MnUserParameters usrParams );
FitParamErrorMatrix( int size){_errMatrix = boost_matrix(size,size);}
FitParamErrorMatrix(std::vector<double> &theData, int size);
virtual ~FitParamErrorMatrix();
void Print(std::ostream& os);
void Write(std::ostream& os);
std::vector<double> Data();
double operator() (int row, int col) {return _errMatrix(row,col);}
private:
boost_matrix _errMatrix;
unsigned int _size;
};
#endif
#include <iostream>
#include <fstream>
#include "FitParamErrorMatrixStreamer.hh"
#include "ErrLogger/ErrLogger.hh"
FitParamErrorMatrixStreamer::FitParamErrorMatrixStreamer( std::string errFile ){
std::ifstream inputStream;
inputStream.open(errFile.c_str());
if (!inputStream) {
Alert << "can not open " << errFile ;
exit(1);
}
while (!inputStream.eof()) {
double err;
inputStream >> err;
if (!inputStream.fail()) {
_matrixData.push_back(err);
}
}
}
#ifndef _FitParamErrorMatrixStreamer_H
#define _FitParamErrorMatrixStreamer_H
#include <string>
#include <vector>
class FitParamErrorMatrixStreamer {
public :
FitParamErrorMatrixStreamer( std::string errFile );
virtual ~FitParamErrorMatrixStreamer(){};
void matrixData( std::vector<double>& theData, int& nrows ){
theData=_matrixData;
int sizeOfData=(int) theData.size();
nrows=1;
while(nrows*nrows!=sizeOfData){
nrows++;
}
}
private :
std::vector<double> _matrixData;
};
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment