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
00033
00034
00035
00036
00037
00038
00039 #include "Stypes.h"
00040
00041
00042 #include <string.h>
00043 #include <stdio.h>
00044 #include <errno.h>
00045 #include <unistd.h>
00046 #include <assert.h>
00047 #include <sys/types.h>
00048 #include <sys/stat.h>
00049 #include <fcntl.h>
00050 #include "Stypes.h"
00051
00052 #include "StDaqLib/GENERIC/EventReader.hh"
00053 #include "StDAQReader.h"
00054 #include "StTPCReader.h"
00055
00056
00057 StTPCReader::StTPCReader(StDAQReader *daqr,char mergeSequences)
00058 {
00059 mMergeSequences=mergeSequences;
00060 ptrTPCP=NULL;
00061 fDAQReader = daqr;
00062 fSector = -1999;
00063 fTPCImpReader = 0;
00064 fZeroSuppressedReader = 0;
00065 fADCRawReader = 0;
00066 fPedestalReader = 0;
00067 fPedestalRMSReader = 0;
00068 fGainReader = 0;
00069 fCPPReader = 0;
00070 fBadChannelReader = 0;
00071 Update();
00072 }
00073
00074 int StTPCReader::Update()
00075 {
00076 return setSector(-1);
00077 }
00078
00079 int StTPCReader::empty()
00080 {
00081 if(!fTPCImpReader) Update();
00082 return (!fTPCImpReader);
00083 }
00084
00085 StTPCReader::~StTPCReader()
00086 { close();}
00087
00088
00089 int StTPCReader::close()
00090 {
00091 delete fZeroSuppressedReader; fZeroSuppressedReader = 0;
00092 delete fADCRawReader ; fADCRawReader = 0;
00093 delete fPedestalReader ; fPedestalReader = 0;
00094 delete fPedestalRMSReader; fPedestalRMSReader = 0;
00095 delete fGainReader; fGainReader = 0;
00096 delete fCPPReader; fCPPReader = 0;
00097 delete fBadChannelReader; fBadChannelReader = 0;
00098 delete fTPCImpReader; fTPCImpReader = 0;
00099 fSector=-1999;
00100 ptrTPCP=NULL;
00101 return 0;
00102 }
00103
00104 int StTPCReader::setSector(int sector)
00105 {
00106 if (fTPCImpReader && sector == fSector) return 0;
00107
00108 delete fZeroSuppressedReader; fZeroSuppressedReader = 0;
00109 delete fADCRawReader ; fADCRawReader = 0;
00110 delete fPedestalReader ; fPedestalReader = 0;
00111 delete fPedestalRMSReader; fPedestalRMSReader = 0;
00112 delete fGainReader; fGainReader = 0;
00113 delete fCPPReader; fCPPReader = 0;
00114 delete fBadChannelReader; fBadChannelReader = 0;
00115
00116 if (!fTPCImpReader || sector == -1) {
00117 delete fTPCImpReader;
00118 ptrTPCP=NULL;
00119 fTPCImpReader = ::getDetectorReader(fDAQReader->getEventReader(),fDAQReader->getTPCVersion());
00120
00121 fSector = -1999;
00122 if(!fTPCImpReader) return 1;
00123 ptrTPCP=fTPCImpReader->motherPointerBank;
00124 if (sector == -1) return 0;
00125 }
00126
00127 fSector = sector;
00128
00129 assert(fTPCImpReader);
00130 assert( fSector<90 && (mMergeSequences==1||mMergeSequences==0) );
00131 fZeroSuppressedReader = fTPCImpReader->getZeroSuppressedReader(fSector+100*mMergeSequences);
00132 fADCRawReader = fTPCImpReader->getADCRawReader(fSector);
00133 fPedestalReader = fTPCImpReader->getPedestalReader(fSector);
00134 fPedestalRMSReader = fTPCImpReader->getPedestalRMSReader(fSector);
00135 fGainReader = fTPCImpReader->getGainReader(fSector);
00136 fCPPReader = fTPCImpReader->getCPPReader(fSector);
00137 fBadChannelReader = fTPCImpReader->getBadChannelReader(fSector);
00138
00139
00140 return 0;
00141 }
00142
00143
00144 int StTPCReader::getMaxPad(int padrow) const
00145 {
00146 const unsigned char PADS[45] = {
00147 88, 96,104,112,118,126,134,142,150,
00148 158,166,174,182, 98,100,102,104,106,
00149 106,108,110,112,112,114,116,118,120,
00150 122,122,124,126,128,128,130,132,134,
00151 136,138,138,140,142,144,144,144,144};
00152
00153 assert(padrow>0 && padrow <=45);
00154 return PADS[padrow-1];
00155 }
00156
00157
00158 int StTPCReader::getPadList(int Sector, int PadRow, unsigned char *&padList)
00159 {
00160 if (setSector(Sector)) return -1;
00161 if (!fZeroSuppressedReader) return -1;
00162 return fZeroSuppressedReader->getPadList(PadRow, &padList);
00163 }
00164
00165 int StTPCReader::getSequences(int Sector, int PadRow, int Pad, int &nSeq,
00166 TPCSequence *&SeqData)
00167 {
00168 if (setSector(Sector)) return -1;
00169 nSeq = 0; SeqData = 0;
00170 if (!fZeroSuppressedReader) return -1;
00171 Sequence *seq;
00172 int iret = fZeroSuppressedReader->getSequences(PadRow,Pad,&nSeq,&seq);
00173 assert (sizeof(TPCSequence)==sizeof(Sequence));
00174 SeqData = (TPCSequence*)seq;
00175 return iret;
00176 }
00177
00178
00179 int StTPCReader::getRawADC(int Sector,int PadRow, int Pad, int &nArray,
00180 unsigned char *&Array)
00181 {
00182 if (setSector(Sector)) return -1;
00183 nArray = 0; Array=0;
00184 if (!fADCRawReader) return -1;
00185 return fADCRawReader->getSequences(PadRow,Pad,&nArray,&Array);
00186 }
00187
00188 int StTPCReader::getPedestals(int Sector,int PadRow, int Pad, int &nArray,
00189 unsigned char *&Array)
00190 {
00191 if (setSector(Sector)) return -1;
00192 nArray = 0; Array=0;
00193 if (!fPedestalReader) return -1;
00194 return fPedestalReader->getSequences(PadRow,Pad,&nArray,&Array);
00195 }
00196
00197 int StTPCReader::getRMSPedestals(int Sector,int PadRow, int Pad, int &nArray,
00198 unsigned char *&Array)
00199 {
00200 if (setSector(Sector)) return -1;
00201 nArray = 0; Array=0;
00202 if (!fPedestalRMSReader) return -1;
00203 return fPedestalRMSReader->getSequences(PadRow,Pad,&nArray,&Array);
00204 }
00205
00206 int StTPCReader::getGain(int Sector, int PadRow, int Pad, TPCGain *&gain)
00207 {
00208 if (setSector(Sector)) return -1;
00209 gain = 0;
00210 if (!fGainReader) return -1;
00211 struct Gain *gainqq;
00212 int iret = fGainReader->getGain(PadRow,Pad,&gainqq);
00213 assert(sizeof(TPCGain)==sizeof(struct Gain));
00214 gain = (TPCGain*)gainqq;
00215 return iret;
00216 }
00217
00218 int StTPCReader::getClusters(int Sector, int PadRow, int Pad, int &nClusters,
00219 TPCCluster *&clusters)
00220 {
00221 if (setSector(Sector)) return -1;
00222 nClusters=0; clusters=0;
00223 if (!fCPPReader) return -1;
00224 struct ASIC_Cluster *clustersqq;
00225 int iret = fCPPReader->getClusters(PadRow,Pad,&nClusters,&clustersqq);
00226 assert(sizeof(TPCCluster)==sizeof(struct ASIC_Cluster));
00227 clusters = (TPCCluster *)clustersqq;
00228 return iret;
00229 }
00230
00231 int StTPCReader::IsBad(int Sector, int PadRow, int Pad)
00232 {
00233 if (setSector(Sector)) return -1;
00234 if (!fBadChannelReader) return -1;
00235 return fBadChannelReader->IsBad(PadRow,Pad);
00236 }
00237
00238 void StTPCReader::SetSequenceMerging (char mergeSequences)
00239 {
00240 mMergeSequences=mergeSequences;
00241 }