using namespace std;
#include "hhodohitffiber.h"
#include "hhododetector.h"
#include "hododef.h"
#include "hhodocal.h"
#include "hiterator.h"
#include "hcategory.h"
#include "hdebug.h"
#include "hades.h"
#include "heventheader.h"
#include "hevent.h"
#include "hhodorefhitpar.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hruntimedb.h"
#include "hhodohitffiber.h"
#include "hhodohit.h"
#include "hlocation.h"
#include "TMath.h"
#include <iostream>
#include <iomanip>
HHodoHitFFiber::HHodoHitFFiber(void)
{
clear();
}
HHodoHitFFiber::HHodoHitFFiber(const Text_t *name,const Text_t *title) :
HReconstructor(name,title)
{
clear();
}
HHodoHitFFiber::~HHodoHitFFiber(void)
{
if (pIterCal) delete pIterCal;
}
Bool_t HHodoHitFFiber::init(void)
{
HHodoDetector *hodo;
hodo=(HHodoDetector *)gHades->getSetup()->getDetector("Hodo");
if(!hodo){
Error("init","No Hodo Det. found.");
return kFALSE;
}
pCalCat=hodo->buildCategory(catHodoCal);
if (!pCalCat) return kFALSE;
pHitCat=hodo->buildCategory(catHodoHit);
if (!pHitCat) return kFALSE;
pIterCal=(HIterator *)pCalCat->MakeIterator();
refhit=(HHodoRefHitPar*)gHades->getRuntimeDb()->getContainer("HodoRefHitPar");
if (!refhit){
Error("init","No HodoRefHit Parameters");
return kFALSE;
}
loc.set(2,0,0);
fActive=kTRUE;
return kTRUE;
}
Bool_t HHodoHitFFiber::find_hit(void)
{
Bool_t foundone;
foundone=false;
for(Int_t ii=0; ii<HODOHITF_FIBER_MAXCHN; ii++){
if( hit[ii]){
if( foundone){
return(false);
}
if( ii<HODOHITF_FIBER_MAXCHN-1 && hit[ii+1]){
if( ii<HODOHITF_FIBER_MAXCHN-2 && hit[ii+2]){
if( ii<HODOHITF_FIBER_MAXCHN-3 && hit[ii+3]){
return(false);
}else{
hit[ii]=0;
hit[ii+2]=0;
hitStrip=ii+1;
hitTime=time[ii+1];
if(time[ii]<hitTime) hitTime=time[ii];
if(time[ii+2]<hitTime) hitTime=time[ii+2];
foundone=true;
}
}else{
hit[ii+1]=0;
hitStrip=ii;
if(time[ii]<time[ii+1]) hitTime=time[ii]; else hitTime=time[ii+1];
foundone=true;
}
}else{
hitStrip=ii;
hitTime=time[ii];
foundone=true;
}
}
}
return(foundone);
}
void HHodoHitFFiber::prepare_hitfinder(void)
{
for(Int_t ii=0; ii<HODOHITF_FIBER_MAXCHN; ii++){
hit[ii]=false;
time[ii]=-1000000.0;
}
HHodoCal *pCal = 0;
HHodoRefHitParMod &pRefHit=(*refhit)[usemod];
Float_t lower, upper;
lower=pRefHit.getHitLow();
upper=pRefHit.getHitHigh();
pIterCal->Reset();
while ((pCal=(HHodoCal *)pIterCal->Next())!=0)
{
Int_t m;
if(pCal->getModule()!=usemod) continue;
m=pCal->getNHits();
if(m<=0) continue;
Int_t nStrip;
Float_t fTime=-1000000.0;
nStrip = pCal->getStrip();
for(Int_t i=0; i<m; i++){
Float_t t;
t = pCal->getTime(i+1);
if( lower>=upper || (t>lower && t<upper)){
fTime=t;
break;
}
}
if(fTime<=-999999) continue;
if( nStrip>=0 && nStrip<HODOHITF_FIBER_MAXCHN){
hit[nStrip]=true;
time[nStrip]=fTime;
}
}
}
Int_t HHodoHitFFiber::execute(void)
{
Bool_t found;
prepare_hitfinder();
found=find_hit();
if(!found){
}
if(found){
HHodoHit *pHit = 0;
loc[0] = usemod;
loc[1] = hitStrip;
pHit=(HHodoHit *)pHitCat->getNewSlot(loc);
if(pHit){
pHit = new (pHit) HHodoHit;
pHit->setModule(usemod);
pHit->setStrip(hitStrip);
pHit->setTime(hitTime);
pHit->setFlag(kTRUE);
}
}
return EXIT_SUCCESS;
}
Bool_t HHodoHitFFiber::finalize(void)
{
return kTRUE;
}
void HHodoHitFFiber::clear(void)
{
pCalCat=0;
pHitCat=0;
pIterCal=0;
}
ClassImp(HHodoHitFFiber)
Last change: Sat May 22 12:57:27 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.