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