00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef TRG_Reader_hh
00014 #define TRG_Reader_hh
00015
00017 #include "StDaqLib/GENERIC/EventReader.hh"
00018 #include "StDaqLib/GENERIC/RecHeaderFormats.hh"
00019 #include "StDaqLib/GENERIC/swaps.hh"
00021 class Bank_TRGP: public Bank {
00022 public:
00023 Pointer theData;
00024 };
00025 struct trgEventDescriptor {
00026 INT32 bunchCrossingNumber1;
00027 INT32 bunchCrossingNumber2;
00028
00029
00030 INT16 token;
00031 INT16 actionWord;
00032 INT16 lastDsmOutput;
00033 INT16 dsmRawDataAddress;
00034 unsigned char busyBits;
00035 unsigned char trgFlags;
00036 INT16 triggerWord;
00037 INT16 nPre;
00038 INT16 nPost;
00039 };
00040 struct trgSummary {
00041 INT16 lengthTriggerSummary;
00042 INT16 trgSummaryFormat;
00043 unsigned char trgL0[2];
00044 INT16 L0Length;
00045 INT32 L0Data[32];
00046 unsigned char trgL1[2];
00047 INT16 L1Length;
00048 INT32 L1Data[64];
00049 unsigned char trgL2[2];
00050 INT16 L2Length;
00051 INT32 L2Data[64];
00052 };
00053 struct trgRawData {
00054 INT16 lengthTriggerRaw;
00055 INT16 trgRawFormat;
00056 unsigned char trgCTB[2];
00057 INT32 CTBdata[64];
00058 unsigned char trgMWZ[2];
00059 INT32 MWZdata[36];
00060 unsigned char trgEMC[2];
00061 INT32 EMCdata[120];
00062 };
00063 class Bank_TRGD: public Bank {
00064 public:
00065 trgEventDescriptor trgED;
00066 trgSummary trgSum;
00067 trgRawData trgRaw;
00068
00069 int swap();
00070 int swapHerb2bytes(unsigned short *data,int number);
00071 int swapHerb4bytes(unsigned int *data,int number);
00072 int swapHerb4bytes(unsigned long *data,int number);
00073
00074 int swapHerb2bytes(short *data, int number)
00075 {return swapHerb2bytes((unsigned short*)data,number);}
00076 int swapHerb4bytes(int *data, int number)
00077 {return swapHerb4bytes((unsigned int *)data,number);}
00078 int swapHerb4bytes(long *data, int number)
00079 {return swapHerb4bytes((unsigned long *)data,number);}
00080 int HerbSwap();
00081 int HerbSwap2000();
00082 int HerbSwap2003(char*);
00083 int HerbSwap2004(char*);
00084 int HerbSwap2005(char*);
00085
00086
00087 char *PrintHelp(char*,int);
00088 };
00089
00090 class TRG_Reader {
00091 friend class EventReader;
00092 public:
00093 TRG_Reader(EventReader *er, Bank_TRGP *pTRGP);
00094 ~TRG_Reader(){
00095 if (pBankUnp) delete[] pBankUnp;
00096 if (pTRGD) delete pTRGD;
00097 };
00098 Bank_TRGD *pBankTRGD;
00099 int YearOfData(char *);
00100 int S_mode;
00101 int GetErr(){return mErr;}
00102
00103 protected:
00104 EventReader *ercpy;
00105 Bank_TRGP *pBankTRGP;
00106 int mErr;
00107 char *pBankUnp;
00108 unsigned int sizeUnp;
00109 Bank_TRGD *pTRGD;
00110
00111 private:
00112 void dumpWordsToScreenInHexAndExit(int);
00113 void SanityCheck(int);
00114 void SanityCheck2000(int);
00115 void SanityCheck2003(char*, int);
00116 void SanityCheck2004(char*, int);
00117 void SanityCheck2005(char*, int);
00118 void SanityCheck2007(char*, int);
00119 void SanityCheck2008(char*, int);
00120 int UnpackTrg2007(Bank_TRGP*);
00121 int Swap2007_DescSum(char*);
00122 int Swap2007_Raw(char*);
00123 int UnpackTrg2008(Bank_TRGP*);
00124 int Swap2008_TrgTowerTrnfer(char*);
00125 int Swap2008_DescSum(char*);
00126 int Swap2008_Raw(char*);
00127 };
00128
00129 TRG_Reader *getTRGReader(EventReader *er);
00130
00131 #endif