#include "BeamMonSwicPeds.h"

#include <DatabaseInterface/DbiResultSet.h>
#include <DatabaseInterface/DbiOutRowStream.h>

using namespace std;

BeamMonSwicPeds::BeamMonSwicPeds(const char* devicename)
    : fDeviceName(devicename), fMean(96,0), fSigma(96,0)
{
}

/// DbiTableRow API
DbiTableRow* BeamMonSwicPeds::CreateTableRow() const
{
    return new BeamMonSwicPeds;
}

/// DbiTableRow API >>
void BeamMonSwicPeds::Fill(DbiResultSet& rs, const DbiValidityRec* /*vrec*/)
{
    this->ClearData();

    rs >> fDeviceName >> fNsamples;
    for (int ind=0; ind<96; ++ind) {
	float tmp=0;
	rs >> tmp;
	fMean[ind] = tmp;
    }
    for (int ind=0; ind<96; ++ind) {
	float tmp=0;
	rs >> tmp;
	fSigma[ind] = tmp;
    }
}

/// DbiTableRow API <<
void BeamMonSwicPeds::Store(DbiOutRowStream& ors, const DbiValidityRec* /*vrec*/) const
{
    ors << fDeviceName<< fNsamples;
    for (int ind=0; ind<96; ++ind) ors << fMean[ind];
    for (int ind=0; ind<96; ++ind) ors << fSigma[ind];
}

void BeamMonSwicPeds::ClearData()
{
    for (int ind=0; ind<96; ++ind) fMean[ind] = fSigma[ind] = 0.0;
    fNsamples = 0;
}

void BeamMonSwicPeds::SetChannelMeans(const std::vector<double>& means)
{
    if (means.size() != 96) return; // shouldn't happen
    for (size_t ind=0; ind<96; ++ind) fMean[ind] = (float)means[ind];
}
void BeamMonSwicPeds::SetChannelSigmas(const std::vector<double>& sigmas)
{
    if (sigmas.size() != 96) return; // shouldn't happen
    for (size_t ind=0; ind<96; ++ind) fSigma[ind] = (float)sigmas[ind];
}

std::vector<double> BeamMonSwicPeds::GetMeansAsDoubles() const
{
    vector<double> ret(96,0);
    for (size_t ind=0; ind<96; ++ind) ret[ind] = fMean[ind];
    return ret;
}

std::vector<double> BeamMonSwicPeds::GetSigmasAsDoubles() const
{
    vector<double> ret(96,0);
    for (size_t ind=0; ind<96; ++ind) ret[ind] = fSigma[ind];
    return ret;
}

ClassImp(BeamMonSwicPeds)
    
