/////////////////////////////////////////////////////////////// // // CalCalib_Chn.cpp // // Created: October 21st. 1998 Mrinmoy Bhattacharjee // Purpose: Implementation file for Calorimeter Channel // Data Definition for Online Calibration // -- Contains mean & sigma for *1 & *8 Gain paths // + Null Error code to be set at validation // + event count per channel // // Output : CalCalib_Chn Object // /////////////////////////////////////////////////////////////// // Include Files // #include "L3CalCalib/CalCalib_Chn.hpp" // Default Constructor & Destructor // CalCalib_Chn::CalCalib_Chn (){} CalCalib_Chn::~CalCalib_Chn(){} // Constructor with Channel ID // CalCalib_Chn::CalCalib_Chn(int ChId){ _ChId=ChId; _Bls =int(ChId/64); //Don't change order _Twr =int((ChId-_Bls*64)/16) ; _Dpth=int(ChId-_Bls*64)-_Twr*16; _Error=0; _EvtCnt=0; _PatternId=-1; _Mean1=0.0; _Mean8=0.0; _Sigma1=0.0;_Sigma8=0.0; } // Constructor with Arguments // CalCalib_Chn::CalCalib_Chn(int ChId, float Mean1, float Mean8, float Sigma1, float Sigma8){ _ChId=ChId; _Bls =int(ChId/64); //Don't change order _Twr =int((ChId-_Bls*64)/16) ; _Dpth=int(ChId-_Bls*64)-_Twr*16; _Error=0; _EvtCnt=0; _PatternId=-1 ; _Mean1=Mean1; _Mean8=Mean8; _Sigma1=Sigma1; _Sigma8=Sigma8; } // Access Functions // int CalCalib_Chn::getBLS() const {return _Bls; } int CalCalib_Chn::getTWR() const {return _Twr; } int CalCalib_Chn::getDPTH() const {return _Dpth; } int CalCalib_Chn::getChId() const {return _ChId; } int CalCalib_Chn::getError() const {return _Error; } int CalCalib_Chn::getEvtCnt() const {return _EvtCnt; } int CalCalib_Chn::getPattrn() const {return _PatternId;} float CalCalib_Chn::getMean1() const {return _Mean1; } float CalCalib_Chn::getMean8() const {return _Mean8; } float CalCalib_Chn::getSigma1() const {return _Sigma1; } float CalCalib_Chn::getSigma8() const {return _Sigma8; } void CalCalib_Chn::updtEvtCnt(){_EvtCnt+=1;} void CalCalib_Chn::setError(int error){_Error=error;} // Accumulate sums and calculate mu & sigma // void CalCalib_Chn::adtoMean(float Mean1, float Mean8) {_Mean1+=Mean1;_Mean8+=Mean8;} void CalCalib_Chn::adtoSigma(float Sigma1, float Sigma8) {_Sigma1+=Sigma1*Sigma1;_Sigma8+=Sigma8*Sigma8;} void CalCalib_Chn::mkMean(int offset1, int offset8) { if( _EvtCnt>0 ){ _Mean1=(_Mean1/_EvtCnt)+float(offset1); _Mean8=(_Mean8/_EvtCnt)+float(offset8);} else{_Mean1=0.0;_Mean8=0.0;} } void CalCalib_Chn::mkSigma(int offset1, int offset8) { if( _EvtCnt>0 ){ _Sigma1=_Sigma1-_EvtCnt*offset1*offset1+2*offset1*_Mean1*_EvtCnt; _Sigma1=_Sigma8-_EvtCnt*offset8*offset8+2*offset8*_Mean8*_EvtCnt; _Sigma1=(_Sigma1/_EvtCnt)-_Mean1*_Mean1; _Sigma8=(_Sigma8/_EvtCnt)-_Mean8*_Mean8; if( _Sigma1>0 ) {_Sigma1=sqrt(_Sigma1);} else{_Sigma1=0.0;} if( _Sigma8>0 ) {_Sigma8=sqrt(_Sigma8);} else{_Sigma8=0.0;} } else{_Sigma1=0.0;_Sigma8=0.0;} }