using namespace std;
#include "hhododetector.h"
#include "hhodocalibrater.h"
#include "hododef.h"
#include "hhodoraw.h"
#include "hhodocal.h"
#include "hhodocalpar.h"
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hevent.h"
#include "heventheader.h"
#include "hcategory.h"
#include <iostream>
#include <iomanip>
HHodoCalibrater::HHodoCalibrater(void)
{
rawCat=0;
calCat=0;
iter=0;
calpar=0;
useNoTrailEvents=false;
quietMode=false;
}
HHodoCalibrater::HHodoCalibrater(const Text_t *name,const Text_t *title) :
HReconstructor(name,title)
{
rawCat=0;
calCat=0;
iter=0;
calpar=0;
useNoTrailEvents=false;
quietMode=false;
}
HHodoCalibrater::~HHodoCalibrater(void)
{
if (iter) delete iter;
iter=0;
}
Bool_t HHodoCalibrater::init(void)
{
HHodoDetector *hodo;
hodo=(HHodoDetector *)gHades->getSetup()->getDetector("Hodo");
if(!hodo){
Error("init","No Hodo Det. found.");
return kFALSE;
}
rawCat=hodo->buildCategory(catHodoRaw);
if (!rawCat){
Error("init","No Hodo raw Cat");
return kFALSE;
}
calCat=hodo->buildCategory(catHodoCal);
if (!calCat){
Error("init","No Hodo cal Cat");
return kFALSE;
}
calpar=(HHodoCalPar*)gHades->getRuntimeDb()->getContainer("HodoCalPar");
if (!calpar){
Error("init","No HodoCalPar Parameters");
return kFALSE;
}
iter=(HIterator *)rawCat->MakeIterator();
loc.set(2,0,0);
fActive=kTRUE;
return kTRUE;
}
Int_t HHodoCalibrater::execute(void)
{
HHodoRaw *raw=0;
HHodoCal *cal=0;
Int_t mod=0, strip=0;
Float_t rawTime;
Float_t rawADC;
iter->Reset();
while ((raw=(HHodoRaw *)iter->Next())!=0) {
Int_t m;
m=raw->getNHits();
if(m<=0) continue;
raw->getAddress(mod,strip);
loc[0] = mod; loc[1] = strip;
cal=(HHodoCal*)calCat->getSlot(loc);
if (cal) {
cal=new (cal) HHodoCal;
if ( !cal ) return EXIT_FAILURE;
cal->setAddress(mod,strip);
HHodoCalParChan &pPar=(*calpar)[mod][strip];
if(m>raw->getMaxMult()) m=raw->getMaxMult();
for(Int_t i=0; i<m; i++){
rawTime = raw->getTime(i+1);
rawADC = raw->getADC(i+1);
if(rawADC<0.0){
if(useNoTrailEvents) rawADC=0.0;
if(!quietMode) Warning("execute","Evt %i Mod: %i, Chn %i, Hit %i: No trailing time found", gHades->getCurrentEvent()->getHeader()->getEventSeqNumber(),mod,strip,i);
}
if(rawADC>=0.0){
Float_t adc, time;
time=pPar.getTDCSlope()*rawTime+pPar.getTDCOffset();
adc= rawADC;
cal->setTimeAdc(time,adc);
}
}
}
}
return EXIT_SUCCESS;
}
ClassImp(HHodoCalibrater)
Last change: Sat May 22 12:57:19 2010
Last generated: 2010-05-22 12:57
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.