#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 "hshowerhitsim.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() {
    
    
    m_pTrackCat = gHades->getCurrentEvent()->getCategory(catShowerTrack);
    if (m_pTrackCat) {
	fTrackIter = (HIterator*)m_pTrackCat->MakeIterator();
    }
    m_pHitCat = gHades->getCurrentEvent()->getCategory(catShowerHit);
    if (m_pHitCat) {
	fHitIter = (HIterator*)m_pHitCat->MakeIterator();
    }
    return kTRUE;
}
Bool_t HShowerHitTrackMatcher::finalize(void) {
    return kTRUE;
}
Int_t HShowerHitTrackMatcher::execute()
{
    
    
    
    if(fTrackIter == 0 || fHitIter == 0 ) return 0; 
    
    
    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);
	}
    }
    
    
    
    HShowerHitSim*  pHit;
    fHitIter  ->Reset();
    while((pHit = (HShowerHitSim*)fHitIter->Next()))
    {   
	Int_t addTr = pHit->getAddress();
	map<Int_t,vector<Int_t> >::iterator pos = trackMap.find(addTr);
	if( pos != trackMap.end() ) {  
	    vector<Int_t>& list = pos->second;
	    for( UInt_t i = 0; i < list.size(); i ++ ) {
		pHit->setTrack(list[i]);
	    }
	} else { 
	    Error("execute()","Corresponding pad address of the HShowerTrack list not found in HShowerHitSim!");
	}
    }
    
    return 0;
}
 hshowerhittrackmatcher.cc:1  hshowerhittrackmatcher.cc:2  hshowerhittrackmatcher.cc:3  hshowerhittrackmatcher.cc:4  hshowerhittrackmatcher.cc:5  hshowerhittrackmatcher.cc:6  hshowerhittrackmatcher.cc:7  hshowerhittrackmatcher.cc:8  hshowerhittrackmatcher.cc:9  hshowerhittrackmatcher.cc:10  hshowerhittrackmatcher.cc:11  hshowerhittrackmatcher.cc:12  hshowerhittrackmatcher.cc:13  hshowerhittrackmatcher.cc:14  hshowerhittrackmatcher.cc:15  hshowerhittrackmatcher.cc:16  hshowerhittrackmatcher.cc:17  hshowerhittrackmatcher.cc:18  hshowerhittrackmatcher.cc:19  hshowerhittrackmatcher.cc:20  hshowerhittrackmatcher.cc:21  hshowerhittrackmatcher.cc:22  hshowerhittrackmatcher.cc:23  hshowerhittrackmatcher.cc:24  hshowerhittrackmatcher.cc:25  hshowerhittrackmatcher.cc:26  hshowerhittrackmatcher.cc:27  hshowerhittrackmatcher.cc:28  hshowerhittrackmatcher.cc:29  hshowerhittrackmatcher.cc:30  hshowerhittrackmatcher.cc:31  hshowerhittrackmatcher.cc:32  hshowerhittrackmatcher.cc:33  hshowerhittrackmatcher.cc:34  hshowerhittrackmatcher.cc:35  hshowerhittrackmatcher.cc:36  hshowerhittrackmatcher.cc:37  hshowerhittrackmatcher.cc:38  hshowerhittrackmatcher.cc:39  hshowerhittrackmatcher.cc:40  hshowerhittrackmatcher.cc:41  hshowerhittrackmatcher.cc:42  hshowerhittrackmatcher.cc:43  hshowerhittrackmatcher.cc:44  hshowerhittrackmatcher.cc:45  hshowerhittrackmatcher.cc:46  hshowerhittrackmatcher.cc:47  hshowerhittrackmatcher.cc:48  hshowerhittrackmatcher.cc:49  hshowerhittrackmatcher.cc:50  hshowerhittrackmatcher.cc:51  hshowerhittrackmatcher.cc:52  hshowerhittrackmatcher.cc:53  hshowerhittrackmatcher.cc:54  hshowerhittrackmatcher.cc:55  hshowerhittrackmatcher.cc:56  hshowerhittrackmatcher.cc:57  hshowerhittrackmatcher.cc:58  hshowerhittrackmatcher.cc:59  hshowerhittrackmatcher.cc:60  hshowerhittrackmatcher.cc:61  hshowerhittrackmatcher.cc:62  hshowerhittrackmatcher.cc:63  hshowerhittrackmatcher.cc:64  hshowerhittrackmatcher.cc:65  hshowerhittrackmatcher.cc:66  hshowerhittrackmatcher.cc:67  hshowerhittrackmatcher.cc:68  hshowerhittrackmatcher.cc:69  hshowerhittrackmatcher.cc:70  hshowerhittrackmatcher.cc:71  hshowerhittrackmatcher.cc:72  hshowerhittrackmatcher.cc:73  hshowerhittrackmatcher.cc:74  hshowerhittrackmatcher.cc:75  hshowerhittrackmatcher.cc:76  hshowerhittrackmatcher.cc:77  hshowerhittrackmatcher.cc:78  hshowerhittrackmatcher.cc:79  hshowerhittrackmatcher.cc:80  hshowerhittrackmatcher.cc:81  hshowerhittrackmatcher.cc:82  hshowerhittrackmatcher.cc:83  hshowerhittrackmatcher.cc:84  hshowerhittrackmatcher.cc:85  hshowerhittrackmatcher.cc:86  hshowerhittrackmatcher.cc:87  hshowerhittrackmatcher.cc:88  hshowerhittrackmatcher.cc:89  hshowerhittrackmatcher.cc:90  hshowerhittrackmatcher.cc:91  hshowerhittrackmatcher.cc:92  hshowerhittrackmatcher.cc:93  hshowerhittrackmatcher.cc:94  hshowerhittrackmatcher.cc:95  hshowerhittrackmatcher.cc:96  hshowerhittrackmatcher.cc:97  hshowerhittrackmatcher.cc:98  hshowerhittrackmatcher.cc:99  hshowerhittrackmatcher.cc:100  hshowerhittrackmatcher.cc:101  hshowerhittrackmatcher.cc:102  hshowerhittrackmatcher.cc:103  hshowerhittrackmatcher.cc:104  hshowerhittrackmatcher.cc:105  hshowerhittrackmatcher.cc:106  hshowerhittrackmatcher.cc:107  hshowerhittrackmatcher.cc:108  hshowerhittrackmatcher.cc:109  hshowerhittrackmatcher.cc:110  hshowerhittrackmatcher.cc:111  hshowerhittrackmatcher.cc:112  hshowerhittrackmatcher.cc:113  hshowerhittrackmatcher.cc:114  hshowerhittrackmatcher.cc:115  hshowerhittrackmatcher.cc:116  hshowerhittrackmatcher.cc:117  hshowerhittrackmatcher.cc:118  hshowerhittrackmatcher.cc:119  hshowerhittrackmatcher.cc:120  hshowerhittrackmatcher.cc:121  hshowerhittrackmatcher.cc:122  hshowerhittrackmatcher.cc:123  hshowerhittrackmatcher.cc:124  hshowerhittrackmatcher.cc:125  hshowerhittrackmatcher.cc:126  hshowerhittrackmatcher.cc:127  hshowerhittrackmatcher.cc:128  hshowerhittrackmatcher.cc:129  hshowerhittrackmatcher.cc:130  hshowerhittrackmatcher.cc:131  hshowerhittrackmatcher.cc:132  hshowerhittrackmatcher.cc:133  hshowerhittrackmatcher.cc:134  hshowerhittrackmatcher.cc:135  hshowerhittrackmatcher.cc:136  hshowerhittrackmatcher.cc:137  hshowerhittrackmatcher.cc:138  hshowerhittrackmatcher.cc:139  hshowerhittrackmatcher.cc:140  hshowerhittrackmatcher.cc:141  hshowerhittrackmatcher.cc:142  hshowerhittrackmatcher.cc:143  hshowerhittrackmatcher.cc:144  hshowerhittrackmatcher.cc:145  hshowerhittrackmatcher.cc:146  hshowerhittrackmatcher.cc:147  hshowerhittrackmatcher.cc:148  hshowerhittrackmatcher.cc:149  hshowerhittrackmatcher.cc:150  hshowerhittrackmatcher.cc:151  hshowerhittrackmatcher.cc:152  hshowerhittrackmatcher.cc:153  hshowerhittrackmatcher.cc:154  hshowerhittrackmatcher.cc:155  hshowerhittrackmatcher.cc:156  hshowerhittrackmatcher.cc:157  hshowerhittrackmatcher.cc:158  hshowerhittrackmatcher.cc:159  hshowerhittrackmatcher.cc:160  hshowerhittrackmatcher.cc:161  hshowerhittrackmatcher.cc:162  hshowerhittrackmatcher.cc:163  hshowerhittrackmatcher.cc:164  hshowerhittrackmatcher.cc:165  hshowerhittrackmatcher.cc:166  hshowerhittrackmatcher.cc:167  hshowerhittrackmatcher.cc:168  hshowerhittrackmatcher.cc:169  hshowerhittrackmatcher.cc:170  hshowerhittrackmatcher.cc:171  hshowerhittrackmatcher.cc:172  hshowerhittrackmatcher.cc:173  hshowerhittrackmatcher.cc:174  hshowerhittrackmatcher.cc:175  hshowerhittrackmatcher.cc:176  hshowerhittrackmatcher.cc:177  hshowerhittrackmatcher.cc:178  hshowerhittrackmatcher.cc:179  hshowerhittrackmatcher.cc:180  hshowerhittrackmatcher.cc:181  hshowerhittrackmatcher.cc:182  hshowerhittrackmatcher.cc:183  hshowerhittrackmatcher.cc:184  hshowerhittrackmatcher.cc:185  hshowerhittrackmatcher.cc:186  hshowerhittrackmatcher.cc:187