00001 #include "BDUniquifyTestModule.h"
00002 #include <BeamDataUtil/BDUniquify.h>
00003 #include <BeamDataUtil/BDEarliest.h>
00004
00005 #include <RawData/RawBeamMonHeaderBlock.h>
00006 #include <RawData/RawBeamMonBlock.h>
00007 #include <RawData/RawRecord.h>
00008 #include <RawData/RawBeamData.h>
00009
00010 using namespace std;
00011
00012 #include <MinosObjectMap/MomNavigator.h>
00013 #include <JobControl/JobCModuleRegistry.h>
00014 #include <JobControl/JobCResult.h>
00015 #include <MessageService/MsgService.h>
00016 CVSID("$Id: BDUniquifyTestModule.cxx,v 1.2 2005/11/07 23:59:31 bv Exp $");
00017 JOBMODULE(BDUniquifyTestModule,
00018 "BDUniquifyTest", "Test BDUniquify class.");
00019
00020
00021 BDUniquifyTestModule::BDUniquifyTestModule()
00022 {
00023 }
00024 BDUniquifyTestModule::~BDUniquifyTestModule()
00025 {
00026 }
00027 static double get_scalar(const RawBeamMonBlock& rbmb, const char* name)
00028 {
00029 const RawBeamData* data = rbmb[name];
00030 if (!data) return 0.0;
00031 const double* ddata = data->GetData();
00032 if (!ddata) return 0.0;
00033 return ddata[0];
00034 }
00035
00036
00037 static void dump(const char* prefix,
00038 const RawBeamMonHeaderBlock& rbmhb,
00039 const RawBeamMonBlock& rbmb)
00040 {
00041 static BDEarliest earliest;
00042 earliest.SetSpill(rbmhb,rbmb);
00043 double dae=0,vme=0;
00044 earliest.GetTimestamps(dae, vme);
00045 VldTimeStamp vts_dae(dae), vts_vme(vme);
00046
00047 double tortgt = get_scalar(rbmb,"E:TORTGT");
00048 double tor101 = get_scalar(rbmb,"E:TOR101");
00049
00050 int bad = 0;
00051 vector<string> names = rbmb.GetNames();
00052 size_t siz = names.size();
00053 VldTimeStamp vts = rbmhb.GetTimeStamp();
00054 for (size_t ind=0; ind<siz; ++ind) {
00055 const RawBeamData* rbd = rbmb[names[ind]];
00056 if (!rbd) continue;
00057
00058 VldTimeStamp tmp(rbd->GetSeconds(),rbd->GetMsecs()*1000000);
00059 if (fabs(vts - tmp) > 0.5) ++bad;
00060 }
00061
00062 cerr << prefix << rbmhb.GetTimeStamp() << " "
00063 << "dae: " << vts_dae << " "
00064 << "vme: " << vts_vme << " "
00065 << bad << "/" << siz
00066 << " "
00067 << rbmhb.GetSpillCountNum()
00068 << " "
00069 << tor101 << " " << tortgt
00070 << endl;
00071 }
00072
00073 JobCResult BDUniquifyTestModule::Ana(const MomNavigator *mom)
00074 {
00075 static BDUniquify uniqifier;
00076 vector<BDUniquify::BlockPair> blocks = uniqifier.GetUniqueBlocks(*mom);
00077
00078 cerr << "Got " << blocks.size() << " unique blocks\n";
00079 for (size_t ind=0; ind<blocks.size(); ++ind) {
00080 dump("u:\t",*blocks[ind].first,*blocks[ind].second);
00081 }
00082
00083
00084
00085 TObject* tobj=0;
00086 TIter fragiter = mom->FragmentIter();
00087 while( ( tobj = fragiter.Next() ) ) {
00088 const RawRecord* rawrec = dynamic_cast<const RawRecord*>(tobj);
00089 if (!rawrec) continue;
00090
00091 const RawBeamMonHeaderBlock* rbmhb=0;
00092 const RawBeamMonBlock* rbmb=0;
00093
00094 TIter blockiter = rawrec->GetRawBlockIter();
00095 while( ( tobj = blockiter.Next() ) ) {
00096 if (!rbmhb)
00097 rbmhb = dynamic_cast<const RawBeamMonHeaderBlock*>(tobj);
00098 if (!rbmb)
00099 rbmb = dynamic_cast<const RawBeamMonBlock*>(tobj);
00100 }
00101
00102 if (!rbmhb || !rbmb) continue;
00103 dump("a:\t",*rbmhb,*rbmb);
00104 }
00105
00106
00107 return JobCResult::kAOK;
00108 }
00109 void BDUniquifyTestModule::BeginJob()
00110 {
00111 }
00112 void BDUniquifyTestModule::EndJob()
00113 {
00114 }