00001
00002
00003
00004
00005
00006
00007 #include <stdlib.h>
00008 #include <string.h>
00009
00010 #include "StMuEmcTowerData.h"
00011 #include "Stiostream.h"
00012 #include "StMuEmcUtil.h"
00013 static StMuEmcUtil util;
00014 ClassImp(StMuEmcTowerData)
00015
00016 StMuEmcTowerData::StMuEmcTowerData()
00017 : TObject()
00018 {
00019 clearBemc();
00020 clearEemc();
00021 }
00022
00023 StMuEmcTowerData::StMuEmcTowerData(const StMuEmcTowerData& o)
00024 : TObject(o)
00025 {
00026 memcpy(mTowerADC,o.mTowerADC,sizeof(mTowerADC));
00027 memcpy(mEndcapTowerADC,o.mEndcapTowerADC,sizeof(mEndcapTowerADC));
00028 memcpy(mBTowCrateFlags,o.mBTowCrateFlags,sizeof(mBTowCrateFlags));
00029 memcpy(mBSmdCrateFlags,o.mBSmdCrateFlags,sizeof(mBSmdCrateFlags));
00030 memcpy(mBPrsCrateFlags,o.mBPrsCrateFlags,sizeof(mBPrsCrateFlags));
00031 memcpy(mETowCrateFlags,o.mETowCrateFlags,sizeof(mETowCrateFlags));
00032 memcpy(mESmdCrateFlags,o.mESmdCrateFlags,sizeof(mESmdCrateFlags));
00033 memcpy(mEPrsCrateFlags,o.mEPrsCrateFlags,sizeof(mEPrsCrateFlags));
00034 }
00035
00036 StMuEmcTowerData::~StMuEmcTowerData()
00037 {
00038 }
00039
00040 void StMuEmcTowerData::clearBemc() {
00041 memset(mTowerADC,0,sizeof(mTowerADC));
00042 memset(mBTowCrateFlags,0,sizeof(mBTowCrateFlags));
00043 memset(mBSmdCrateFlags,0,sizeof(mBSmdCrateFlags));
00044 memset(mBPrsCrateFlags,0,sizeof(mBPrsCrateFlags));
00045 }
00046
00047 void StMuEmcTowerData::clearEemc() {
00048 memset(mEndcapTowerADC,0,sizeof(mEndcapTowerADC));
00049 memset(mETowCrateFlags,0,sizeof(mETowCrateFlags));
00050 memset(mESmdCrateFlags,0,sizeof(mESmdCrateFlags));
00051 memset(mEPrsCrateFlags,0,sizeof(mEPrsCrateFlags));
00052 }
00053
00054 int StMuEmcTowerData::towerADC(int id, int detector) const
00055 {
00056 if(detector == bemc)
00057 {
00058 if(id<1 || id>nEmcTowers) return 0;
00059 return (int)mTowerADC[id-1];
00060 }
00061 if(detector == eemc)
00062 {
00063 if(id<1 || id>nEndcapTowers) return 0;
00064 return (int)mEndcapTowerADC[id-1];
00065 }
00066 return 0;
00067 }
00068
00069 StEmcCrateStatus StMuEmcTowerData::crateStatus(int crate, int detector) const {
00070 switch (detector) {
00071 case bemc:
00072 if (crate>0 && crate<=nBTowCrates)
00073 return (StEmcCrateStatus) mBTowCrateFlags[crate-1];
00074 break;
00075
00076 case bsmde:
00077 case bsmdp:
00078 if (crate>0 && crate<=nBSmdCrates)
00079 return (StEmcCrateStatus) mBSmdCrateFlags[crate-1];
00080 break;
00081
00082 case bprs:
00083 if (crate>0 && crate<=nBPrsCrates)
00084 return (StEmcCrateStatus) mBPrsCrateFlags[crate-1];
00085 break;
00086
00087 case eemc:
00088 if (crate>0 && crate<=nETowCrates)
00089 return (StEmcCrateStatus) mETowCrateFlags[crate-1];
00090 break;
00091
00092 case esmdu:
00093 case esmdv:
00094 if (crate>0 && crate<=nESmdCrates)
00095 return (StEmcCrateStatus) mESmdCrateFlags[crate-1];
00096 break;
00097
00098 case eprs:
00099 if (crate>0 && crate<=nEPrsCrates)
00100 return (StEmcCrateStatus) mEPrsCrateFlags[crate-1];
00101 break;
00102 }
00103 return crateUnknown;
00104 }
00105
00106 void StMuEmcTowerData::setTowerADC(int id,int adc, int detector)
00107 {
00108 if(detector == bemc)
00109 {
00110 if(id<1 || id>nEmcTowers) return;
00111 mTowerADC[id-1]=adc;
00112 }
00113 if(detector == eemc)
00114 {
00115 if(id<1 || id>nEndcapTowers) return;
00116 mEndcapTowerADC[id-1]=adc;
00117 }
00118 return;
00119 }
00120
00121 void StMuEmcTowerData::setCrateStatus(StEmcCrateStatus status, int crate, int detector) {
00122 switch (detector) {
00123 case bemc:
00124 if (crate>0 && crate<=nBTowCrates)
00125 mBTowCrateFlags[crate-1] = (unsigned char) status;
00126 break;
00127
00128 case bsmde:
00129 case bsmdp:
00130 if (crate>0 && crate<=nBSmdCrates)
00131 mBSmdCrateFlags[crate-1] = (unsigned char) status;
00132 break;
00133
00134 case bprs:
00135 if (crate>0 && crate<=nBPrsCrates)
00136 mBPrsCrateFlags[crate-1] = (unsigned char) status;
00137 break;
00138
00139 case eemc:
00140 if (crate>0 && crate<=nETowCrates)
00141 mETowCrateFlags[crate-1] = (unsigned char) status;
00142 break;
00143
00144 case esmdu:
00145 case esmdv:
00146 if (crate>0 && crate<=nESmdCrates)
00147 mESmdCrateFlags[crate-1] = (unsigned char) status;
00148 break;
00149
00150 case eprs:
00151 if (crate>0 && crate<=nEPrsCrates)
00152 mEPrsCrateFlags[crate-1] = (unsigned char) status;
00153 break;
00154 }
00155 }
00156
00157
00158 void StMuEmcTowerData::getEndcapTowerADC(int ihit1, int &adc, int &sec, int &sub, int & eta) const
00159 {
00160 int ihit=ihit1+1;
00161 adc=towerADC(ihit,eemc);
00162 if(! util.getEndcapBin(eemc,ihit,sec,eta,sub)) return ;
00163 adc=sec=sub=eta=-1;
00164 return;
00165 }
00166
00167