00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <string.h>
00033 #include <stdio.h>
00034 #include <errno.h>
00035 #include <unistd.h>
00036 #include <assert.h>
00037 #include <sys/types.h>
00038 #include <sys/stat.h>
00039 #include <fcntl.h>
00040 #include "Stypes.h"
00041
00042 #include "StDaqLib/GENERIC/EventReader.hh"
00043 #include "StDAQReader.h"
00044 #include "StFTPCReader.h"
00045
00046
00047
00048 typedef EventInfo DAQEventInfo;
00049
00050 StFTPCReader::StFTPCReader(StDAQReader *daqr)
00051 {
00052 simu=0;
00053 fDAQReader = daqr;
00054 fSector = -1999;
00055 fFTPCImpReader = 0;
00056 fZeroSuppressedReader = 0;
00057 fADCRawReader = 0;
00058 fPedestalReader = 0;
00059 fPedestalRMSReader = 0;
00060 fGainReader = 0;
00061 fCPPReader = 0;
00062 fBadChannelReader = 0;
00063 Update();
00064 }
00065
00066 StFTPCReader::StFTPCReader(unsigned short *fcl_ftpcsqndx, int nSeq,
00067 char *fcl_ftpcadc, int nAdc)
00068 {
00069 simu=1;
00070 m_ftpcsqndx=fcl_ftpcsqndx;
00071 m_ftpcadc=fcl_ftpcadc;
00072 m_numSqndx=nSeq;
00073 m_numAdc=nAdc;
00074
00075 mSecReader=0;
00076 fSector = -1999;
00077 Update();
00078 }
00079
00080 void StFTPCReader::Update()
00081 {
00082 setSector(-1);
00083 }
00084
00085 StFTPCReader::~StFTPCReader()
00086 {
00087 if(simu)
00088 {
00089 delete mSecReader;
00090 }
00091 else
00092 {
00093 close();
00094 }
00095 }
00096
00097 bool StFTPCReader::checkForData()
00098 {
00099 if (fFTPCImpReader) {
00100 return TRUE;
00101 }
00102
00103 else {
00104 return FALSE;
00105 }
00106 }
00107
00108 int StFTPCReader::close()
00109 {
00110 delete fZeroSuppressedReader; fZeroSuppressedReader = 0;
00111 delete fADCRawReader ; fADCRawReader = 0;
00112 delete fPedestalReader ; fPedestalReader = 0;
00113 delete fPedestalRMSReader; fPedestalRMSReader = 0;
00114 delete fGainReader; fGainReader = 0;
00115 delete fCPPReader; fCPPReader = 0;
00116 delete fBadChannelReader; fBadChannelReader = 0;
00117 delete fFTPCImpReader; fFTPCImpReader = 0;
00118 fSector=-1999;
00119 return 0;
00120 }
00121
00122 int StFTPCReader::setSector(int sector)
00123 {
00124 if (sector == fSector) return 0;
00125
00126 if(simu)
00127 {
00128
00129 delete mSecReader;
00130 mSecReader = 0;
00131
00132 if (sector == -1) {
00133 fSector = -1999;
00134 return 0;
00135 }
00136
00137 fSector = sector;
00138
00139 mSecReader = new StFssSectorReader(fSector, m_ftpcsqndx, m_numSqndx, m_ftpcadc, m_numAdc);
00140 mSecReader->initialize();
00141 }
00142 else
00143 {
00144 delete fZeroSuppressedReader; fZeroSuppressedReader = 0;
00145 delete fADCRawReader ; fADCRawReader = 0;
00146 delete fPedestalReader ; fPedestalReader = 0;
00147 delete fPedestalRMSReader; fPedestalRMSReader = 0;
00148 delete fGainReader; fGainReader = 0;
00149 delete fCPPReader; fCPPReader = 0;
00150 delete fBadChannelReader; fBadChannelReader = 0;
00151
00152 if (sector == -1) {
00153 delete fFTPCImpReader;
00154 fFTPCImpReader = ::getDetectorReader(fDAQReader->getEventReader(),"FTPC");
00155 fSector = -1999;
00156 if(!fFTPCImpReader) return 1;
00157 return 0;
00158 }
00159
00160 fSector = sector;
00161
00162
00163 fZeroSuppressedReader = fFTPCImpReader->getZeroSuppressedReader(fSector);
00164 fADCRawReader = fFTPCImpReader->getADCRawReader(fSector);
00165 fPedestalReader = fFTPCImpReader->getPedestalReader(fSector);
00166 fPedestalRMSReader = fFTPCImpReader->getPedestalRMSReader(fSector);
00167 fGainReader = fFTPCImpReader->getGainReader(fSector);
00168 fCPPReader = fFTPCImpReader->getCPPReader(fSector);
00169 fBadChannelReader = fFTPCImpReader->getBadChannelReader(fSector);
00170 }
00171 return 0;
00172 }
00173
00174 int StFTPCReader::getPadList(int Sector, int PadRow, unsigned char *&padList)
00175 {
00176 setSector(Sector);
00177
00178 if(simu)
00179 {
00180 if (!mSecReader)
00181 return -1;
00182 return mSecReader->getPadList(PadRow, &padList);
00183 }
00184 else
00185 {
00186 if (!fZeroSuppressedReader) return -1;
00187 return fZeroSuppressedReader->getPadList(PadRow, &padList);
00188 }
00189 }
00190
00191 int StFTPCReader::getSequences(int Sector, int PadRow, int Pad, int *nSeq,
00192 TPCSequence *&SeqData)
00193 {
00194 setSector(Sector);
00195 *nSeq = 0; SeqData = 0;
00196 int iret=0;
00197 Sequence *seq;
00198
00199 if(simu)
00200 {
00201 if (!mSecReader)
00202 return -1;
00203 iret = mSecReader->getSequences(PadRow,Pad,nSeq,&seq);
00204 }
00205 else
00206 {
00207 if (!fZeroSuppressedReader) return -1;
00208 iret = fZeroSuppressedReader->getSequences(PadRow,Pad,nSeq,&seq);
00209 }
00210 assert (sizeof(TPCSequence)==sizeof(Sequence));
00211 SeqData = (TPCSequence*)seq;
00212 return iret;
00213 }
00214
00215
00216 int StFTPCReader::getRawADC(int Sector,int PadRow, int Pad, int &nArray,
00217 unsigned char *&Array)
00218 {
00219 if(simu)
00220 {
00221 return -1;
00222 }
00223 else
00224 {
00225 setSector(Sector);
00226 nArray = 0; Array=0;
00227 if (!fADCRawReader) return -1;
00228 return fADCRawReader->getSequences(PadRow,Pad,&nArray,&Array);
00229 }
00230 }
00231
00232 int StFTPCReader::getPedestals(int Sector,int PadRow, int Pad, int &nArray,
00233 unsigned char *&Array)
00234 {
00235 if(simu)
00236 {
00237 return -1;
00238 }
00239 else
00240 {
00241 setSector(Sector);
00242 nArray = 0; Array=0;
00243 if (!fPedestalReader) return -1;
00244 return fPedestalReader->getSequences(PadRow,Pad,&nArray,&Array);
00245 }
00246 }
00247
00248 int StFTPCReader::getRMSPedestals(int Sector,int PadRow, int Pad, int &nArray,
00249 unsigned char *&Array)
00250 {
00251 if(simu)
00252 {
00253 return -1;
00254 }
00255 else
00256 {
00257 setSector(Sector);
00258 nArray = 0; Array=0;
00259 if (!fPedestalRMSReader) return -1;
00260 return fPedestalRMSReader->getSequences(PadRow,Pad,&nArray,&Array);
00261 }
00262 }
00263
00264 int StFTPCReader::getGain(int Sector, int PadRow, int Pad, TPCGain *&gain)
00265 {
00266 if(simu)
00267 {
00268 return -1;
00269 }
00270 else
00271 {
00272 setSector(Sector);
00273 gain = 0;
00274 if (!fGainReader) return -1;
00275 struct Gain *gainqq;
00276 int iret = fGainReader->getGain(PadRow,Pad,&gainqq);
00277 assert(sizeof(TPCGain)==sizeof(struct Gain));
00278 gain = (TPCGain*)gainqq;
00279 return iret;
00280 }
00281 }
00282
00283 int StFTPCReader::getClusters(int Sector, int PadRow, int Pad, int &nClusters,
00284 TPCCluster *&clusters)
00285 {
00286 if(simu)
00287 {
00288 return -1;
00289 }
00290 else
00291 {
00292 setSector(Sector);
00293 nClusters=0; clusters=0;
00294 if (!fCPPReader) return -1;
00295 struct ASIC_Cluster *clustersqq;
00296 int iret = fCPPReader->getClusters(PadRow,Pad,&nClusters,&clustersqq);
00297 assert(sizeof(TPCCluster)==sizeof(struct ASIC_Cluster));
00298 clusters = (TPCCluster *)clustersqq;
00299 return iret;
00300 }
00301 }
00302
00303 int StFTPCReader::IsBad(int Sector, int PadRow, int Pad)
00304 {
00305 if(simu)
00306 {
00307 return -1;
00308 }
00309 else
00310 {
00311 setSector(Sector);
00312 if (!fBadChannelReader) return 1;
00313 return fBadChannelReader->IsBad(PadRow,Pad);
00314 }
00315 }
00316
00317