00001 #include "BMFileSummaryFiller.h"
00002
00003 #include <BeamDataUtil/BeamMonFileSummary.h>
00004
00005 #include <BeamDataUtil/BDScalar.h>
00006
00007 #include <MessageService/MsgService.h>
00008 CVSID("$Id: BMFileSummaryFiller.cxx,v 1.6 2006/04/19 20:58:05 rhatcher Exp $");
00009
00010 #include <DatabaseInterface/DbiWriter.h>
00011
00012 #include <DatabaseInterface/DbiWriter.tpl>
00013 template class DbiWriter<BeamMonFileSummary>;
00014
00015 #include <TFile.h>
00016 #include <TSystem.h>
00017 #include <TROOT.h>
00018
00019 #include <string>
00020 using namespace std;
00021
00022
00023
00024
00025 BMFileSummaryFiller::BMFileSummaryFiller(const BDScalar& pi)
00026 : fPI(pi)
00027 , fFileSummary(0)
00028 {
00029 }
00030
00031 void BMFileSummaryFiller::SetTclkTrigger(int event, int delay)
00032 {
00033 if (fFileSummary) fFileSummary->SetTclkTrigger(event,delay);
00034 }
00035
00036 void BMFileSummaryFiller::Timestamp(const VldTimeStamp& vts)
00037 {
00038 double pot = fPI.GetValue();
00039 fFileSummary->AddSpill(vts,pot);
00040 }
00041
00042 static TFile* find_tfile(const char* filename)
00043 {
00044 string base_name = gSystem->BaseName(filename);
00045 TSeqCollection* files = gROOT->GetListOfFiles();
00046 TIter fitr(files);
00047 TFile* file=0;
00048 while ( ( file = (TFile*)fitr.Next() ) ) {
00049 string this_name = gSystem->BaseName(file->GetName());
00050 if (this_name == base_name) return file;
00051 }
00052 return 0;
00053 }
00054
00055
00056 void BMFileSummaryFiller::NewFile(const char* filename)
00057 {
00058
00059 if (fFileSummary) {
00060 MSG("BD",Msg::kError)
00061 << "Still have a live BeamMonFileSummary for file \""
00062 << fFileSummary->fFileName
00063 << "\"\n";
00064 delete fFileSummary;
00065 fFileSummary = 0;
00066 }
00067
00068 TFile* tfile = find_tfile(filename);
00069 if (!tfile) {
00070 MSG("BD",Msg::kError)
00071 << "Major badness. Could not find TFile corresponding to "
00072 << filename << endl;
00073 return;
00074 }
00075 fFileSummary = new BeamMonFileSummary;
00076 fFileSummary->SetFileInfo(*tfile);
00077 }
00078
00079 void BMFileSummaryFiller::Commit()
00080 {
00081 if (!fFileSummary) {
00082 MSG("BD",Msg::kDebug)
00083 << "Missing BeamMonFileSummary pointer in EndFile. "
00084 << "Empty file?!\n";
00085 return;
00086 }
00087
00088
00089 VldRange range(Detector::kNear|Detector::kFar,SimFlag::kData,
00090 fFileSummary->fFirstSpillTime,fFileSummary->fLastSpillTime
00091 ,"Beam");
00092 VldTimeStamp now;
00093 DbiWriter<BeamMonFileSummary> writer(range,-1,0,now);
00094 writer << (*fFileSummary) ;
00095 writer.Close();
00096
00097 delete fFileSummary;
00098 fFileSummary = 0;
00099 }
00100