#include "hitofcalpar.h" #include "hades.h" #include "hspectrometer.h" #include "hdetpario.h" #include "hpario.h" #include "hitofdetector.h" using namespace std; #include #include ClassImp(HiTofCalPar) ClassImp(HiTofCalParSec) ClassImp(HiTofCalParMod) ClassImp(HiTofCalParCell) //_HADES_CLASS_DESCRIPTION /////////////////////////////////////////////////////////////////////// // HiTofCalPar // // HiTofCalPar is used to manage of all parameters for calibration // which contains all HiTofCalParCell objects. One HiTofCalParCell // object contains calibration parameters of one cell. // ////////////////////////////////////////////////////////////////////// HiTofCalParCell::HiTofCalParCell() { reset(); } void HiTofCalParCell::reset() { for(Int_t i = 0; i< NCHAN; i++){ fOffset [i] = 0.0; fSlope [i] = 1.; fadcPar0[i] = 0.0; fadcPar1[i] = 0.0; fadcPar2[i] = 0.0; ftwcPar0[i] = 0.0; ftwcPar1[i] = 0.0; ftwcPar2[i] = 0.0; } } void HiTofCalParCell::fill(HiTofCalParCell& c) { for(Int_t i = 0; i< NCHAN; i++){ fOffset [i] = c.getOffset(i); fSlope [i] = c.getSlope(i); fadcPar0[i] = c.getAdcPar0(i); fadcPar1[i] = c.getAdcPar1(i); fadcPar2[i] = c.getAdcPar2(i); ftwcPar0[i] = c.getTwcPar0(i); ftwcPar1[i] = c.getTwcPar1(i); ftwcPar2[i] = c.getTwcPar2(i); } } Float_t HiTofCalParCell::calibrateTime(Int_t i,Float_t time) { // to be implemented time += fOffset[i]; return time; } Float_t HiTofCalParCell::calibrateTime_walkcorr(Int_t i,Float_t time,Float_t width) { // to be implemented time -= (fSlope [i]*width); time -= fadcPar0[i]; time += fOffset[i]; return time; } Float_t HiTofCalParCell::correctSignalPropagation_walkcorr(Int_t i,Float_t time,Float_t theta) { // to be implemented time -= ( (fadcPar1[i]/1000.) * ( (theta-17)*(theta-17) ) ); return time; } Float_t HiTofCalParCell::calibrateCharge(Int_t i,Float_t width) { // to be implemented return width; } HiTofCalParMod::HiTofCalParMod(Int_t n) { // constructor creates an array of pointers of type HiTofCalParCell array = new TObjArray(n); for(Int_t c=0 ; cAddAt(new HiTofCalParCell(),c); } } HiTofCalParMod::~HiTofCalParMod(void) { // destructor if(array) { array->Delete(); delete array; } } HiTofCalParSec::HiTofCalParSec(Int_t n) { // constructor creates an array of pointers of type HiTofCalParCell array = new TObjArray(n); for(Int_t m=0 ; mAddAt(new HiTofCalParMod(),m); } } HiTofCalParSec::~HiTofCalParSec(void) { // destructor if(array) { array->Delete(); delete array; } } HiTofCalPar::HiTofCalPar(const Char_t* name,const Char_t* title, const Char_t* context, Int_t n) : HParSet(name,title,context) { strcpy(detName,"iTof"); array = new TObjArray(n); for (Int_t s=0; sAddAt(new HiTofCalParSec(),s); } } HiTofCalPar::~HiTofCalPar() { if(array){ array->Delete(); delete array; } } Bool_t HiTofCalPar::init(HParIo* inp,Int_t* set) { // intitializes the container from an input // set additional information for itof detector HDetParIo* input = inp->getDetParIo("HiTofParIo"); if (input) return (input->init(this,set)); return kFALSE; } Int_t HiTofCalPar::write(HParIo* output) { // writes the itof container to the output defined in the runtime // database HDetParIo* out = output->getDetParIo("HiTofParIo"); if (out) return out->write(this); return -1; } void HiTofCalPar::clear() { // sets the default values for(Int_t i0=0;i0 12){ Error("readline", "Too many values in line %s\n", buf); } else { if(s < 0 || s > 5) return; HiTofCalParCell& cell=(*this)[s][m][c]; cell.setOffset(sl,offset); cell.setSlope(sl,slope); cell.setAdcPar0(sl,adcpar0); cell.setAdcPar1(sl,adcpar1); cell.setAdcPar2(sl,adcpar2); cell.setTwcPar0(sl,twcpar0); cell.setTwcPar1(sl,twcpar1); cell.setTwcPar2(sl,twcpar2); set[s]=999; // maxmodules*nsec = 1 * 6 } } Float_t HiTofCalPar::calibrateTime(Int_t s,Int_t m,Int_t c,Int_t i,Float_t rawTime) { HiTofCalParCell& cell = (*this)[s][m][c]; return cell.calibrateTime(i,rawTime); } Float_t HiTofCalPar::calibrateTime_walkcorr(Int_t s,Int_t m,Int_t c,Int_t i,Float_t rawTime,Float_t width) { HiTofCalParCell& cell = (*this)[s][m][c]; return cell.calibrateTime_walkcorr(i,rawTime,width); } Float_t HiTofCalPar::correctSignalPropagation_walkcorr(Int_t s,Int_t m,Int_t c,Int_t i,Float_t calTime,Float_t theta) { HiTofCalParCell& cell = (*this)[s][m][c]; return cell.correctSignalPropagation_walkcorr(i,calTime,theta); } Float_t HiTofCalPar::calibrateCharge(Int_t s,Int_t m,Int_t c,Int_t i,Float_t width) { HiTofCalParCell& cell = (*this)[s][m][c]; return cell.calibrateCharge(i,width); } void HiTofCalPar::printParam(void) { // to be implemented // prints the parameters TString header; putAsciiHeader(header); cout< ncells skip mod loop for(Int_t i2=0; i2