00001 #include "EMC_Reader.hh"
00002 #include <assert.h>
00003 #include "EMC_BarrelReader.hh"
00004 #include "EMC_SmdReader.hh"
00005 #define MAX_ADC 0xFFF
00006
00007 using namespace OLDEVP;
00008
00009 void EMC_Reader::ProcessEvent(const Bank_EMCP * EmcPTR, const Bank_TRGP * TrgPTR)
00010 {
00011
00012
00013 EMC_BarrelReader* barreltowerreader = new EMC_BarrelReader(ercpy, const_cast<Bank_EMCP *>(EmcPTR));
00014 int towerresult = barreltowerreader->ProcessBarrelTower(EmcPTR, TrgPTR);
00015 mTheTowerAdcR=barreltowerreader->getBTOWERADCR();
00016 if(!towerresult)
00017 {
00018 cout<<" Barrel TOWER processing is not successful**"<<endl;
00019 mTowerPresent=false;
00020 }
00021 else
00022 {
00023 mTowerPresent=true;
00024 }
00025
00026 delete barreltowerreader;
00027 barreltowerreader=0;
00028
00029 if(EmcPTR) {
00030
00031 EMC_SmdReader* barrelsmdreader = new EMC_SmdReader(ercpy, const_cast<Bank_EMCP *>(EmcPTR));
00032 int smdresult = barrelsmdreader->ProcessBarrelSmd(EmcPTR);
00033 mTheSmdAdcR=barrelsmdreader->getBSMDADCR();
00034
00035 if(!smdresult)
00036 {
00037 cout<<" Barrel SMD processing is not successful**"<<endl;
00038 mSmdPresent=false;
00039 }
00040 else
00041 {
00042 mSmdPresent=true;
00043 }
00044 delete barrelsmdreader;
00045 barrelsmdreader=0;
00046 }
00047 }
00048
00049
00050
00051 EMC_Reader::EMC_Reader(EventReader *er, Bank_EMCP *pEMCP, Bank_TRGP *pTRGP)
00052 {
00053 mSmdPresent=false;
00054 mTowerPresent=true;
00055 printf(" SP in EMC_Reader\n");
00056 pBankEMCP = pEMCP;
00057 ercpy = er;
00058
00059 printf("This is the EMC_Reader ctor in %s.\n",__FILE__);
00060
00061 if(pBankEMCP) {
00062 pBankEMCP->header.BankType[7]=0;
00063 cout<<"header bank type "<<pBankEMCP->header.BankType<<endl;
00064
00065 if (!pBankEMCP->test_CRC())
00066 printf("CRC error in EMCP: %s %d\n",__FILE__,__LINE__) ;
00067 if (pBankEMCP->swap() < 0)
00068 printf("swap error in EMCP: %s %d\n",__FILE__,__LINE__) ;
00069
00070 pBankEMCP->header.CRC = 0;
00071 int Token = pBankEMCP->header.Token;
00072
00073 Bank_DATAP *dp = (Bank_DATAP *)ercpy->getDATAP();
00074 if(Token !=dp->header.Token)
00075 printf("Token mismatch between global %d and RICH %d\n",dp->header.Token,Token);
00076 }
00077
00078 ProcessEvent(pBankEMCP, pTRGP);
00079 }
00080 int EMC_Reader::NTowerHits()
00081 {
00082 if(mTowerPresent)
00083 {
00084 if(strncmp(mTheTowerAdcR.BankType,"TOWRADCR",8))
00085 {
00086 cout<<"EMC_Reader::NTowerHits() -> error in header"<<endl;
00087 return 0;
00088 }
00089 int nhits=mTheTowerAdcR.NTowerHits;
00090 return nhits;
00091 }
00092 else
00093 return 0;
00094 }
00095 int EMC_Reader::NSmdHits()
00096 {
00097 if(mSmdPresent)
00098 {
00099 if(strncmp(mTheSmdAdcR.BankType,"BSMDADCR",8))
00100 {
00101 cout<<" error in header name**"<<endl;
00102 return 0;
00103 }
00104 int nhits=mTheSmdAdcR.NSmdHits;
00105 return nhits;
00106 }
00107 else
00108 return 0;
00109 }
00110
00111 int EMC_Reader::getTowerADC(int module,int eta, int sub,unsigned short& ADC )
00112 {
00113
00114
00115
00116
00117 if(mTowerPresent)
00118 {
00119 if(strncmp(mTheTowerAdcR.BankType,"TOWRADCR",8))
00120 {
00121 cout<<" error in header name**"<<endl;
00122 return 0;
00123 }
00124 else
00125 {
00126 ADC=mTheTowerAdcR.TowerMatrix[module-1][eta-1][sub-1];
00127 return 1;
00128 }
00129 }
00130 else
00131 return 0;
00132 }
00133
00134 int EMC_Reader::getTowerADC(int index, unsigned short& ADC )
00135 {
00136
00137
00138
00139 if(mTowerPresent)
00140 {
00141 if(strncmp(mTheTowerAdcR.BankType,"TOWRADCR",8))
00142 {
00143 cout<<" error in header name**" << endl;
00144 return 0;
00145 }
00146 ADC = mTheTowerAdcR.TowerADCArray[index];
00147 return 1;
00148 }
00149 else
00150 return 0;
00151 }
00152
00153 int EMC_Reader::getSMDE_ADC(int modInd,int stripInd,unsigned short& ADC )
00154 {
00155
00156
00157
00158
00159 if(mSmdPresent)
00160 {
00161 if(strncmp(mTheSmdAdcR.BankType,"BSMDADCR",8))
00162 {
00163 cout<<" getSMDE_ADC::error in header name**"<<endl;
00164 return 0;
00165 }
00166 else
00167 {
00168 ADC = mTheSmdAdcR.SmdE_ADCMatrix[modInd-1][stripInd-1];
00169 return 1;
00170 }
00171 }
00172 else
00173 return 0;
00174 }
00175
00176 int EMC_Reader::getSMDP_ADC(int modInd,int binInd,int stripInd,unsigned short& ADC )
00177 {
00178
00179
00180
00181
00182 if(mSmdPresent)
00183 {
00184 if(strncmp(mTheSmdAdcR.BankType,"BSMDADCR",8))
00185 {
00186 cout<<" getSMDE_ADC::error in header name**"<<endl;
00187 return 0;
00188 }
00189 else
00190 {
00191 ADC=mTheSmdAdcR.SmdP_ADCMatrix[modInd-1][binInd-1][stripInd-1];
00192 return 1;
00193 }
00194 }
00195 else
00196 return 0;
00197 }
00198
00199 int EMC_Reader::getSMD_ADC(int index, int fiber,unsigned short& ADC )
00200 {
00201
00202 if(mSmdPresent)
00203 {
00204 if(strncmp(mTheSmdAdcR.BankType,"BSMDADCR",8))
00205 {
00206 cout<<" getSMD_ADC::error in header name**"<<endl;
00207 return 0;
00208 }
00209 else
00210 {
00211 ADC=mTheSmdAdcR.SMDADCArray[fiber][index];
00212 return 1;
00213 }
00214 }
00215 else
00216 return 0;
00217 }
00218
00219 int EMC_Reader::getSMD_TIMEBIN(int fiber, unsigned int& TimeBin)
00220 {
00221 if(mSmdPresent)
00222 {
00223 if(strncmp(mTheSmdAdcR.BankType,"BSMDADCR",8))
00224 {
00225
00226 TimeBin=999;
00227 return 0;
00228 }
00229 else
00230 {
00231 TimeBin=mTheSmdAdcR.TimeBin[fiber];
00232 return 1;
00233 }
00234 }
00235 else
00236 return 0;
00237 }
00238 bool EMC_Reader::isTowerPresent()
00239 {
00240 return mTowerPresent;
00241 }
00242 bool EMC_Reader::isSmdPresent()
00243 {
00244 return mSmdPresent;
00245 }
00246 Bank_BTOWERADCR& EMC_Reader::getBTOWERADCR()
00247 {
00248 return mTheTowerAdcR;
00249 }
00250 Bank_BSMDADCR& EMC_Reader::getSMD_ADCR()
00251 {
00252 return mTheSmdAdcR;
00253 }