00001 #include "StTriggerDataMaker.h"
00002 #include <stdlib.h>
00003 #include "StEventTypes.h"
00004 #include "StDAQMaker/StDAQReader.h"
00005 #include "StDAQMaker/StTRGReader.h"
00006 #include "StDaqLib/TRG/trgStructures2003.h"
00007 #include "StEvent/StTriggerData2003.h"
00008 #include "StDaqLib/TRG/trgStructures2004.h"
00009 #include "StEvent/StTriggerData2004.h"
00010 #include "StDaqLib/TRG/trgStructures2005.h"
00011 #include "StEvent/StTriggerData2005.h"
00012 #include "StDaqLib/TRG/trgStructures2007.h"
00013 #include "StEvent/StTriggerData2007.h"
00014 #include "StDaqLib/TRG/trgStructures2008.h"
00015 #include "StEvent/StTriggerData2008.h"
00016 #include "StDaqLib/TRG/trgStructures2009.h"
00017 #include "StEvent/StTriggerData2009.h"
00018 #include "StDaqLib/TRG/trgStructures2012.h"
00019 #include "StEvent/StTriggerData2012.h"
00020 #include "TFile.h"
00021 #include "TH1.h"
00022
00023 ClassImp(StTriggerDataMaker)
00024
00025
00026
00027 StTriggerDataMaker::StTriggerDataMaker(const char *name):StRTSBaseMaker("trg",name)
00028 {
00029 LOG_INFO << "Constructing StTriggerDataMaker with name=" << name << endm;
00030 mDebug=0;
00031 }
00032
00033
00034
00035 Int_t StTriggerDataMaker::Make()
00036 {
00037 LOG_INFO << "StTriggerDataMaker Make() starting..........Run="
00038 << GetRunNumber() << " : Event=" << GetEventNumber() << endm;
00039
00040 int year=0, run=0;
00041 const TrgDataType2003 *trgdata2003=0;
00042 const TrgDataType2004 *trgdata2004=0;
00043 const TrgDataType2005 *trgdata2005=0;
00044 const TrgDataType2007 *trgdata2007=0;
00045 const TrgDataType2008 *trgdata2008=0;
00046 const TriggerDataBlk2009 *trgdata2009=0;
00047 const TriggerDataBlk2012 *trgdata2012=0;
00048
00049 St_DataSet* daqReaderDS = GetDataSet("StDAQReader");
00050 if (!daqReaderDS) return kStWarn;
00051 StDAQReader* daqReader = (StDAQReader*)(daqReaderDS->GetObject());
00052 if (!daqReader) return kStWarn;
00053
00054 run = daqReader->getRunNumber();
00055
00056 StTRGReader* trgReader = daqReader->getTRGReader();
00057 if (trgReader && ( year = trgReader->getYear()) ){
00058
00059 LOG_INFO << "StTriggerDataMaker Make() found old data for year " << year << endm;
00060 switch(year){
00061 case 2003:
00062 trgdata2003=trgReader->getDataType2003();
00063 if (!trgdata2003) return kStWarn;
00064 AddData(new TObjectSet("StTriggerData",new StTriggerData2003(trgdata2003,run),kTRUE));
00065 break;
00066 case 2004:
00067 trgdata2004=trgReader->getDataType2004();
00068 if (!trgdata2004) return kStWarn;
00069 AddData(new TObjectSet("StTriggerData",new StTriggerData2004(trgdata2004,run),kTRUE));
00070 break;
00071 case 2005:
00072 trgdata2005=trgReader->getDataType2005();
00073 if (!trgdata2005) return kStWarn;
00074 AddData(new TObjectSet("StTriggerData",new StTriggerData2005(trgdata2005,run),kTRUE));
00075 break;
00076 case 2007:
00077 trgdata2007=trgReader->getDataType2007();
00078 if (!trgdata2007) return kStWarn;
00079 AddData(new TObjectSet("StTriggerData",new StTriggerData2007(trgdata2007,run),kTRUE));
00080 break;
00081 case 2008:
00082 trgdata2008=trgReader->getDataType2008();
00083 if (!trgdata2008) return kStWarn;
00084 AddData(new TObjectSet("StTriggerData",new StTriggerData2008(trgdata2008,run),kTRUE));
00085 break;
00086 }
00087 } else {
00088 if(mDebug>1) LOG_INFO << "StTriggerDataMaker Make() found no old format data, trying to get new data format" << endm;
00089
00090 StRtsTable *daqData = GetNextRaw();
00091 if ( daqData ){
00092 char* data = daqData->GetTable();
00093 if(data){
00094 char version = data[3];
00095 {
00096 LOG_INFO << Form("StTriggerDataMaker Make() found new data formt with version = %02x%02x%02x%02x\n",
00097 data[0],data[1],data[2],data[3]);
00098 }
00099 switch(version){
00100 case 0x40:
00101 year=2009;
00102 trgdata2009 = (TriggerDataBlk2009*)data;
00103 AddData(new TObjectSet("StTriggerData",new StTriggerData2009(trgdata2009,run,1,mDebug),kTRUE));
00104 break;
00105 case 0x41:
00106 year=2012;
00107 trgdata2012 = (TriggerDataBlk2012*)data;
00108 AddData(new TObjectSet("StTriggerData",new StTriggerData2012(trgdata2012,run,1,mDebug),kTRUE));
00109 break;
00110 default:
00111 LOG_INFO << "StTriggerDataMaker Make() found new data but with unknown version = " << version << endm;
00112 }
00113 } else {
00114 LOG_INFO << "StTriggerDataMaker Make() found no new data format neither" << endm;
00115 }
00116 } else {
00117 LOG_WARN << "StTriggerDataMaker Make() - GetNextRaw() returned nothing" << endm;
00118 }
00119 }
00120
00121 if(year==0){
00122 LOG_INFO << "StTriggerDataMaker Make() finished. Found no trigger data" << endm;
00123 return kStErr;
00124 }else{
00125 TObjectSet *os = (TObjectSet*)GetDataSet("StTriggerData");
00126 if (os) {
00127 StTriggerData* pTrg = (StTriggerData*)os->GetObject();
00128 if(pTrg){
00129
00130 unsigned int err = pTrg->errorFlag();
00131 LOG_INFO << "StTriggerDataMaker Make() finished. Found trigger data for year "<< year <<" mErrorFlag="<<err<<endm;
00132 if(err==0){
00133 return kStOK;
00134 }else{
00135 LOG_INFO << "StTriggerDataMaker Make() found fatal decording error "<< endm;
00136 pTrg->setDebug(1);
00137 if(year>=2009) pTrg->readData();
00138 pTrg->setDebug(mDebug);
00139 return kStErr;
00140 }
00141 }
00142 }
00143 LOG_INFO << "StTriggerDataMaker Make() finished. Failed to addData trigger data" << endm;
00144 return kStErr;
00145 }
00146 }