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
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 #ifndef EVENTREADER_HH
00121 #define EVENTREADER_HH
00122
00123 #include <Stiostream.h>
00124
00125 #include <sys/types.h>
00126
00127 #include <string>
00128 #if !defined ST_NO_NAMESPACES
00129 using std::string;
00130 #endif
00131
00132 #if (__GNUC__ >= 4)
00133 # include <string.h>
00134 # include <stdlib.h>
00135 #endif
00136
00137 #include "RecHeaderFormats.hh"
00138 #include "Error.hh"
00139
00140 #define TRUE 1
00141 #define FALSE 0
00142
00143
00144
00145
00146
00147
00148 class EventReader;
00149
00150
00151
00152
00153 struct EventInfo
00154 {
00155 int EventLength;
00156 int Token;
00157 unsigned int UnixTime;
00158 unsigned int EventSeqNo;
00159 unsigned int TrigWord;
00160 unsigned int TrigInputWord;
00161 unsigned char TPCPresent;
00162 unsigned char SVTPresent;
00163 unsigned char TOFPresent;
00164 unsigned char BTOWPresent;
00165 unsigned char FPDPresent;
00166 unsigned char FTPCPresent;
00167 unsigned char EXTPresent;
00168 unsigned char RICHPresent;
00169 unsigned char TRGPresent;
00170 unsigned char L3Present;
00171 unsigned char SCPresent;
00172 unsigned char EXT2Present;
00173 unsigned char PMDPresent;
00174 unsigned char SSDPresent;
00175 unsigned char ETOWPresent;
00176 unsigned char DAQPresent;
00177 unsigned char FP2Present;
00178 unsigned char PPPresent;
00179 unsigned char BSMDPresent;
00180 unsigned char ESMDPresent;
00181
00182 unsigned char EMCPresent;
00183
00184 void printEventInfo(FILE *fd=stdout);
00185 };
00186
00187
00188 struct Sequence
00189 {
00190 u_short startTimeBin;
00191 u_short Length;
00192 u_char *FirstAdc;
00193 };
00194
00195
00196 struct Pad
00197 {
00198 u_char nseq;
00199 Sequence *seq;
00200 };
00201
00202
00203 struct PadRow
00204 {
00205 u_short npads;
00206 struct Pad *pad;
00207 };
00208
00209
00210
00211 struct Gain
00212 {
00213 int t0;
00214 int t0_rms;
00215 int rel_gain;
00216 };
00217
00218 struct ASIC_Cluster
00219 {
00220 short start_time_bin;
00221 short stop_time_bin;
00222 };
00223
00224
00225 struct Centroids {
00226 unsigned short x;
00227 unsigned short t;
00228 };
00229
00230 struct SpacePt {
00231 Centroids centroids;
00232 unsigned short flags;
00233 unsigned short q;
00234 };
00235
00236
00237
00238
00239 class ZeroSuppressedReader
00240 {
00241 public:
00242 virtual int getPadList(int PadRow, u_char **padList)=0;
00243
00244
00245
00246
00247 virtual int getSequences(int PadRow, int Pad, int *nSeq,
00248 Sequence **SeqData)=0;
00249
00250
00251
00252
00253
00254
00255
00256 virtual int getSpacePts(int PadRow, int *nSpacePts, SpacePt **SpacePts)=0;
00257
00258
00259
00260
00261
00262
00263 virtual int MemUsed()=0;
00264 virtual ~ZeroSuppressedReader() {};
00265 };
00266
00267
00268 class ADCRawReader
00269 {
00270 public:
00271 virtual int getPadList(int PadRow, unsigned char **padList)=0;
00272
00273
00274
00275
00276
00277 virtual int getSequences(int PadRow, int Pad, int *nArray, u_char **Array)=0;
00278
00279
00280
00281
00282
00283 virtual int MemUsed()=0;
00284 virtual ~ADCRawReader() {};
00285 };
00286
00287
00288 class PedestalReader
00289 {
00290 public:
00291 virtual int getPadList(int PadRow, unsigned char **padList)=0;
00292
00293
00294
00295
00296
00297 virtual int getSequences(int PadRow, int Pad, int *nArray, u_char **Array)=0;
00298
00299
00300
00301
00302
00303 virtual int getNumberOfEvents()=0;
00304
00305
00306 virtual int MemUsed()=0;
00307 virtual ~PedestalReader() {};
00308 };
00309
00310
00311 class PedestalRMSReader
00312 {
00313 public:
00314 virtual int getPadList(int PadRow, u_char **padList)=0;
00315
00316
00317
00318
00319
00320 virtual int getSequences(int PadRow, int Pad, int *nArray, u_char **Array)=0;
00321
00322
00323
00324
00325
00326 virtual int getNumberOfEvents()=0;
00327
00328
00329 virtual int MemUsed()=0;
00330 virtual ~PedestalRMSReader() {};
00331 };
00332
00333
00334 class GainReader
00335 {
00336 public:
00337 virtual int getGain(int PadRow, int Pad, struct Gain **gain)=0;
00338
00339
00340
00341
00342 virtual int getMeanGain()=0;
00343
00344
00345 virtual int getNumberOfEvents()=0;
00346
00347
00348 virtual int MemUsed()=0;
00349 virtual ~GainReader() {};
00350 };
00351
00352
00353 class CPPReader
00354 {
00355 public:
00356 virtual int getClusters(int PadRow, int Pad, int *nClusters,
00357 struct ASIC_Cluster **clusters)=0;
00358
00359
00360
00361
00362
00363 virtual int getAsicParams(ASIC_params *)=0;
00364
00365 virtual int MemUsed()=0;
00366 virtual ~CPPReader() {};
00367 };
00368
00369
00370 class BadChannelReader
00371 {
00372 public:
00373 virtual int IsBad(int PadRow, int Pad)=0;
00374
00375
00376
00377 virtual int MemUsed()=0;
00378 virtual ~BadChannelReader() {};
00379 };
00380
00381
00382 class ConfigReader
00383 {
00384 public:
00385 virtual int FEE_id(int PadRow, int Pad) = 0;
00386
00387
00388 virtual int MemUsed()=0;
00389 virtual ~ConfigReader() {};
00390 };
00391
00392
00393
00394 class DetectorReader
00395 {
00396 friend class EventReader;
00397 friend class StTPCReader;
00398
00399 public:
00400 virtual ZeroSuppressedReader *getZeroSuppressedReader(int sector)=0;
00401 virtual ADCRawReader *getADCRawReader(int sector)=0;
00402 virtual PedestalReader *getPedestalReader(int sector)=0;
00403 virtual PedestalRMSReader *getPedestalRMSReader(int sector)=0;
00404 virtual GainReader *getGainReader(int sector)=0;
00405 virtual CPPReader *getCPPReader(int sector)=0;
00406 virtual BadChannelReader *getBadChannelReader(int sector)=0;
00407
00408 virtual ~DetectorReader() { };
00409
00410 virtual int MemUsed()=0;
00411
00412 int errorNo() { return errnum; };
00413 string errstr() { return string(errstr0); };
00414
00415 protected:
00416
00417
00418
00419
00420 virtual int InformBuffers(ZeroSuppressedReader *, int sector)=0;
00421 virtual int InformBuffers(ADCRawReader *,int sector)=0;
00422 virtual int InformBuffers(PedestalReader *,int sector)=0;
00423 virtual int InformBuffers(PedestalRMSReader *,int sector)=0;
00424 virtual int InformBuffers(GainReader *,int sector)=0;
00425 virtual int InformBuffers(CPPReader *,int sector)=0;
00426 virtual int InformBuffers(BadChannelReader *,int sector)=0;
00427 virtual int InformBuffers(ConfigReader *,int sector)=0;
00428
00429 virtual int AttachBuffers(ZeroSuppressedReader *, int sector)=0;
00430 virtual int AttachBuffers(ADCRawReader *, int sector)=0;
00431 virtual int AttachBuffers(PedestalReader *, int sector)=0;
00432 virtual int AttachBuffers(PedestalRMSReader *, int sector)=0;
00433 virtual int AttachBuffers(GainReader *, int sector)=0;
00434 virtual int AttachBuffers(CPPReader *, int sector)=0;
00435 virtual int AttachBuffers(BadChannelReader *, int sector)=0;
00436 virtual int AttachBuffers(ConfigReader *, int sector)=0;
00437
00438 int errnum;
00439 char errstr0[250];
00440 void *motherPointerBank;
00441
00442 private:
00443 EventReader *er;
00444 };
00445
00446 class daqReader;
00447
00448 class EventReader
00449 {
00450 public:
00451 EventReader();
00452 EventReader(const char *logfilename);
00453
00454 void InitEventReader(int fd, long offset, int mmap);
00455
00456
00457 void InitEventReader(int fd, long offset);
00458
00459
00460 void InitEventReader(void *event);
00461
00462
00463
00464
00465
00466 long NextEventOffset();
00467 void setVerbose(int);
00468 char * findBank(char *bankid);
00469 int verbose;
00470
00471 ~EventReader();
00472
00473 char *getDATAP() { return DATAP; };
00474 daqReader *getDaqReader() { return fDaqReader; };
00475 void setDaqReader(daqReader *rdr) { fDaqReader = rdr; }
00476 struct EventInfo getEventInfo();
00477 int system_present(Bank_DATAP *datap, int sys);
00478
00479 void printEventInfo(FILE *fd=stdout);
00480 void fprintError(int err, char *file, int line, char *userstring);
00481
00482 int runno() { return runnum; }
00483 int errorNo() { return errnum; };
00484 string errstr() { return string(errstr0); };
00485 FILE *logfd;
00486 char err_string[MX_MESSAGE][30];
00487
00488 int MemUsed();
00489 char eventIsCorrupted(int fdes,long offsetInFile);
00490
00491 protected:
00492 char *DATAP;
00493 int event_size;
00494 daqReader *fDaqReader;
00495
00496 int InformBuffers(DetectorReader *) { return FALSE; };
00497
00498
00499 int AttachBuffers(DetectorReader *) { return FALSE; };
00500
00501
00502
00503 private:
00504 int fd;
00505 char *MMAPP;
00506
00507 long next_event_offset;
00508
00509 int errnum;
00510 char errstr0[250];
00511 int runnum;
00512 char *ConvertToString(unsigned long *input);
00513 void WhereAreThePointers(int *beg,int *end,char *xx);
00514 void Swap4(unsigned long *data);
00515 char BankOrItsDescendentsIsBad(int fd,long currentOffset);
00516 char mLastBank[30];
00517 int mWordIndex;
00518
00519 };
00520
00521
00522
00523
00524 DetectorReader *getDetectorReader(EventReader *, string);
00525 EventReader *getEventReader(int fd, long offset, int MMap=1);
00526 EventReader *getEventReader(int fd, long offset, const char *logfile, int MMap=1);
00527 EventReader *getEventReader(char *event);
00528
00529
00530
00531
00532
00533 #endif