using namespace std;
#include <stdlib.h>
#include "hmdccalparraw.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hmdcdetector.h"
#include "hpario.h"
#include "hdetpario.h"
#include "hmdcrawstruct.h"
#include "hmessagemgr.h"
#include <iostream>
#include <iomanip>
ClassImp(HMdcCalParTdc)
ClassImp(HMdcCalParMbo)
ClassImp(HMdcCalParRawMod)
ClassImp(HMdcCalParRawSec)
ClassImp(HMdcCalParRaw)
void HMdcCalParTdc::fill(HMdcCalParTdc& r) {
slope=r.getSlope();
offset=r.getOffset();
slopeErr=r.getSlopeErr();
offsetErr=r.getOffsetErr();
slopeMethod=r.getSlopeMethod();
offsetMethod=r.getOffsetMethod();
}
HMdcCalParMbo::HMdcCalParMbo(Int_t tdc, const Text_t* name) {
SetName(name);
array = new TObjArray(tdc);
for (Int_t i=0; i<tdc; ++i) array->AddAt(new HMdcCalParTdc(),i);
}
HMdcCalParMbo::~HMdcCalParMbo() {
array->Delete();
delete array;
}
HMdcCalParRawMod::HMdcCalParRawMod(Int_t sec, Int_t mod, Int_t mbo) {
array = new TObjArray(mbo);
HMdcRawStruct* pMdc=
(HMdcRawStruct*)gHades->getRuntimeDb()->getContainer("MdcRawStruct");
if (pMdc) {
HMdcRawModStru& rMod=(*pMdc)[sec][mod];
for (Int_t i=0; i<rMod.getSize(); i++) {
HMdcRawMothStru& rMbo=rMod[i];
array->AddAt(new HMdcCalParMbo(rMbo.getNTdcs(),(Char_t*)rMbo.GetName()),i);
}
}
else cerr<<"HMdcCalParRaw not created, container MdcRawStruct not found"<<endl;
}
HMdcCalParRawMod::~HMdcCalParRawMod() {
array->Delete();
delete array;
}
HMdcCalParRawSec::HMdcCalParRawSec(Int_t sec, Int_t mod) {
array = new TObjArray(mod);
for (Int_t i=0; i<mod; i++)
array->AddAt(new HMdcCalParRawMod(sec,i),i);
}
HMdcCalParRawSec::~HMdcCalParRawSec() {
array->Delete();
delete array;
}
HMdcCalParRaw::HMdcCalParRaw(const Char_t* name,const Char_t* title,
const Char_t* context,Int_t n)
: HParSet(name,title,context) {
strcpy(detName,"Mdc");
array = new TObjArray(n);
for (Int_t i=0; i<n; i++) array->AddAt(new HMdcCalParRawSec(i),i);
}
HMdcCalParRaw::~HMdcCalParRaw() {
array->Delete();
delete array;
}
Bool_t HMdcCalParRaw::init(HParIo* inp,Int_t* set) {
HDetParIo* input=inp->getDetParIo("HMdcParIo");
if (input) return (input->init(this,set));
return kFALSE;
}
Int_t HMdcCalParRaw::write(HParIo* output) {
HDetParIo* out=output->getDetParIo("HMdcParIo");
if (out) return out->write(this);
return -1;
}
void HMdcCalParRaw::readline(const Char_t* buf, Int_t* set) {
Int_t sec, mod, mbo, tdc, slopeMethod,offsetMethod;
Float_t slope, offset, slopeErr,offsetErr;
Char_t mboName[10];
sscanf(buf,"%i%i%i%s%i%f%f%f%f%i%i",
&sec, &mod, &mbo, mboName, &tdc, &slope, &offset, &slopeErr,
&offsetErr, &slopeMethod, &offsetMethod);
Int_t n=sec*4+mod;
if (!set[n]) return;
HMdcCalParMbo& rMbo=(*this)[sec][mod][mbo];
rMbo.SetName(mboName);
HMdcCalParTdc& t=rMbo[tdc];
t.fill(slope,offset,slopeErr,offsetErr,slopeMethod,offsetMethod);
set[n]=999;
}
void HMdcCalParRaw::putAsciiHeader(TString& header) {
header=
"# Calibration parameters of the MDC\n"
"# Format:\n"
"# sector module mbo mboName tdc slope offset slopeErr offsetErr slopeMethod offsetMethod\n";
}
Bool_t HMdcCalParRaw::writeline(Char_t *buf, Int_t sec, Int_t mod, Int_t mbo, Int_t tdc) {
HMdcCalParMbo& rMbo=(*this)[sec][mod][mbo];
HMdcCalParTdc& chan=rMbo[tdc];
sprintf(buf,"%1i %1i %2i %s %3i % 10.5f % 10.2f % 12.5f % 12.2f %1i %1i \n",
sec, mod, mbo, rMbo.GetName(), tdc,
chan.getSlope(), chan.getOffset(), chan.getSlopeErr(),
chan.getOffsetErr(),chan.getSlopeMethod(), chan.getOffsetMethod());
return kTRUE;
}
void HMdcCalParRaw::clear() {
for(Int_t s=0;s<getSize();s++) {
HMdcCalParRawSec& sec=(*this)[s];
for(Int_t m=0;m<sec.getSize();m++) {
HMdcCalParRawMod& mod=sec[m];
for(Int_t l=0;l<mod.getSize();l++) {
HMdcCalParMbo& mbo=mod[l];
for(Int_t c=0;c<mbo.getSize();c++) mbo[c].clear();
}
}
}
status=kFALSE;
resetInputVersions();
}
void HMdcCalParRaw::printParam() {
SEPERATOR_msg("-",60);
INFO_msg(10,HMessageMgr::DET_MDC,"HMdcCalParRaw");
for(Int_t s=0;s<getSize();s++) {
HMdcCalParRawSec& sec=(*this)[s];
for(Int_t m=0;m<sec.getSize();m++) {
HMdcCalParRawMod& mod=sec[m];
for(Int_t l=0;l<mod.getSize();l++) {
HMdcCalParMbo& mbo=mod[l];
for(Int_t c=0;c<mbo.getSize();c++){
gHades->getMsg()->info(10,HMessageMgr::DET_MDC,GetName(),
"%1i %1i %2i %s %3i % 10.5f % 10.2f % 12.5f % 12.2f %1i %1i\n",
s, m, l, mbo.GetName(),c,
mbo[c].getSlope(),mbo[c].getOffset(),
mbo[c].getSlopeErr(),mbo[c].getOffsetErr(),
mbo[c].getSlopeMethod(),mbo[c].getOffsetMethod()
);
}
}
}
}
SEPERATOR_msg("-",60);
}
void HMdcCalParRaw::Streamer(TBuffer &R__b)
{
TString fAuthor;
TString fDescription;
TString fRunsUsed;
TString fValidity;
UInt_t R__s, R__c;
if (R__b.IsReading())
{
Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
if(R__v==1)
{
HParSet::Streamer(R__b);
R__b >> array;
fAuthor.Streamer(R__b);
fDescription.Streamer(R__b);
fRunsUsed.Streamer(R__b);
fValidity.Streamer(R__b);
R__b.CheckByteCount(R__s, R__c, HMdcCalParRaw::IsA());
}
else if(R__v==2)
{
HParSet::Streamer(R__b);
R__b >> array;
R__b.CheckByteCount(R__s, R__c, HMdcCalParRaw::IsA());
}
else{Error("HMdcCalParRaw:Streamer()","Read version not known!");}
}
else
{
HMdcCalParRaw::Class()->WriteBuffer(R__b,this);
}
}
Last change: Sat May 22 13:00:22 2010
Last generated: 2010-05-22 13:00
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.