
#include "BeamMonFillerHelpers.h"
#include <BeamDataUtil/BeamMonSwicRel.h>
#include <Validity/VldTimeStamp.h>

#include <MessageService/MsgService.h>
CVSID("$Id: BeamMonFillerHelpers.cxx,v 1.2 2005/05/16 21:46:26 bv Exp $");

#include <DatabaseInterface/DbiWriter.h>
#include <DatabaseInterface/DbiWriter.tpl>



class BMWriteHadMuRelImp {
public:
    DbiWriter<BeamMonSwicRel> writer;
    BMWriteHadMuRelImp(VldRange r, const char* c)
	: writer(r,-1,0,VldTimeStamp())
    {
	writer.SetLogComment(c);
    }
};

BMWriteHadMuRel::BMWriteHadMuRel(VldRange range, const char* comment)
    : imp(new BMWriteHadMuRelImp(range,comment))
{

}
BMWriteHadMuRel::~BMWriteHadMuRel()
{
    MSG("BD",Msg::kInfo) << "Closing writer\n";
    imp->writer.Close();
    delete imp;
}

void BMWriteHadMuRel::Write(const char* device_name, 
			    float channel_rel_calibs[],
			    int nchan)
{
    BeamMonSwicRel had_row(device_name);
    vector<float> &channel = had_row.GetChannels();
    MSG("BD",Msg::kInfo) << device_name << endl;
    for (int ch=0; ch<96; ++ch) {
	int ind = ch-48;
	if (ch<48) ind = ch+48;
	if (ch<nchan)
	    channel[ind] = channel_rel_calibs[ch];
	else
	    channel[ind] = 0;
	MSG("BD",Msg::kInfo) << "[" << channel[ind] << "] ";
    }

    MSG("BD",Msg::kInfo) << "\nWriting\n";
    imp->writer << had_row;
}

