00001 #include "emcTowerContentv1S.h"
00002 #include <iostream>
00003 #include <iomanip>
00004 #include "EmcIndexer.h"
00005 #include "emcDataError.h"
00006
00007 ClassImp(emcTowerContentv1S)
00008
00009 using namespace std;
00010
00011 float emcTowerContentv1S::fEnergyThreshold = 0.0001;
00012
00013
00014 emcTowerContentv1S::emcTowerContentv1S()
00015 {
00016 Reset();
00017 }
00018
00019
00020 emcTowerContentv1S::emcTowerContentv1S(const emcTowerContentv1S& o)
00021 : emcTowerContent()
00022 {
00023 o.copyTo(*this);
00024 }
00025
00026
00027 emcTowerContentv1S&
00028 emcTowerContentv1S::operator=(const emcTowerContentv1S& o)
00029 {
00030 if ( this != &o )
00031 {
00032 o.copyTo(*this);
00033 }
00034 return *this;
00035 }
00036
00037
00038 emcTowerContentv1S::~emcTowerContentv1S()
00039 {
00040 }
00041
00042
00043 void
00044 emcTowerContentv1S::copyTo(emcTowerContentv1S& dest) const
00045 {
00046 dest.fHasCalib=fHasCalib;
00047 dest.fHasDC=fHasDC;
00048 dest.fFEM=fFEM;
00049 dest.fChannel=fChannel;
00050 dest.fErrorNeighbours=fErrorNeighbours;
00051 dest.fWarnNeighbours=fWarnNeighbours;
00052 dest.fTDC=fTDC;
00053 dest.fADC=fADC;
00054 dest.fTowerID=fTowerID;
00055 dest.fEnergy=fEnergy;
00056 dest.fTOF=fTOF;
00057 dest.fUncorrectedTOF=fUncorrectedTOF;
00058 }
00059
00060
00061 void
00062 emcTowerContentv1S::identify(ostream& os) const
00063 {
00064 os << "emcTowerContentv1S::identify" << endl;
00065 }
00066
00067
00068 int
00069 emcTowerContentv1S::isValid(void) const
00070 {
00071 if (fFEM>=0)
00072 {
00073 return 1;
00074 }
00075 else
00076 {
00077 return 0;
00078 }
00079 }
00080
00081
00082 bool
00083 emcTowerContentv1S::isZero(void) const
00084 {
00085 return fEnergy <= fEnergyThreshold;
00086 }
00087
00088
00089 void
00090 emcTowerContentv1S::print(ostream& out, int ) const
00091 {
00092 std::ostream::fmtflags oldflags = out.flags();
00093
00094 int arm,sector,iy,iz;
00095
00096 int iS,iST;
00097 EmcIndexer::iPXiSiST(TowerID(),iS,iST);
00098 EmcIndexer::iSTxyST(iS,iST,iz,iy);
00099
00100 EmcIndexer::sectorOnlineToOffline(iS,arm,sector);
00101
00102 out << "FEM" << setw(3) << dec << FEM()
00103 << " CH" << setw(4) << dec << Channel()
00104 << " TID " << setw(7) << TowerID()
00105 << " ARM " << setw(2) << arm
00106 << " SEC " << setw(2) << sector
00107 << " Y " << setw(3) << iy
00108 << " z " << setw(3) << iz;
00109 if ( hasDC() )
00110 {
00111 out << " ADC " << setw(7) << ADC()
00112 << " TDC " << setw(6) << TDC();
00113 out.flags(oldflags);
00114 }
00115 if ( hasCalib() )
00116 {
00117 out << " E ";
00118 out.setf(ios::scientific);
00119 out.precision(3);
00120 out << Energy()
00121 << " TOF " << ToF()
00122 << endl;
00123 out.flags(oldflags);
00124 }
00125
00126 out << " ERN " << hex << setw(5) << "0x" << ErrorNeighbours()
00127 << " WRN " << hex << setw(5) << "0x" << WarnNeighbours()
00128 << dec;
00129
00130 out << endl;
00131
00132 out.flags(oldflags);
00133 }
00134
00135
00136 void
00137 emcTowerContentv1S::Reset()
00138 {
00139 fFEM=-1;
00140 fChannel=-1;
00141 fTowerID=-1;
00142
00143 fHasCalib = false;
00144 fHasDC = false;
00145
00146 Zero();
00147 }
00148
00149
00150 void
00151 emcTowerContentv1S::SetADCTDC(int adc, int tdc, int, int)
00152 {
00153 fADC=adc;
00154 fTDC=tdc;
00155 fHasDC=true;
00156 }
00157
00158
00159 void
00160 emcTowerContentv1S::SetCalibrated(float energy, float tof)
00161 {
00162 fEnergy = energy;
00163 fTOF=fUncorrectedTOF=tof;
00164 fHasCalib=true;
00165 }
00166
00167
00168 void
00169 emcTowerContentv1S::SetToF(float tof)
00170 {
00171 fTOF=tof;
00172 }
00173
00174
00175 void
00176 emcTowerContentv1S::SetID(int fem, int channel)
00177 {
00178 fFEM = fem;
00179 fChannel = channel;
00180 fTowerID = EmcIndexer::PXSM144iCH_iPX(fFEM,channel);
00181 }
00182
00183
00184 void
00185 emcTowerContentv1S::SetNeighbours(unsigned int error, unsigned int warning)
00186 {
00187 fErrorNeighbours = error;
00188 fWarnNeighbours = warning;
00189 }
00190
00191
00192 void
00193 emcTowerContentv1S::Zero(void)
00194 {
00195 fADC = 0;
00196 fTDC = 0;
00197
00198 fEnergy = 0.0;
00199 fTOF = 0.0;
00200 fUncorrectedTOF = 0.0;
00201
00202 fErrorNeighbours = 0;
00203 fWarnNeighbours = 0;
00204 }