#include "hshowerparticleidentifier.h"
#include "hshowercriterium.h"
#include "hruntimedb.h"
#include "hevent.h"
#include "hspectrometer.h"
#include "hdetector.h"
#include "hshowerdetector.h"
#include "hcategory.h"
#include "hmatrixcatiter.h"
#include "hlocation.h"
#include "hshowerhit.h"
#include "hshowerpid.h"
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "showerdef.h"
ClassImp(HShowerParticleIdentifier)
    
    
    
    
    
    
    
    
    HShowerParticleIdentifier::HShowerParticleIdentifier(const Text_t *name,const Text_t *title) : HReconstructor(name,title)
{
    fIter=NULL;
    m_zeroLoc.set(0);
    m_pHitFPar=NULL;
    m_pCriterium = new HShowerCriterium;
}
HShowerParticleIdentifier::HShowerParticleIdentifier()
{
    m_zeroLoc.set(0);
    fIter=NULL;
    m_pHitFPar=NULL;
    m_pCriterium = new HShowerCriterium;
}
HShowerParticleIdentifier::~HShowerParticleIdentifier(void) {
    if (fIter) delete fIter;
    if (m_pCriterium) delete m_pCriterium;
}
Bool_t HShowerParticleIdentifier::init() {
    
    printf("initialization of shower particle identifier\n");
    HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()
	->getDetector("Shower");
    m_pHitCat=gHades->getCurrentEvent()->getCategory(catShowerHit);
    if (m_pHitCat) {
	fIter=(HIterator*)m_pHitCat->MakeIterator("native");
    }
    m_pPIDCat=gHades->getCurrentEvent()->getCategory(catShowerPID);
    if (!m_pPIDCat) {
	m_pPIDCat=pShowerDet->buildCategory(catShowerPID);
	if (!m_pPIDCat) return kFALSE;
	else gHades->getCurrentEvent()
	    ->addCategory(catShowerPID, m_pPIDCat, "Shower");
    }
    initParameters();
    return kTRUE;
}
Bool_t HShowerParticleIdentifier::initParameters() {
    HRuntimeDb* rtdb=gHades->getRuntimeDb();
    m_pHitFPar = (HShowerHitFPar*)rtdb->getContainer("ShowerHitFPar");
    if (!m_pHitFPar) return kFALSE;
    m_pCriterium->setParams(m_pHitFPar);
    return kTRUE;
}
void HShowerParticleIdentifier::setCriterium(HShowerCriterium* pCrit) {
    if (m_pCriterium) delete m_pCriterium;
    m_pCriterium = pCrit;
}
Bool_t HShowerParticleIdentifier::finalize(void) {
    return kTRUE;
}
Int_t HShowerParticleIdentifier::execute()
{
    
    if(fIter == 0) return 0; 
    Float_t fShower = 0.0;
    Int_t ret = 0;
    HShowerHit *pHit;
    HShowerPID *pPID;
    fIter->Reset();
    while((pHit = (HShowerHit *)fIter->Next()))
    {
	
	fShower = m_pCriterium->showerCriterium(pHit, ret, m_pHitFPar);
	if (fShower > 0.0) {
	    pPID=(HShowerPID *)m_pPIDCat->getNewSlot(m_zeroLoc);
	    if (pPID) {
		pPID=new(pPID) HShowerPID;
		fillPID(pHit, pPID, fShower);
	    }
	}
    }
    return 0;
}
void HShowerParticleIdentifier::fillPID(HShowerHit* hit, HShowerPID* pid,
					Float_t fShower) {
    Float_t fX, fY, fZ;
    Float_t fR, fPhi, fTheta;
    pid->setCharge(hit->getCharge());
    pid->setSector(hit->getSector());
    pid->setModule(hit->getModule());
    pid->setRow(hit->getRow());
    pid->setCol(hit->getCol());
    pid->setAddress(hit->getAddress());
    pid->setShower(fShower);
    hit->getLabXYZ(&fX, &fY, &fZ);
    pid->setXYZ(fX, fY, fZ);
    hit->getSphereCoord(&fR, &fPhi, &fTheta);
    pid->setSphereCoord(fR, fPhi, fTheta);
    getPIDCat()->sort();
}
 hshowerparticleidentifier.cc:1  hshowerparticleidentifier.cc:2  hshowerparticleidentifier.cc:3  hshowerparticleidentifier.cc:4  hshowerparticleidentifier.cc:5  hshowerparticleidentifier.cc:6  hshowerparticleidentifier.cc:7  hshowerparticleidentifier.cc:8  hshowerparticleidentifier.cc:9  hshowerparticleidentifier.cc:10  hshowerparticleidentifier.cc:11  hshowerparticleidentifier.cc:12  hshowerparticleidentifier.cc:13  hshowerparticleidentifier.cc:14  hshowerparticleidentifier.cc:15  hshowerparticleidentifier.cc:16  hshowerparticleidentifier.cc:17  hshowerparticleidentifier.cc:18  hshowerparticleidentifier.cc:19  hshowerparticleidentifier.cc:20  hshowerparticleidentifier.cc:21  hshowerparticleidentifier.cc:22  hshowerparticleidentifier.cc:23  hshowerparticleidentifier.cc:24  hshowerparticleidentifier.cc:25  hshowerparticleidentifier.cc:26  hshowerparticleidentifier.cc:27  hshowerparticleidentifier.cc:28  hshowerparticleidentifier.cc:29  hshowerparticleidentifier.cc:30  hshowerparticleidentifier.cc:31  hshowerparticleidentifier.cc:32  hshowerparticleidentifier.cc:33  hshowerparticleidentifier.cc:34  hshowerparticleidentifier.cc:35  hshowerparticleidentifier.cc:36  hshowerparticleidentifier.cc:37  hshowerparticleidentifier.cc:38  hshowerparticleidentifier.cc:39  hshowerparticleidentifier.cc:40  hshowerparticleidentifier.cc:41  hshowerparticleidentifier.cc:42  hshowerparticleidentifier.cc:43  hshowerparticleidentifier.cc:44  hshowerparticleidentifier.cc:45  hshowerparticleidentifier.cc:46  hshowerparticleidentifier.cc:47  hshowerparticleidentifier.cc:48  hshowerparticleidentifier.cc:49  hshowerparticleidentifier.cc:50  hshowerparticleidentifier.cc:51  hshowerparticleidentifier.cc:52  hshowerparticleidentifier.cc:53  hshowerparticleidentifier.cc:54  hshowerparticleidentifier.cc:55  hshowerparticleidentifier.cc:56  hshowerparticleidentifier.cc:57  hshowerparticleidentifier.cc:58  hshowerparticleidentifier.cc:59  hshowerparticleidentifier.cc:60  hshowerparticleidentifier.cc:61  hshowerparticleidentifier.cc:62  hshowerparticleidentifier.cc:63  hshowerparticleidentifier.cc:64  hshowerparticleidentifier.cc:65  hshowerparticleidentifier.cc:66  hshowerparticleidentifier.cc:67  hshowerparticleidentifier.cc:68  hshowerparticleidentifier.cc:69  hshowerparticleidentifier.cc:70  hshowerparticleidentifier.cc:71  hshowerparticleidentifier.cc:72  hshowerparticleidentifier.cc:73  hshowerparticleidentifier.cc:74  hshowerparticleidentifier.cc:75  hshowerparticleidentifier.cc:76  hshowerparticleidentifier.cc:77  hshowerparticleidentifier.cc:78  hshowerparticleidentifier.cc:79  hshowerparticleidentifier.cc:80  hshowerparticleidentifier.cc:81  hshowerparticleidentifier.cc:82  hshowerparticleidentifier.cc:83  hshowerparticleidentifier.cc:84  hshowerparticleidentifier.cc:85  hshowerparticleidentifier.cc:86  hshowerparticleidentifier.cc:87  hshowerparticleidentifier.cc:88  hshowerparticleidentifier.cc:89  hshowerparticleidentifier.cc:90  hshowerparticleidentifier.cc:91  hshowerparticleidentifier.cc:92  hshowerparticleidentifier.cc:93  hshowerparticleidentifier.cc:94  hshowerparticleidentifier.cc:95  hshowerparticleidentifier.cc:96  hshowerparticleidentifier.cc:97  hshowerparticleidentifier.cc:98  hshowerparticleidentifier.cc:99  hshowerparticleidentifier.cc:100  hshowerparticleidentifier.cc:101  hshowerparticleidentifier.cc:102  hshowerparticleidentifier.cc:103  hshowerparticleidentifier.cc:104  hshowerparticleidentifier.cc:105  hshowerparticleidentifier.cc:106  hshowerparticleidentifier.cc:107  hshowerparticleidentifier.cc:108  hshowerparticleidentifier.cc:109  hshowerparticleidentifier.cc:110  hshowerparticleidentifier.cc:111  hshowerparticleidentifier.cc:112  hshowerparticleidentifier.cc:113  hshowerparticleidentifier.cc:114  hshowerparticleidentifier.cc:115  hshowerparticleidentifier.cc:116  hshowerparticleidentifier.cc:117  hshowerparticleidentifier.cc:118  hshowerparticleidentifier.cc:119  hshowerparticleidentifier.cc:120  hshowerparticleidentifier.cc:121  hshowerparticleidentifier.cc:122  hshowerparticleidentifier.cc:123  hshowerparticleidentifier.cc:124  hshowerparticleidentifier.cc:125  hshowerparticleidentifier.cc:126  hshowerparticleidentifier.cc:127  hshowerparticleidentifier.cc:128  hshowerparticleidentifier.cc:129  hshowerparticleidentifier.cc:130  hshowerparticleidentifier.cc:131  hshowerparticleidentifier.cc:132  hshowerparticleidentifier.cc:133  hshowerparticleidentifier.cc:134  hshowerparticleidentifier.cc:135  hshowerparticleidentifier.cc:136  hshowerparticleidentifier.cc:137  hshowerparticleidentifier.cc:138  hshowerparticleidentifier.cc:139  hshowerparticleidentifier.cc:140  hshowerparticleidentifier.cc:141  hshowerparticleidentifier.cc:142  hshowerparticleidentifier.cc:143  hshowerparticleidentifier.cc:144  hshowerparticleidentifier.cc:145  hshowerparticleidentifier.cc:146