00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <string.h>
00017 #include <stdio.h>
00018 #include <errno.h>
00019 #include <assert.h>
00020 #include "Stypes.h"
00021
00022 #include "StSVTReader.h"
00023 #include "StDaqLib/SVT/SVTV1P0_Reader.hh"
00024
00025
00026
00027 typedef EventInfo DAQEventInfo;
00028
00029
00030 StSVTReader::StSVTReader(StDAQReader *daqr)
00031 {
00032 fDAQReader = daqr;
00033 fWafer = -1999;
00034 fSVTImpReader = 0;
00035 fZeroSuppressedReader = 0;
00036 fADCRawReader = 0;
00037 fPedestalReader = 0;
00038 fPedestalRMSReader = 0;
00039 fGainReader = 0;
00040 fCPPReader = 0;
00041 fBadChannelReader = 0;
00042 Update();
00043 }
00044
00045 void StSVTReader::Update()
00046 {
00047 setWafer(-1,-1,-1);
00048 }
00049
00050 StSVTReader::~StSVTReader()
00051 {
00052 close();
00053 }
00054
00055 int StSVTReader::close()
00056 {
00057 fWafer = -1999;
00058
00059 delete fSVTImpReader; fSVTImpReader =0;
00060 delete fZeroSuppressedReader; fZeroSuppressedReader =0;
00061 delete fADCRawReader; fADCRawReader =0;
00062 delete fPedestalReader; fPedestalReader =0;
00063 delete fPedestalRMSReader; fPedestalRMSReader =0;
00064 delete fGainReader ; fGainReader =0;
00065 delete fCPPReader ; fCPPReader =0;
00066 delete fBadChannelReader; fBadChannelReader =0;
00067 return 0;
00068 }
00069
00070 int StSVTReader::setWafer(int barrel, int ladder, int wafer)
00071 {
00072 int waferIndex = getWaferIndex(barrel, ladder, wafer);
00073
00074 if (waferIndex == fWafer) return waferIndex;
00075
00076 delete fZeroSuppressedReader; fZeroSuppressedReader =0;
00077 delete fADCRawReader; fADCRawReader =0;
00078 delete fPedestalReader; fPedestalReader =0;
00079 delete fPedestalRMSReader; fPedestalRMSReader =0;
00080 delete fGainReader ; fGainReader =0;
00081 delete fCPPReader ; fCPPReader =0;
00082 delete fBadChannelReader; fBadChannelReader =0;
00083
00084 if ((barrel == -1) && (ladder == -1) && (wafer == -1)) {
00085 delete fSVTImpReader;
00086 fSVTImpReader = ::getDetectorReader(fDAQReader->getEventReader(), "SVT");
00087 fWafer = -1999;
00088 }
00089
00090 if ((barrel == -1) && (ladder == -1) && (wafer == -1)) return -1;
00091
00092 fWafer = waferIndex;
00093
00094 fZeroSuppressedReader = ((SVTV1P0_Reader*)fSVTImpReader)->getZeroSuppressedReader(barrel, ladder, wafer);
00095 fADCRawReader = ((SVTV1P0_Reader*)fSVTImpReader)->getADCRawReader(barrel, ladder, wafer);
00096 fPedestalReader = ((SVTV1P0_Reader*)fSVTImpReader)->getPedestalReader(barrel, ladder, wafer);
00097 fPedestalRMSReader = ((SVTV1P0_Reader*)fSVTImpReader)->getPedestalRMSReader(barrel, ladder, wafer);
00098
00099 fCPPReader = ((SVTV1P0_Reader*)fSVTImpReader)->getCPPReader(barrel, ladder, wafer);
00100
00101
00102 mSCAZero = ((SVTV1P0_Reader*)fSVTImpReader)->getSCAZero();
00103 mTimeZero = ((SVTV1P0_Reader*)fSVTImpReader)->getTimeZero();
00104
00105 return waferIndex;
00106 }
00107
00108
00109 int StSVTReader::getWaferIndex(int barrel, int ladder, int wafer)
00110 {
00111 short index;
00112 int numberOfLadders[3] = {8,12,16};
00113 int numberOfWafers[3] = {4,6,7};
00114 int numberOfHybrids = 2; if(numberOfHybrids) {}
00115
00116 switch (barrel) {
00117
00118 case 1:
00119 index = (ladder-1)*numberOfWafers[barrel-1] + wafer;
00120 break;
00121
00122 case 2:
00123 index = numberOfLadders[barrel-2]*numberOfWafers[barrel-2] +
00124 (ladder-1)*numberOfWafers[barrel-1] + wafer;
00125 break;
00126
00127 case 3:
00128 index = numberOfLadders[barrel-3]*numberOfWafers[barrel-3] +
00129 numberOfLadders[barrel-2]*numberOfWafers[barrel-2] +
00130 (ladder-1)*numberOfWafers[barrel-1] + wafer;
00131 break;
00132
00133 default:
00134
00135 index = -1;
00136 break;
00137 }
00138
00139 if ((index < 1) || (index > 216)) index = -1;
00140 return index;
00141 }
00142
00143
00144 int StSVTReader::getAnodeList(int barrel, int ladder, int wafer, int hybrid, unsigned char *&anodeList)
00145 {
00146 int waferIndex = setWafer(barrel, ladder, wafer);
00147 if (waferIndex == -1) return -1;
00148 if (!fZeroSuppressedReader) return -1;
00149 return fZeroSuppressedReader->getPadList(hybrid, &anodeList);
00150 }
00151
00152 int StSVTReader::getSequences(int barrel, int ladder, int wafer, int hybrid, int Anode, int &nSeq,
00153 TPCSequence *&SeqData)
00154 {
00155 int waferIndex = setWafer(barrel, ladder, wafer);
00156 if (waferIndex == -1) return -1;
00157 nSeq = 0; SeqData = 0;
00158 if (!fZeroSuppressedReader) return -1;
00159 Sequence *seq;
00160 int iret = fZeroSuppressedReader->getSequences(hybrid,Anode,&nSeq,&seq);
00161 assert (sizeof(TPCSequence)==sizeof(Sequence));
00162 SeqData = (TPCSequence*)seq;
00163 return iret;
00164 }
00165
00166
00167 int StSVTReader::getRawADC(int barrel, int ladder, int wafer, int hybrid, int Anode, int &nArray,
00168 unsigned char *&Array)
00169 {
00170 int waferIndex = setWafer(barrel, ladder, wafer);
00171 if (waferIndex == -1) return -1;
00172 nArray = 0; Array=0;
00173 if (!fADCRawReader) return -1;
00174 int status = fADCRawReader->getSequences(hybrid,Anode,&nArray,&Array);
00175
00176
00177 return status;
00178 }
00179
00180 int StSVTReader::getPedestals(int barrel, int ladder, int wafer, int hybrid, int Anode, int &nArray,
00181 unsigned char *&Array)
00182 {
00183 int waferIndex = setWafer(barrel, ladder, wafer);
00184 if (waferIndex == -1) return -1;
00185 nArray = 0; Array=0;
00186 if (!fPedestalReader) return -1;
00187 return fPedestalReader->getSequences(hybrid,Anode,&nArray,&Array);
00188 }
00189
00190 int StSVTReader::getRMSPedestals(int barrel, int ladder, int wafer, int hybrid, int Anode, int &nArray,
00191 unsigned char *&Array)
00192 {
00193 int waferIndex = setWafer(barrel, ladder, wafer);
00194 if (waferIndex == -1) return -1;
00195 nArray = 0; Array=0;
00196 if (!fPedestalRMSReader) return -1;
00197 return fPedestalRMSReader->getSequences(hybrid,Anode,&nArray,&Array);
00198 }
00199
00200 int StSVTReader::getGain(int barrel, int ladder, int wafer, int hybrid, int Anode, TPCGain *&gain)
00201 {
00202 int waferIndex = setWafer(barrel, ladder, wafer);
00203 if (waferIndex == -1) return -1;
00204 gain = 0;
00205 if (!fGainReader) return -1;
00206 struct Gain *gainqq;
00207 int iret = fGainReader->getGain(hybrid,Anode,&gainqq);
00208 assert(sizeof(TPCGain)==sizeof(struct Gain));
00209 gain = (TPCGain*)gainqq;
00210 return iret;
00211 }
00212
00213 int StSVTReader::getClusters(int barrel, int ladder, int wafer, int hybrid, int Anode, int &nClusters,
00214 TPCCluster *&clusters)
00215 {
00216 int waferIndex = setWafer(barrel, ladder, wafer);
00217 if (waferIndex == -1) return -1;
00218 nClusters=0; clusters=0;
00219 if (!fCPPReader) return -1;
00220 struct ASIC_Cluster *clustersqq;
00221 int iret = fCPPReader->getClusters(hybrid,Anode,&nClusters,&clustersqq);
00222 assert(sizeof(TPCCluster)==sizeof(struct ASIC_Cluster));
00223 clusters = (TPCCluster *)clustersqq;
00224 return iret;
00225 }
00226
00227 int StSVTReader::IsBad(int barrel, int ladder, int wafer, int hybrid, int Anode)
00228 {
00229 int waferIndex = setWafer(barrel, ladder, wafer);
00230 if (waferIndex == -1) return -1;
00231 if (!fBadChannelReader) return 1;
00232 return fBadChannelReader->IsBad(hybrid,Anode);
00233 }
00234
00235