00001
00002
00003
00004
00005 #ifndef FROOT_TFndRun
00006 #define FROOT_TFndRun
00007
00009
00010
00011
00012
00013
00014
00015
00017
00018
00019 #include <TFile.h>
00020
00021 #include "TFndGtsMonFrame.h"
00022 #include "TFndTofMonFrame.h"
00023 #include "TFndSilMonFrame.h"
00024 #include "TFndLmdMonFrame.h"
00025 #include "TFndStbMonFrame.h"
00026
00027 #include "TFndRunConfiguration.h"
00028 #include "TFndGenInfo.h"
00029 #include "TFndFeeMap.h"
00030 #include "TFndHdt.h"
00031
00032 #include "TFndProcessRec.h"
00033 #include "TFndRdt.h"
00034
00035 class TFndGtsMon;
00036 class TFndTofMon;
00037 class TFndSilMon;
00038 class TFndLmdMon;
00039 class TFndStbMon;
00040
00041 #include "FROOT.h"
00042 using namespace FROOT;
00043
00044
00045
00046
00047
00048 #if defined(__CINT__)
00049 struct sockaddr_in;
00050 #endif
00051
00052
00053 class TFndRun : public TNamed {
00054 protected:
00055 enum { k_MinRawFileSize = 1024 };
00056
00057
00058 Int_t fDebug;
00059 UInt_t fDebugRawEv;
00060
00061 TFndRunConfiguration *fRunConfiguration;
00062
00063 TString fDBHost;
00064 TFndFeeMap *fFeeMap;
00065
00066 TString fDataPath;
00067 TString fRunType;
00068 Int_t fRunTypeID;
00069 Int_t fRunNumber;
00070 TString fRunFilename;
00071 TString fMonHisFilename;
00072
00073 Int_t fGebIp;
00074
00075 Int_t fOnlineFlag;
00076
00077 TString fCurRunType;
00078 UInt_t fCurRunNum;
00079 Bool_t fIsNewRun;
00080
00081 Bool_t fProcessing;
00082 Int_t fNumOfProcessedRuns;
00083 Int_t fNumOfProcessedEvents;
00084
00085 Int_t fMaxNofEvents;
00086 Int_t fMaxNofRuns;
00087
00089
00090 Int_t fSockLength;
00091 struct sockaddr_in fLocSockAddr;
00092 Int_t fUdpSd;
00093 struct sockaddr_in fShrSockAddr;
00094 Int_t fShrSockAddr_size;
00095 Int_t request_counter;
00096
00097 FILE *fRawFile;
00098
00099
00100 UInt_t fRawEvent[FIN_RAW_DATA_BUF_SIZE];
00101 UInt_t fRunTime;
00102
00103
00104
00105 TFndGenInfo *fGenInfo;
00106
00107 TFndGtsMonFrame *fGtsMonFrame;
00108 TFndTofMonFrame *fTofMonFrame;
00109 TFndSilMonFrame *fSilMonFrame;
00110 TFndLmdMonFrame *fLmdMonFrame;
00111 TFndStbMonFrame *fStbMonFrame;
00112
00113 Bool_t fMustFillMonitor[D_STB+1];
00114 TFndGtsMon *fGtsMon;
00115 TFndTofMon *fTofMon;
00116 TFndSilMon *fIsmMon;
00117 TFndSilMon *fOsmMon;
00118 TFndLmdMon *fLmdMon;
00119 TFndStbMon *fStbMon;
00120
00121 TFndRdt *fFinRdt;
00122 TFndHdt *fFinHdt;
00123
00124
00125 TFndProcessRec *fProcessRec;
00126
00127 ofstream *fCurLogFile;
00128
00129 protected:
00130 virtual Long_t OpenRawFile(TString fdir, TString fnam,Bool_t check_only=kFALSE);
00131 Int_t Init();
00132 virtual void CheckRawSwapping();
00133 void CleanEvent();
00134
00135
00136
00137 virtual Int_t CreateSocketToDAQ(E_Fnd_DaqRaw_Udp_Ports det_port);
00138 virtual Int_t ShutdownSocketToDAQ();
00139
00140 virtual Int_t CheckSocketToDAQ();
00141 virtual Int_t RecreateSocketToDAQ(E_Fnd_DaqRaw_Udp_Ports det_port=FIN_DAQ_RAW_UDP_PORT){
00142
00143
00144
00145 if(fUdpSd != -1) shutdown(fUdpSd,2);
00146 CreateSocketToDAQ(det_port);
00147 return 0;
00148 }
00149 virtual UInt_t *GetNextRawEventFromSocket(int &exit_val);
00150 virtual UInt_t *GetNextRawEventFromFile(int &exit_val);
00151
00152 public:
00153 static TFndHdt *fgFinHdt;
00154
00155 TFndRun(const TString &name="FINUDA_run_processor", const TString &title="The FINUDA run processor");
00156
00157
00158 ~TFndRun();
00159
00160 Int_t InitNewRun(TString runtype="ONLM",const Int_t &runnum=-1,const Bool_t &UsedByPrean=kFALSE);
00161 Bool_t IsProcessing() {return fProcessing;}
00162 Bool_t IsNewRun();
00163
00164 TFndFeeMap *GetFeeMap() { return fFeeMap; }
00165 Int_t CheckMsqlConnection();
00166 Int_t ConnectToDB();
00167 Int_t FetchDBinfo(Int_t source,Bool_t verbose=kFALSE);
00168 Int_t DisconnectFromDB();
00169 Int_t FinishRun(Bool_t last=kFALSE,const Bool_t &UsedByPrean=kFALSE);
00170
00171 void ClearEvent();
00172
00173 Int_t GetNofProcessedRuns() { return fNumOfProcessedRuns; }
00174 Int_t GetNofProcessedEvents() { return fNumOfProcessedEvents; }
00175
00176 UInt_t GetEvNum_Raw() { return fRawEvent ? fRawEvent[2] : 0; }
00177
00178 Int_t GetDebug() { return fDebug; }
00179 UInt_t GetDebugRawEv() { return fDebugRawEv; }
00180
00181 void ReadConfigFile(TString ConfFileName = "RunConfig.C");
00182 TFndRunConfiguration *RunConfiguration() { return fRunConfiguration; }
00183
00184 void SetDBHost(const TString &dbhost)
00185 {
00186 if(!dbhost.IsNull()) fDBHost = ExpandPathName(dbhost).Data();
00187 else Warning("SetDBHost","empty string received: using default value");
00188 }
00189 TString GetDBHost() { return fDBHost; }
00190
00191 TString GetDataPath() { return fDataPath; }
00192 void SetDataPath(const TString &data_path)
00193 {
00194 if(!data_path.IsNull()) fDataPath = data_path;
00195 else Warning("SetData_Path","empty string received: using default value");
00196 }
00197
00198 TString GetRunType(Int_t &run_type_id) { run_type_id = fRunTypeID; return fRunType;}
00199 TString GetRunType() { return fRunType;}
00200 Int_t SetRunType(TString runtype);
00201 void SetRunType(Int_t runtype);
00202
00203 UInt_t GetCurOnlineRunNmber() { return fCurRunNum; }
00204 Int_t GetRunNumber() { return fRunNumber; }
00205 void SetRunNumber(Int_t run_num){ fRunNumber = run_num; }
00206
00207 Int_t GetMaxNumberOfEvents() { return fMaxNofEvents; }
00208 void SetMaxNumberOfEvents(Int_t max_evts){ fMaxNofEvents = max_evts; }
00209
00210 Int_t GetGebIP() { return fGebIp; }
00211 void SetGebIP(Int_t geb_ip) { fGebIp = geb_ip; }
00212
00213 void SetDebugLevel(Int_t level) {fDebug = level;}
00214 void SetDebugRawEv(UInt_t levels) { fDebugRawEv = levels; }
00215
00216
00219
00220 virtual Int_t GetNextEvent(Bool_t fill_hdt=kTRUE);
00221 virtual UInt_t *GetNextRawEvent(Int_t &exit_value);
00222 Int_t ReadRawEvent(Bool_t using_db=kTRUE);
00223 UInt_t *GetCurrentRawEvent() { return fRawEvent; }
00224 virtual Int_t ReconstructEvent();
00225
00226
00227
00228 UInt_t GetRunTime() { return fRunTime;}
00229 void SetRunTime(const UInt_t &rtim)
00230 {
00231 Warning("SetRunTime","Use this method for debug only...");
00232 Printf("TFndRun::SetRunTime ---> Use this method for debug only...");
00233 fRunTime = rtim;
00234 }
00235
00236 Int_t Onlflg() { return fOnlineFlag; }
00237
00238
00241
00242 TFndGtsMonFrame *GtsMonFrame() { return fGtsMonFrame; }
00243 TFndTofMonFrame *TofMonFrame() { return fTofMonFrame; }
00244 TFndSilMonFrame *SilMonFrame() { return fSilMonFrame; }
00245 TFndLmdMonFrame *LmdMonFrame() { return fLmdMonFrame; }
00246 TFndStbMonFrame *StbMonFrame() { return fStbMonFrame; }
00247 TFndGtsMon *GtsMon() { return fGtsMon; }
00248 TFndTofMon *TofMon() { return fTofMon; }
00249 TFndSilMon *IsmMon() { return fIsmMon; }
00250 TFndSilMon *OsmMon() { return fOsmMon; }
00251 TFndLmdMon *LmdMon() { return fLmdMon; }
00252 TFndStbMon *StbMon() { return fStbMon; }
00253
00254 TFndGenInfo *GetGenInfo() {return fGenInfo;}
00255
00256
00257 void SetMustFillMonitor(EFndMonDetectors det_id,const Bool_t &val) { fMustFillMonitor[(Int_t)det_id] = val; }
00258 void FillMonitors();
00259 void WriteMonitors(Bool_t close = kFALSE);
00260
00261 void StartMonitors();
00262 void StartGtsMonitor();
00263 void StartGtsMonitor(TString *);
00264
00265 void StartTofMonitor(Int_t adc_bins = -1,Float_t adc_min = -1.,Float_t adc_max = -1.,Int_t tdc_bins = -1,Float_t tdc_min = -1.,Float_t tdc_max = -1.);
00266 void StartTofMonitor(TString *);
00267
00268 void StartIsmMonitor();
00269 void StartOsmMonitor();
00270 void StartIsmMonitor(TString *);
00271 void StartOsmMonitor(TString *);
00272
00273 void StartLmdMonitor(Int_t adc_bins = -1,Float_t adc_min = -1.,Float_t adc_max = -1.,Int_t tdc_bins = -1,Float_t tdc_min = -1.,Float_t tdc_max = -1.);
00274 void StartLmdMonitor(TString *);
00275
00276 void StartStbMonitor(Int_t tdc_bins=-1,Float_t tdc_min=-1.,Float_t tdc_max=-1.);
00277 void StartStbMonitor(TString *);
00278
00279 TFndHdt *GetCurrentHdt() { return fFinHdt; }
00280 TFndRdt *GetCurrentRdt() { return fFinRdt; }
00281
00282 Int_t StartMonFrame(Int_t det,TString RootFileName=0, TString RootFileName2=0);
00283 TFndMonFrame *GetMonFrame(Int_t det);
00284 Int_t DeleteMonFrame(Int_t det);
00285
00286
00287
00288
00289 void SetProcessRec(TFndProcessRec *proc) {fProcessRec = proc;}
00290 TFndProcessRec *GetProcessRec() {return fProcessRec;}
00291 Int_t *Zebra_LQ() {return fProcessRec->GetLQ();}
00292 Int_t *Zebra_IQ() {return fProcessRec->GetIQ();}
00293 Float_t *Zebra_Q() {return fProcessRec->GetQ();}
00294
00295
00296 virtual void OpenLogFile(const TString &fdir, const TString &fnam);
00297 void CloseLogFile();
00298 void WriteLogFile(const TString &line);
00299
00300
00301
00302 void SetHdt(TFndHdt *hdt) {fFinHdt = hdt;}
00303 void SetfProcessing(const Bool_t &flg) { fProcessing = flg; }
00304 void SetfOnlineFlag(const Int_t &flg) { fOnlineFlag = flg; }
00305 void SetfRunFileName(const TString &nam) { fRunFilename = nam; }
00306
00307 ClassDef(TFndRun,1)
00308 };
00309
00310 R__EXTERN TFndRun *fndrun;
00311
00312 #endif // FROOT_TFndRun
00313
00315
00316