00001 #include <iostream>
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <string.h>
00005 #include <stdlib.h>
00006 #include <strings.h>
00007 #include "trgStructuresVer0x22.h"
00008 #include "trgUtil.h"
00009
00010 #include "StTriggerDataReader.h"
00011
00012 ClassImp(StTriggerDataReader)
00013
00014 typedef struct {
00015 unsigned short TrgDataBytes;
00016 unsigned short TrgFiller;
00017 } TrgEvtHeader;
00018 TrgEvtHeader trgHead;
00019
00020 TrgDataType TrgData;
00021
00022 unsigned int BunchCrossingId(unsigned short b3, unsigned short b10, unsigned short b11){
00023 unsigned long long bxinghi,bxing1,bxinglo,bxing,bx0,bx1,bx2;
00024 int b120;
00025 bxinghi = b3;
00026 bxing1 = b10;
00027 bxinglo = (bxing1 << 16) + b11;
00028 bxing = (bxinghi << 32) + bxinglo;
00029 bx0 = bxing;
00030 bx1 = bx0/120;
00031 bx2 = bx1 * 120;
00032 b120 = bx0 - bx2;
00033 return (unsigned int)(b120);
00034 }
00035
00036 unsigned int BunchCrossingId7bit(unsigned short b2){
00037 int b7=0, b7dat;
00038 b7dat = b2;
00039 b7 = b7dat & 0x7f;
00040 return b7;
00041 }
00042
00043 StTriggerDataReader::StTriggerDataReader(const char *name):StMaker(name)
00044 {
00045 mFile=0;
00046 cout << "Constructing StTriggerDataReader with name=" << name << endl;
00047 }
00048
00049 Int_t StTriggerDataReader::OpenFile(char* file){
00050 if ( (mFile= fopen (file, "r") )==NULL ) {
00051 printf("Error opening data file %s\n",file);
00052 return kStErr;
00053 }
00054 printf("Opening data file %s\n",file);
00055 return kStOK;
00056 }
00057
00058 Int_t StTriggerDataReader::CloseFile(){
00059 if (mFile){
00060 printf("Closing trigger data file\n");
00061 fclose(mFile);
00062 return kStOK;
00063 }else{
00064 printf("No file to close\n");
00065 return kStOK;
00066 }
00067 }
00068
00069 Int_t StTriggerDataReader::Make(){
00070
00071 volatile unsigned int *x;
00072 int err;
00073
00074 if((err=fread((char *)&trgHead.TrgDataBytes, sizeof(char), sizeof(TrgEvtHeader) , mFile)) <=0) {
00075 if(err==0) {
00076 printf("End of file\n");
00077 return kStEOF;
00078 }
00079 printf("Error in reading TrgHead\n");
00080 fclose(mFile);
00081 return kStErr;
00082 }
00083
00084
00085 x = (volatile unsigned int*)&trgHead;
00086 *x = swapSCC(*x);
00087
00088
00089 if((err=fread((char *)&(TrgData.EvtDesc.TCUdataBytes), sizeof(char),trgHead.TrgDataBytes,mFile))<=0){
00090 printf("Error in reading TrgData\n");
00091 fclose(mFile);
00092 return kStErr;
00093 }
00094
00095
00096
00097 swapTrg(&TrgData, TrgData.EvtDesc.npre, TrgData.EvtDesc.npost);
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107 mTrg=(void *)(& TrgData);
00108 return kStOK;
00109 }