00001 #include "emcTowerContentv3.h"
00002 #include <iostream>
00003 #include <iomanip>
00004 #include "EmcIndexer.h"
00005 #include "emcDataError.h"
00006
00007 ClassImp(emcTowerContentv3)
00008
00009 using namespace std;
00010
00011
00012 emcTowerContentv3::emcTowerContentv3() : emcTowerContent()
00013 {
00014 Reset();
00015 }
00016
00017
00018 emcTowerContentv3::emcTowerContentv3(const emcTowerContentv3& o)
00019 : emcTowerContent()
00020 {
00021 o.copyTo(*this);
00022 }
00023
00024
00025 emcTowerContentv3&
00026 emcTowerContentv3::operator=(const emcTowerContentv3& o)
00027 {
00028 if ( this != &o )
00029 {
00030 o.copyTo(*this);
00031 }
00032 return *this;
00033 }
00034
00035
00036 emcTowerContentv3::~emcTowerContentv3()
00037 {
00038 }
00039
00040
00041 void
00042 emcTowerContentv3::copyTo(emcTowerContentv3& dest) const
00043 {
00044 dest.fHasCalib=fHasCalib;
00045 dest.fHasDC=fHasDC;
00046 dest.fHasRaw=fHasRaw;
00047 dest.fFEM=fFEM;
00048 dest.fChannel=fChannel;
00049 dest.fDataError=fDataError;
00050 dest.fErrorNeighbours=fErrorNeighbours;
00051 dest.fWarnNeighbours=fWarnNeighbours;
00052 dest.fHGPost=fHGPost;
00053 dest.fHGPre=fHGPre;
00054 dest.fLGPost=fLGPost;
00055 dest.fLGPre=fLGPre;
00056 dest.fTAC=fTAC;
00057 dest.fTDC=fTDC;
00058 dest.fADC=fADC;
00059 dest.fHG=fHG;
00060 dest.fLG=fLG;
00061 dest.fTowerID=fTowerID;
00062 dest.fBeamClock=fBeamClock;
00063 dest.fAMUPre=fAMUPre;
00064 dest.fAMUPost=fAMUPost;
00065 dest.fAMUTAC=fAMUTAC;
00066 dest.fEnergy=fEnergy;
00067 dest.fTOF=fTOF;
00068 dest.fGain=fGain;
00069 dest.fSimFrac=fSimFrac;
00070 dest.fUncorrectedTOF=fUncorrectedTOF;
00071 }
00072
00073
00074 void
00075 emcTowerContentv3::identify(ostream& os) const
00076 {
00077 os << "emcTowerContentv3::identify" << endl;
00078 }
00079
00080
00081 int
00082 emcTowerContentv3::isValid(void) const
00083 {
00084 if (fFEM>=0)
00085 {
00086 return 1;
00087 }
00088 else
00089 {
00090 return 0;
00091 }
00092 }
00093
00094
00095 bool
00096 emcTowerContentv3::isZero(void) const
00097 {
00098
00099
00100
00101
00102
00103
00104
00105
00106 if ( fDataError & emcDataError::CHANNEL_DISABLED() )
00107 {
00108 return true;
00109 }
00110 else
00111 {
00112 return false;
00113 }
00114 }
00115
00116
00117 void
00118 emcTowerContentv3::print(ostream& out, int level) const
00119 {
00120 std::ostream::fmtflags oldflags = out.flags();
00121
00122 int arm,sector,iy,iz;
00123
00124 int iS,iST;
00125 EmcIndexer::iPXiSiST(TowerID(),iS,iST);
00126 EmcIndexer::iSTxyST(iS,iST,iz,iy);
00127
00128 EmcIndexer::sectorOnlineToOffline(iS,arm,sector);
00129
00130 out << "FEM" << setw(3) << dec << FEM()
00131 << " CH" << setw(4) << dec << Channel()
00132 << " TID " << setw(7) << TowerID()
00133 << " ARM " << setw(2) << arm
00134 << " SEC " << setw(2) << sector
00135 << " Y " << setw(3) << iy
00136 << " z " << setw(3) << iz;
00137 if ( hasDC() )
00138 {
00139 out << " ADC " << setw(7) << ADC()
00140 << " TDC " << setw(6) << TDC();
00141 out.flags(oldflags);
00142 }
00143 if ( hasCalib() )
00144 {
00145 out << " E ";
00146 out.setf(ios::scientific);
00147 out.precision(3);
00148 out << Energy()
00149 << " TOF " << ToF()
00150 << " Gain " << Gain();
00151 out.flags(oldflags);
00152 }
00153
00154 if ( level > 0 )
00155 {
00156 if ( hasRaw() )
00157 {
00158 out << endl
00159 << " "
00160 << " HPre" << setw(6) << HGPre()
00161 << " HPos" << setw(6) << HGPost()
00162 << " LPre" << setw(6) << LGPre()
00163 << " LPos" << setw(6) << LGPost()
00164 << " TAC " << setw(6) << TAC()
00165 << " LG" << setw(6) << LG()
00166 << " HG " << setw(6) << HG()
00167 << endl
00168 << " "
00169 << " APre" << setw(7) << AMUPre()
00170 << " APos" << setw(6) << AMUPost()
00171 << " ATAC" << setw(6) << AMUTAC()
00172 << endl
00173 << " ";
00174 out.flags(oldflags);
00175 }
00176 out << " DER " << hex << setw(5) << "0x" << DataError();
00177 }
00178
00179 out << " ERN " << hex << setw(5) << "0x" << ErrorNeighbours()
00180 << " WRN " << hex << setw(5) << "0x" << WarnNeighbours()
00181 << dec;
00182
00183 out << endl;
00184
00185 out.flags(oldflags);
00186 }
00187
00188
00189 void
00190 emcTowerContentv3::Reset()
00191 {
00192 fFEM=-1;
00193 fChannel=-1;
00194 fTowerID=-1;
00195
00196 fAMUPre = 0;
00197 fAMUPost = 0;
00198 fAMUTAC = 0;
00199
00200 fHasCalib = false;
00201 fHasDC = false;
00202 fHasRaw = false;
00203
00204 fGain=0;
00205
00206 Zero();
00207 }
00208
00209
00210 void
00211 emcTowerContentv3::SetADCTDC(int adc, int tdc, int hg, int lg)
00212 {
00213 fADC=adc;
00214 fTDC=tdc;
00215 fHG=hg;
00216 fLG=lg;
00217 fHasDC=true;
00218 }
00219
00220
00221 void
00222 emcTowerContentv3::SetCalibrated(float energy, float tof)
00223 {
00224 fEnergy = energy;
00225 fTOF=fUncorrectedTOF=tof;
00226 fHasCalib=true;
00227 }
00228
00229
00230 void
00231 emcTowerContentv3::SetToF(float tof)
00232 {
00233 fTOF=tof;
00234 }
00235
00236
00237 void
00238 emcTowerContentv3::SetDataError(int dataerror)
00239 {
00240 fDataError = dataerror;
00241 }
00242
00243
00244 void
00245 emcTowerContentv3::SetGain(float gain)
00246 {
00247 fGain = gain;
00248 }
00249
00250
00251 void
00252 emcTowerContentv3::SetID(int fem, int channel)
00253 {
00254 fFEM = fem;
00255 fChannel = channel;
00256 fTowerID = EmcIndexer::PXSM144iCH_iPX(fFEM,channel);
00257 }
00258
00259
00260 void
00261 emcTowerContentv3::SetNeighbours(unsigned int error, unsigned int warning)
00262 {
00263 fErrorNeighbours = error;
00264 fWarnNeighbours = warning;
00265 }
00266
00267
00268 void
00269 emcTowerContentv3::SetRaw(int hgpost, int hgpre, int lgpost, int lgpre,
00270 int tac,
00271 int amupre, int amupost, int amutac, int beamclock)
00272 {
00273 fHGPost = hgpost;
00274 fHGPre = hgpre;
00275 fLGPost = lgpost;
00276 fLGPre = lgpre;
00277 fTAC = tac;
00278 fAMUPre = amupre;
00279 fAMUPost = amupost;
00280 fAMUTAC = amutac;
00281 fBeamClock = beamclock;
00282 fHasRaw=true;
00283 }
00284
00285
00286 void
00287 emcTowerContentv3::SetSimFrac(float simfrac)
00288 {
00289 fSimFrac = simfrac;
00290 }
00291
00292
00293 void
00294 emcTowerContentv3::Zero(void)
00295 {
00296 fHGPost = 4095;
00297 fHGPre = 4095;
00298 fLGPost = 4095;
00299 fLGPre = 4095;
00300 fTAC = 4095;
00301
00302 fHG = 0;
00303 fLG = 0;
00304
00305 fADC = 0;
00306 fTDC = 0;
00307
00308 fEnergy = 0.0;
00309 fTOF = 0.0;
00310 fUncorrectedTOF = 0.0;
00311 fGain = 0.0;
00312
00313 fDataError = 0;
00314 fErrorNeighbours = 0;
00315 fWarnNeighbours = 0;
00316
00317 fSimFrac = 0;
00318 }