00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <stdio.h>
00025 #include <unistd.h>
00026 #include <errno.h>
00027 #include <sys/types.h>
00028 #include <sys/stat.h>
00029 #include <fcntl.h>
00030 #include <assert.h>
00031 #include "Stiostream.h"
00032
00033 #include "StDaqLib/GENERIC/EventReader.hh"
00034 #include "StDaqLib/SVT/SVTV1P0_Reader.hh"
00035
00036
00037
00038 char logfile[80];
00039
00040
00041 char *convert_name_to_logfile(const char *filename)
00042 {
00043 static char locfile[80];
00044 strcpy(locfile,filename);
00045 strcat(locfile,".log");
00046 char *t1;
00047 char *t2 = locfile;
00048 t1 = strtok(locfile,"/");
00049 while (t1!=NULL) {
00050 t2 = t1;
00051 t1 = strtok(NULL,"/");
00052 }
00053 strcpy(locfile,t2);
00054 return locfile;
00055 }
00056
00057 int main(int argc, char *argv[])
00058 {
00059 int fd;
00060 string filename;
00061
00062
00063 u_char *(padlist[TPC_PADROWS]);
00064 long offset = 0L;
00065 int histogram[50] = {50*0};
00066
00067
00068 if (argc==3) offset = atol(argv[2]);
00069
00070 if(argc<2)
00071 {
00072 printf("Usage: %s file.daq [offset]\n",argv[0]);
00073 printf("Example: %s /scratch/2sbWith2Rcv_from_Tape.dat\n",argv[0]);
00074 exit(2);
00075 }
00076 else
00077 {
00078 filename = argv[1];
00079 }
00080
00081 strcpy(logfile,convert_name_to_logfile(filename.c_str()));
00082
00083 printf(" opening log file: %s\n",logfile);
00084
00085 fd = open(filename.c_str(),O_RDONLY);
00086
00087 if (fd == -1)
00088 {
00089 perror("FormatClient");
00090 }
00091
00092 int eventNo;
00093
00094 for (eventNo=0; eventNo < 1; eventNo++ )
00095 {
00096 EventReader *er = getEventReader(fd,offset,(const char *)logfile,0);
00097 if(!er)
00098 {
00099 cout << "============================================" << endl;
00100 cout << "Error creating ER" << endl;
00101 cout << "This may be simply the end of the .daq file." << endl;
00102 close(fd);
00103 exit(0);
00104
00105 }
00106
00107 er->printEventInfo();
00108
00109
00110
00111 if(offset != -1)
00112 offset = er->NextEventOffset();
00113 else
00114 offset = -1;
00115
00116 #define DOSVT
00117 #define DO_RAW
00118
00119 #ifdef DOSVT
00120 DetectorReader *dr = getDetectorReader(er, "SVT");
00121 if(!dr) {
00122 cout << "Error creating SVT_Reader: " << er->errstr() << endl;
00123 if (er->errorNo() == INFO_MISSING_BANK)
00124 cout << "No SVTP bank available" << endl;
00125 close(fd);
00126 assert(0);
00127 }
00128 else printf("created SVT_Reader!!!\n");
00129
00130
00131 #ifdef DO_RAW
00132 SVTV1P0_Reader *sdr = (SVTV1P0_Reader *)dr;
00133 int wafer = 7, barrel = 3, ladder = 1;
00134 ADCRawReader *adcrr =
00135 sdr->getADCRawReader(barrel, ladder, wafer);
00136
00137 u_char *adcVal;
00138 int nVal, hybrid=1, anode=241;
00139 int ret = adcrr->getSequences(hybrid, anode, &nVal, &adcVal);
00140 printf("Found %d ADC values for anode %d, hybrid %d\n",
00141 nVal, anode, hybrid);
00142
00143 if (nVal > 0)
00144
00145 for (int ii=0; ii<11; ii++) printf("%d ", adcVal[ii]);
00146 printf("\n");
00147
00148 delete adcrr;
00149 #endif
00150
00151 #ifdef DO_PEDR
00152 SVTV1P0_Reader *sdr = (SVTV1P0_Reader *)dr;
00153 int wafer = 7, barrel = 3, ladder = 1;
00154 PedestalReader *pedrr =
00155 sdr->getPedestalReader(barrel, ladder, wafer);
00156
00157 u_char *adcVal;
00158 int nVal, hybrid=1, anode=241;
00159 int ret = pedrr->getSequences(hybrid, anode, &nVal, &adcVal);
00160 printf("Found %d ADC values for anode %d, hybrid %d\n",
00161 nVal, anode, hybrid);
00162
00163 if (nVal > 0)
00164
00165 for (int ii=0; ii<11; ii++) printf("%d ", adcVal[ii]);
00166 printf("\n");
00167
00168 delete pedrr;
00169 #endif
00170 #ifdef DO_ZSR
00171 for(int wafer = 104; wafer < 104+5; wafer++) {
00172 ZeroSuppressedReader *zsr =
00173 dr->getZeroSuppressedReader(wafer);
00174 if (!zsr) {
00175 printf("zsr creation for wafer %d failed\n", wafer);
00176 continue;
00177 }
00178 else printf("Created zsr for wafer %d\n", wafer);
00179
00180 int nSeq, anode, hybrid;
00181 int nAnodes, nSpt;
00182 u_char *AnodeList;
00183 Sequence *Seq;
00184 SpacePt *Spt;
00185 hybrid=1;
00186
00187 nAnodes = zsr->getPadList(hybrid, &AnodeList);
00188 printf("Wafer %d, hybrid %d has %d anodes with data:\n",
00189 wafer, hybrid, nAnodes);
00190 if (nAnodes) {
00191 for (int ii=0; ii<nAnodes; ii++)
00192 printf("%d ", AnodeList[ii]);
00193 printf("\n");
00194 int ret = zsr->getSequences(hybrid, AnodeList[0], &nSeq, &Seq);
00195 printf("Found %d sequences for anode %d, hybrid %d:\n",
00196 nSeq, AnodeList[0], hybrid);
00197 if (nSeq) {
00198 printf("Sequence 0: startTime %d, len %d, ADC values:\n",
00199 Seq[0].startTimeBin, Seq[0].Length);
00200 for (int ii=0; ii<Seq[0].Length; ii++)
00201 printf("%d ", Seq[0].FirstAdc[ii]);
00202 printf("\n");
00203 }
00204 zsr->getSpacePts(hybrid, &nSpt, &Spt);
00205 printf("Found %d spacepoints\n", nSpt);
00206 }
00207
00208 delete zsr;
00209 }
00210 #endif
00211
00212 delete dr;
00213 #endif
00214
00215 delete er;
00216 }
00217 close(fd);
00218 }