#include "hrichparticleidentifier.h"
#include "hrichhitselection.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hrichdetector.h"
#include "hcategory.h"
#include "hmatrixcatiter.h"
#include "hlocation.h"
#include "hrichhit.h"
#include "hrichanalysispar.h"
#include "hrichpid.h"
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "richdef.h"
ClassImp(HRichParticleIdentifier)
HRichParticleIdentifier::HRichParticleIdentifier(const Text_t *name,const Text_t *title) : HReconstructor(name,title)
{
fIter=NULL;
m_zeroLoc.set(0);
m_pHitSelection = new HRichHitSelection;
}
HRichParticleIdentifier::HRichParticleIdentifier()
{
m_zeroLoc.set(0);
fIter=NULL;
m_pHitSelection = new HRichHitSelection;
}
HRichParticleIdentifier::~HRichParticleIdentifier(void) {
if (fIter) delete fIter;
if (m_pHitSelection) delete m_pHitSelection;
}
Bool_t HRichParticleIdentifier::init() {
printf("initialization of rich particle identifier\n");
HRichDetector *pRichDet = (HRichDetector*)gHades->getSetup()
->getDetector("Rich");
m_pHitCat=gHades->getCurrentEvent()->getCategory(catRichHit);
if (!m_pHitCat) {
m_pHitCat=pRichDet->buildCategory(catRichHit);
if (!m_pHitCat) return kFALSE;
else gHades->getCurrentEvent()
->addCategory(catRichHit, m_pHitCat, "Rich");
}
m_pPIDCat=gHades->getCurrentEvent()->getCategory(catRichPID);
if (!m_pPIDCat) {
m_pPIDCat=pRichDet->buildCategory(catRichPID);
if (!m_pPIDCat) return kFALSE;
else gHades->getCurrentEvent()
->addCategory(catRichPID, m_pPIDCat, "Rich");
}
fIter=(HIterator*)m_pHitCat->MakeIterator("native");
initParameters();
return kTRUE;
}
Bool_t HRichParticleIdentifier::initParameters() {
HRuntimeDb* rtdb=gHades->getRuntimeDb();
HRichAnalysisPar *pAnalysisPar = (HRichAnalysisPar*)rtdb->
getContainer("RichAnalysisParameters");
setAnalysisPar(pAnalysisPar);
if (!pAnalysisPar) return kFALSE;
m_pHitSelection->setParams(pAnalysisPar);
return kTRUE;
}
void HRichParticleIdentifier::setHitSelection(HRichHitSelection* pCrit) {
if (m_pHitSelection) delete m_pHitSelection;
m_pHitSelection = pCrit;
}
Bool_t HRichParticleIdentifier::finalize(void) {
return kTRUE;
}
Int_t HRichParticleIdentifier::execute()
{
Float_t fRich = 0.0;
Int_t ret = 0;
HRichHit *pHit;
HRichPID *pPID;
fIter->Reset();
while((pHit = (HRichHit *)fIter->Next()))
{
fRich = m_pHitSelection->richHitSelection(pHit, ret,
(HRichAnalysisPar*)m_pAnalysisPar);
if (fRich > 0.0) {
pPID=(HRichPID *)m_pPIDCat->getNewSlot(m_zeroLoc);
if (pPID) {
pPID=new(pPID) HRichPID;
fillPID(pHit, pPID);
}
}
}
return 0;
}
void HRichParticleIdentifier::fillPID(HRichHit* hit, HRichPID* pid) {
Float_t fX, fY;
pid->setSector(hit->getSector());
switch (((HRichAnalysisPar*)m_pAnalysisPar)->iSuperiorAlgorithmID) {
case 1: pid->setRingQuality(hit->iRingPatMat);
break;
case 2: pid->setRingQuality(hit->iRingHouTra);
break;
default: pid->setRingQuality(hit->iRingPatMat);
break;
}
pid->setRingAmplitude(hit->iRingAmplitude);
pid->setRingPadNr(hit->iRingPadNr);
hit->getXY(&fX, &fY);
pid->setXY(fX, fY);
pid->setPhi(hit->getPhi());
pid->setTheta(hit->getTheta());
}
Last change: Sat May 22 13:09:46 2010
Last generated: 2010-05-22 13:09
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.