00001 00002 #include "BeamMonFillerHelpers.h" 00003 #include <BeamDataUtil/BeamMonSwicRel.h> 00004 #include <Validity/VldTimeStamp.h> 00005 00006 #include <MessageService/MsgService.h> 00007 CVSID("$Id: BeamMonFillerHelpers.cxx,v 1.2 2005/05/16 21:46:26 bv Exp $"); 00008 00009 #include <DatabaseInterface/DbiWriter.h> 00010 #include <DatabaseInterface/DbiWriter.tpl> 00011 00012 00013 00014 class BMWriteHadMuRelImp { 00015 public: 00016 DbiWriter<BeamMonSwicRel> writer; 00017 BMWriteHadMuRelImp(VldRange r, const char* c) 00018 : writer(r,-1,0,VldTimeStamp()) 00019 { 00020 writer.SetLogComment(c); 00021 } 00022 }; 00023 00024 BMWriteHadMuRel::BMWriteHadMuRel(VldRange range, const char* comment) 00025 : imp(new BMWriteHadMuRelImp(range,comment)) 00026 { 00027 00028 } 00029 BMWriteHadMuRel::~BMWriteHadMuRel() 00030 { 00031 MSG("BD",Msg::kInfo) << "Closing writer\n"; 00032 imp->writer.Close(); 00033 delete imp; 00034 } 00035 00036 void BMWriteHadMuRel::Write(const char* device_name, 00037 float channel_rel_calibs[], 00038 int nchan) 00039 { 00040 BeamMonSwicRel had_row(device_name); 00041 vector<float> &channel = had_row.GetChannels(); 00042 MSG("BD",Msg::kInfo) << device_name << endl; 00043 for (int ch=0; ch<96; ++ch) { 00044 int ind = ch-48; 00045 if (ch<48) ind = ch+48; 00046 if (ch<nchan) 00047 channel[ind] = channel_rel_calibs[ch]; 00048 else 00049 channel[ind] = 0; 00050 MSG("BD",Msg::kInfo) << "[" << channel[ind] << "] "; 00051 } 00052 00053 MSG("BD",Msg::kInfo) << "\nWriting\n"; 00054 imp->writer << had_row; 00055 } 00056