00001
00002
00003
00004
00005
00007 #include <Stiostream.h>
00008 #include "TObjectSet.h"
00009 #include "StDAQMaker.h"
00010 #include "StDAQReader.h"
00011 #include "StTPCReader.h"
00012 #include "StSCReader.h"
00013 #include "StRtsTable.h"
00014 #include "StRtsReaderMaker.h"
00015
00016 ClassImp(StDAQMaker)
00017
00018
00019 StDAQMaker::StDAQMaker(const char *name, const char *inputFile):
00020 StIOInterFace(name),fEvtHddr(0),fDAQReader(0),fDAQReaderSet(0),fRtsMaker(0)
00021 {
00022 if (inputFile && inputFile[0]) SetFile(inputFile);
00023 fRtsMaker = new StRtsReaderMaker;
00024 }
00025
00026 StDAQMaker::~StDAQMaker()
00027 {
00028 delete fDAQReader;
00029
00030 fDAQReaderSet=0;
00031 }
00032
00033 Int_t StDAQMaker::Init()
00034 {
00035 if (fDAQReaderSet) return 0;
00036 fDAQReaderSet = new TObjectSet("StDAQReader",0,kFALSE);
00037 AddConst(fDAQReaderSet); SetOutput(fDAQReaderSet);
00038
00039 fEvtHddr = GetEvtHddr();
00040
00041
00042 return Open();
00043 }
00044
00045 Int_t StDAQMaker::Open(const char*)
00046 {
00047 if (fDAQReader && fDAQReader->isOpened()) return 0;
00048 LOG_INFO << "Open Input file" << GetFile() << endm;
00049 if(!fDAQReader) fDAQReader = new StDAQReader(0,fRtsMaker);
00050 if (GetDebug()>1) fDAQReader->setVerbose(1);
00051 fDAQReader->open(GetFile());
00052 fDAQReaderSet->SetObject((TObject*)fDAQReader,kFALSE);
00053 return 0;
00054 }
00055
00056 void StDAQMaker::Close(Option_t *)
00057 {
00058 Clear();
00059 fDAQReader->close();
00060 }
00061
00062 Int_t StDAQMaker::Skip(int nskip){
00063 return fDAQReader->skipEvent(nskip);
00064 }
00065
00066 Int_t StDAQMaker::Make(){
00067
00068 int iret = fDAQReader->Make();
00069
00070 if (iret==kStErr) return kStErr;
00071 if (iret) iret = kStEOF;
00072 if (iret) return iret;
00073
00074
00075 fEvtHddr->SetRunNumber ( fDAQReader->getRunNumber() );
00076 fEvtHddr->SetEventNumber ( fDAQReader->getEventNumber() );
00077 fEvtHddr->SetInputTriggerMask ( fDAQReader->getTrigInputWord());
00078 fEvtHddr->SetTriggerMask ( fDAQReader->getTrigWord() );
00079 fEvtHddr->SetGMTime ( fDAQReader->getUnixTime() );
00080 fEvtHddr->SetEventSize ( fDAQReader->getEventSize() );
00081 if (Debug()) {
00082 fDAQReader->printEventInfo();
00083 fEvtHddr->Print();
00084 }
00085
00086 if ( !( fDAQReader->getUnixTime() || fDAQReader->getEventSize() ) ) {
00087 LOG_ERROR << " The run: " << fDAQReader->getRunNumber()
00088 << "/ event: " << fDAQReader->getEventNumber()
00089 << ((!fDAQReader->getUnixTime()) ? " timestamp " : " size" )
00090 << " is not correct "
00091 << endm;
00092 fDAQReader->printEventInfo();
00093 fEvtHddr->Print();
00094 iret = kStEOF;
00095 return iret;
00096 }
00097
00098 StRtsTable *daqTofTable = GetNextLegacy();
00099 if (daqTofTable) {
00100 sc_t *c = (sc_t*)*DaqDta()->begin();
00101 StSCReader scReader(c,fDAQReader->getUnixTime());
00102 AddData(scReader.getSCTable());
00103 }
00104 int adcOnly = IAttr("adcOnly");
00105 if (GetDebug()<=1 && !adcOnly) return 0;
00106
00107
00108 StTPCReader *myTPCReader = fDAQReader->getTPCReader();
00109 int nPads=0;
00110 for (int sector =1; sector <=12; sector++)
00111 {
00112 unsigned char* padList;
00113 for (int padRow=1; padRow<=45; padRow++)
00114 {
00115 int npad = myTPCReader->getPadList(sector,padRow,padList);
00116 if (npad <0) break;
00117 if (npad==0) continue;
00118 nPads+=npad;
00119 if (GetDebug()>1)
00120 LOG_INFO << Form("Sector=%2d PadRow=%2d nPads=%3d\n",sector,padRow,npad) << endm;
00121 }
00122 }
00123 if (nPads==0 && adcOnly) return kStSKIP;
00124 return 0;
00125 }
00126
00127 void StDAQMaker::Clear(const char*)
00128 {
00129 if (fDAQReader) fDAQReader->clear();
00130 StMaker::Clear();
00131 }
00132
00133
00134