#include "hshowerhittrackmatcher.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 "hshowertrack.h"
#include "hshowerhittrack.h"
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "showerdef.h"
#include <map>
#include <vector>
#include <iostream>
using namespace std;
ClassImp(HShowerHitTrackMatcher)
HShowerHitTrackMatcher::HShowerHitTrackMatcher(const Text_t *name,const Text_t *title) :
HReconstructor(name,title)
{
fHitIter=NULL;
fTrackIter=NULL;
m_zeroLoc.set(0);
}
HShowerHitTrackMatcher::HShowerHitTrackMatcher()
{
fHitIter=NULL;
fTrackIter=NULL;
m_zeroLoc.set(0);
}
HShowerHitTrackMatcher::~HShowerHitTrackMatcher(void) {
if (fHitIter) delete fHitIter;
if (fTrackIter) delete fTrackIter;
}
Bool_t HShowerHitTrackMatcher::init() {
printf("initialization of shower hit-track matcher\n");
HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()
->getDetector("Shower");
m_pTrackCat=gHades->getCurrentEvent()->getCategory(catShowerTrack);
if (!m_pTrackCat) {
m_pTrackCat=pShowerDet->buildCategory(catShowerTrack);
if (!m_pTrackCat) return kFALSE;
else gHades->getCurrentEvent()
->addCategory(catShowerTrack, m_pTrackCat, "Shower");
}
m_pHitCat=gHades->getCurrentEvent()->getCategory(catShowerHit);
if (!m_pHitCat) {
m_pHitCat=pShowerDet->buildCategory(catShowerHit);
if (!m_pHitCat) return kFALSE;
else gHades->getCurrentEvent()
->addCategory(catShowerHit, m_pHitCat, "Shower");
}
m_pHitTrackCat=gHades->getCurrentEvent()->getCategory(catShowerHitTrack);
if (!m_pHitTrackCat) {
m_pHitTrackCat=pShowerDet->buildCategory(catShowerHitTrack);
if (!m_pHitTrackCat) return kFALSE;
else gHades->getCurrentEvent()
->addCategory(catShowerHitTrack, m_pHitTrackCat, "Shower");
}
fHitIter=(HIterator*)m_pHitCat->MakeIterator();
fTrackIter=(HIterator*)m_pTrackCat->MakeIterator();
return kTRUE;
}
Bool_t HShowerHitTrackMatcher::finalize(void) {
return kTRUE;
}
Int_t HShowerHitTrackMatcher::execute()
{
map<Int_t, vector<Int_t> > trackMap;
HShowerTrack* pTrack;
fTrackIter->Reset();
while((pTrack = (HShowerTrack *) fTrackIter->Next()))
{
Int_t addTr = pTrack->getAddress();
Int_t trackNr = pTrack->getTrack();
map<Int_t,vector<Int_t> >::iterator pos = trackMap.find(addTr);
if( pos == trackMap.end() ) {
vector<Int_t> v;
v.push_back(trackNr);
trackMap.insert( make_pair( addTr, v ) );
} else {
(pos->second).push_back(trackNr);
}
}
HShowerHit* pHit;
fHitIter ->Reset();
while((pHit = (HShowerHit*)fHitIter->Next()))
{
Int_t addTr = pHit->getAddress();
map<Int_t,vector<Int_t> >::iterator pos = trackMap.find(addTr);
if( pos != trackMap.end() ) {
HShowerHitTrack* pHitTrack=(HShowerHitTrack *)m_pHitTrackCat->getNewSlot(m_zeroLoc);
if (pHitTrack != NULL) {
pHitTrack = new (pHitTrack) HShowerHitTrack;
*pHitTrack = *pHit;
vector<Int_t>& list = pos->second;
for( UInt_t i = 0; i < list.size(); ++ i ) {
pHitTrack->setTrack(list[i]);
}
} else {
Error("execute()","Zero pointer retrieved for HShowerHitTrack!");
}
} else {
Error("execute()","Corresponding pad address of the HShowerTrack list not found in HShowerHit!");
}
}
return 0;
}
Last change: Sat May 22 13:13:50 2010
Last generated: 2010-05-22 13:13
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.