#include "hrichsenderrawaccu.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hrichdetector.h"
#include "hcategory.h"
#include "hiterator.h"
#include "hmatrixcatiter.h"
#include "hlocation.h"
#include "hrichraw.h"
#include "hdebug.h"
#include "hades.h"
#include "richdef.h"
ClassImp(HRichSenderRawAccu)
HRichSenderRawAccu::HRichSenderRawAccu(const Text_t *name,const Text_t *title,const Text_t *host,Int_t port,Int_t evt) :
HReconstructor(name,title)
{
hostname = host;
nPort = port;
nCount = evt;
iLocalCount =0;
fRawIter = NULL;
}
HRichSenderRawAccu::HRichSenderRawAccu()
{
}
HRichSenderRawAccu::~HRichSenderRawAccu(void) {
if (sock) delete sock;
if (mess) delete mess;
}
Bool_t HRichSenderRawAccu::init() {
printf("initialization of rich raw data radio\n");
HRichDetector *pRichDet = (HRichDetector*)gHades->getSetup()
->getDetector("Rich");
fRawCat=gHades->getCurrentEvent()->getCategory(catRichRaw);
if (!fRawCat) {
fRawCat=pRichDet->buildCategory(catRichRaw);
if (!fRawCat) return kFALSE;
else gHades->getCurrentEvent()
->addCategory(catRichRaw, fRawCat, "Rich");
}
fRawIter = (HIterator*)fRawCat->MakeIterator();
fRawAccu = pRichDet->buildCategory(catRichRaw);
initNetwork();
return kTRUE;
}
Int_t HRichSenderRawAccu::accumulate(){
HRichRaw *pRichRaw;
HRichRaw *pRichRawCopy;
HLocation locat;
fRawIter ->Reset();
while((pRichRaw = (HRichRaw *)fRawIter->Next())){
locat.set(3, pRichRaw->getSector(), pRichRaw->getRow(), pRichRaw->getCol());
pRichRawCopy = (HRichRaw*)((HMatrixCategory*)fRawAccu)->getObject(locat);
if (pRichRawCopy == NULL) {
pRichRawCopy = (HRichRaw*)((HMatrixCategory*)fRawAccu)->getSlot(locat);
if (pRichRawCopy != NULL) {
pRichRawCopy = new(pRichRawCopy) HRichRaw;
pRichRawCopy->setSector(locat[0]);
pRichRawCopy->setCol(locat[2]);
pRichRawCopy->setRow(locat[1]);
}
}
if (pRichRawCopy != NULL){
pRichRawCopy->addCharge(pRichRaw->getCharge());
}
}
return iLocalCount++;
}
void HRichSenderRawAccu::initNetwork(){
sock = new TSocket(hostname.Data(), nPort);
Char_t str[32];
sock->Recv(str, 32);
mess = new TMessage(kMESS_OBJECT);
}
Bool_t HRichSenderRawAccu::finalize() {
sock->Send("Finished");
sock->Close();
return kTRUE;
}
Int_t HRichSenderRawAccu::execute()
{
if (accumulate()==nCount){
iLocalCount =0;
mess->Reset();
mess->WriteObject(fRawAccu);
sock->Send(*mess);
fRawAccu->Clear();
}
return 0;
}
Last change: Sat May 22 13:10:06 2010
Last generated: 2010-05-22 13:10
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.