using namespace std;
#include "htrb2correction.h"
#include "TBuffer.h"
#include <iostream>
#include <iomanip>
#include <ctype.h>
#include <stdlib.h>
ClassImp(HTrb2Correction)
HTrb2Correction::HTrb2Correction(const Char_t* temperatureSensor)
: nValuesPerChannel(256) {
SetName(temperatureSensor);
nChannels=0;
highResolutionFlag=-1;
subeventId=-1;
}
Float_t* HTrb2Correction::makeArray() {
if (boardType.CompareTo("TRB")==0) {
if (nChannels==0) {
nChannels=128;
corrData.Set(nChannels*nValuesPerChannel);
corrData.Reset();
}
return corrData.GetArray();
} else {
Error("makeArray","Board %s has not type TRB",GetName());
return 0;
}
}
void HTrb2Correction::deleteArray() {
nChannels=0;
corrData.Set(0);
}
Float_t HTrb2Correction::getCorrection(Int_t c, Int_t i) {
if (nChannels>0 && c>=0 && c<nChannels && i>=0 && i<nValuesPerChannel) {
return (corrData.GetArray())[c*nValuesPerChannel+i];
} else {
Error("getCorrection","No corrections or invalid address");
return 0;
}
}
void HTrb2Correction::setCorrection(Int_t c, Int_t i, Float_t v) {
if (nChannels>0 && c>=0 && c<nChannels && i>=0 && i<nValuesPerChannel) {
corrData[c*nValuesPerChannel+i]=v;
} else Error("getCorrection","No corrections or invalid address");
}
void HTrb2Correction::clearArray() {
corrData.Reset();
}
Bool_t HTrb2Correction::fillArray(Float_t* data,Int_t nd) {
makeArray();
Bool_t rc=kFALSE;
if (data!=0 && nd==getSize()) {
memcpy(corrData.GetArray(),data,nd*sizeof(Float_t));
rc=kTRUE;
} else {
Error("fill","Invalid number of data: %i",getSize());
}
return rc;
}
void HTrb2Correction::print() {
Int_t l=0;
cout<<"temperatureSensor: "<<GetName()<<'\n';
for(Int_t i=0;i<nChannels;i++) {
l=0;
cout<<" channel: "<<i<<'\n';
for(Int_t k=0;k<nValuesPerChannel;k++) {
l++;
cout<<setw(13)<<right<<fixed<<setprecision(6)<<corrData[i*nValuesPerChannel+k];
if (l==10) {
cout<<'\n';
l=0;
}
}
cout<<endl;
}
}
void HTrb2Correction::write(fstream& fout) {
if (nChannels>0) {
Int_t l=0;
fout<<"temperatureSensor: "<<GetName()<<'\n';
for(Int_t i=0;i<nChannels;i++) {
l=0;
fout<<" channel: "<<i<<'\n';
for(Int_t k=0;k<nValuesPerChannel;k++) {
l++;
fout<<setw(13)<<right<<fixed<<setprecision(6)<<corrData[i*nValuesPerChannel+k];
if (l==10) {
fout<<'\n';
l=0;
}
}
fout<<endl;
}
fout<<"//----------------------------------------------------------------------------"
<<endl;
}
}
Float_t HTrb2Correction::compare(HTrb2Correction& b) {
Float_t diff=0.F;
if (b.getHighResolutionFlag()!=highResolutionFlag) {
diff=999999.F;
} else {
Float_t* arr=b.getCorrections();
for (Int_t i=0;i<getSize();i++) {
Float_t d=TMath::Abs(corrData[i]-arr[i]);
if (d>diff) diff=d;
}
}
return diff;
}