ROOT logo
#include "hshowerpidtrackmatcher.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 "hshowerpid.h"
#include "hshowertrack.h"
#include "hshowerpidtrack.h"
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "showerdef.h"


ClassImp(HShowerPIDTrackMatcher)

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////
// HShowerPIDTrackMatcher
//
// HShowerPIDTrackMatcher reconstructor searches
// data describing the same pad in HShowerPID and HShowerTrack categories
// and join its to one object.
// Results are stored in HShowerPIDTrack category
//
//////////////////////////////////////////////////////////////////////

HShowerPIDTrackMatcher::HShowerPIDTrackMatcher(const Text_t *name,const Text_t *title) :
  HReconstructor(name,title)
{
   fPIDIter=NULL;
   fTrackIter=NULL;
   m_zeroLoc.set(0);
}

HShowerPIDTrackMatcher::HShowerPIDTrackMatcher()
{
   fPIDIter=NULL;
   fTrackIter=NULL;
   m_zeroLoc.set(0);
}


HShowerPIDTrackMatcher::~HShowerPIDTrackMatcher(void) {
     if (fPIDIter) delete fPIDIter;
     if (fTrackIter) delete fTrackIter;
}

Bool_t HShowerPIDTrackMatcher::init() {
  // creates the ShowerPID, ShowerTrack and ShowerPIDTrack categories 
  //  and adds them to the current event
  // creates an iterator which loops over all local maxima in PID
  // and an iterator which loops over all track number information

    printf("initialization of shower pid-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_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");
    }

    m_pPIDTrackCat=gHades->getCurrentEvent()->getCategory(catShowerPIDTrack);
    if (!m_pPIDTrackCat) {
      m_pPIDTrackCat=pShowerDet->buildCategory(catShowerPIDTrack);

      if (!m_pPIDTrackCat) return kFALSE;
      else gHades->getCurrentEvent()
                        ->addCategory(catShowerPIDTrack, m_pPIDTrackCat, "Shower");
    }

    fPIDIter=(HIterator*)m_pPIDCat->MakeIterator();
    fTrackIter=(HIterator*)m_pTrackCat->MakeIterator();

    return kTRUE;
}

Bool_t HShowerPIDTrackMatcher::finalize(void) {
   return kTRUE;
}


void HShowerPIDTrackMatcher::addPIDTrack(HShowerPID* pPID, 
         HShowerTrack* pTrack) {
//create one object, which contains data
//from HShowerPID and HShowerTrack objects
 
    HShowerPIDTrack *pPIDTrack;

    pPIDTrack=(HShowerPIDTrack *)m_pPIDTrackCat->getNewSlot(m_zeroLoc);
    if (pPIDTrack!=NULL) {
      pPIDTrack=new(pPIDTrack) HShowerPIDTrack;

      *pPIDTrack = *pPID;
      pPIDTrack->setTrack(pTrack->getTrack());
    }
}

Int_t HShowerPIDTrackMatcher::execute()
{
//searching all pairs in HShowerPID and HShowerTrack, which
//have the same address
//Because HShowerPID and HShowerTrack are sorted by m_nAddress
//reading data in tables is done once!

  HShowerPID *pPID;
  HShowerTrack *pTrack;
 
  fPIDIter->Reset();
  fTrackIter->Reset();

  pTrack = (HShowerTrack *)fTrackIter->Next();
  while((pPID = (HShowerPID*)fPIDIter->Next())) { //loop over PIDs
  //if tracks and hits are sorted resetting fTrackIter is not necessery

    do {
       if (pTrack && pPID->getAddress()==pTrack->getAddress()) { 
         addPIDTrack(pPID, pTrack);  //ok, the same track
         break;
       }
     }
    while((pTrack = (HShowerTrack *)fTrackIter->Next())) ;

    //searching other tracks with the same address number
    while((pTrack = (HShowerTrack *)fTrackIter->Next())) {
       if (pPID->getAddress()==pTrack->getAddress()) { 
         addPIDTrack(pPID, pTrack);  
       } else break;
    }

  }

  return 0;
}

 hshowerpidtrackmatcher.cc:1
 hshowerpidtrackmatcher.cc:2
 hshowerpidtrackmatcher.cc:3
 hshowerpidtrackmatcher.cc:4
 hshowerpidtrackmatcher.cc:5
 hshowerpidtrackmatcher.cc:6
 hshowerpidtrackmatcher.cc:7
 hshowerpidtrackmatcher.cc:8
 hshowerpidtrackmatcher.cc:9
 hshowerpidtrackmatcher.cc:10
 hshowerpidtrackmatcher.cc:11
 hshowerpidtrackmatcher.cc:12
 hshowerpidtrackmatcher.cc:13
 hshowerpidtrackmatcher.cc:14
 hshowerpidtrackmatcher.cc:15
 hshowerpidtrackmatcher.cc:16
 hshowerpidtrackmatcher.cc:17
 hshowerpidtrackmatcher.cc:18
 hshowerpidtrackmatcher.cc:19
 hshowerpidtrackmatcher.cc:20
 hshowerpidtrackmatcher.cc:21
 hshowerpidtrackmatcher.cc:22
 hshowerpidtrackmatcher.cc:23
 hshowerpidtrackmatcher.cc:24
 hshowerpidtrackmatcher.cc:25
 hshowerpidtrackmatcher.cc:26
 hshowerpidtrackmatcher.cc:27
 hshowerpidtrackmatcher.cc:28
 hshowerpidtrackmatcher.cc:29
 hshowerpidtrackmatcher.cc:30
 hshowerpidtrackmatcher.cc:31
 hshowerpidtrackmatcher.cc:32
 hshowerpidtrackmatcher.cc:33
 hshowerpidtrackmatcher.cc:34
 hshowerpidtrackmatcher.cc:35
 hshowerpidtrackmatcher.cc:36
 hshowerpidtrackmatcher.cc:37
 hshowerpidtrackmatcher.cc:38
 hshowerpidtrackmatcher.cc:39
 hshowerpidtrackmatcher.cc:40
 hshowerpidtrackmatcher.cc:41
 hshowerpidtrackmatcher.cc:42
 hshowerpidtrackmatcher.cc:43
 hshowerpidtrackmatcher.cc:44
 hshowerpidtrackmatcher.cc:45
 hshowerpidtrackmatcher.cc:46
 hshowerpidtrackmatcher.cc:47
 hshowerpidtrackmatcher.cc:48
 hshowerpidtrackmatcher.cc:49
 hshowerpidtrackmatcher.cc:50
 hshowerpidtrackmatcher.cc:51
 hshowerpidtrackmatcher.cc:52
 hshowerpidtrackmatcher.cc:53
 hshowerpidtrackmatcher.cc:54
 hshowerpidtrackmatcher.cc:55
 hshowerpidtrackmatcher.cc:56
 hshowerpidtrackmatcher.cc:57
 hshowerpidtrackmatcher.cc:58
 hshowerpidtrackmatcher.cc:59
 hshowerpidtrackmatcher.cc:60
 hshowerpidtrackmatcher.cc:61
 hshowerpidtrackmatcher.cc:62
 hshowerpidtrackmatcher.cc:63
 hshowerpidtrackmatcher.cc:64
 hshowerpidtrackmatcher.cc:65
 hshowerpidtrackmatcher.cc:66
 hshowerpidtrackmatcher.cc:67
 hshowerpidtrackmatcher.cc:68
 hshowerpidtrackmatcher.cc:69
 hshowerpidtrackmatcher.cc:70
 hshowerpidtrackmatcher.cc:71
 hshowerpidtrackmatcher.cc:72
 hshowerpidtrackmatcher.cc:73
 hshowerpidtrackmatcher.cc:74
 hshowerpidtrackmatcher.cc:75
 hshowerpidtrackmatcher.cc:76
 hshowerpidtrackmatcher.cc:77
 hshowerpidtrackmatcher.cc:78
 hshowerpidtrackmatcher.cc:79
 hshowerpidtrackmatcher.cc:80
 hshowerpidtrackmatcher.cc:81
 hshowerpidtrackmatcher.cc:82
 hshowerpidtrackmatcher.cc:83
 hshowerpidtrackmatcher.cc:84
 hshowerpidtrackmatcher.cc:85
 hshowerpidtrackmatcher.cc:86
 hshowerpidtrackmatcher.cc:87
 hshowerpidtrackmatcher.cc:88
 hshowerpidtrackmatcher.cc:89
 hshowerpidtrackmatcher.cc:90
 hshowerpidtrackmatcher.cc:91
 hshowerpidtrackmatcher.cc:92
 hshowerpidtrackmatcher.cc:93
 hshowerpidtrackmatcher.cc:94
 hshowerpidtrackmatcher.cc:95
 hshowerpidtrackmatcher.cc:96
 hshowerpidtrackmatcher.cc:97
 hshowerpidtrackmatcher.cc:98
 hshowerpidtrackmatcher.cc:99
 hshowerpidtrackmatcher.cc:100
 hshowerpidtrackmatcher.cc:101
 hshowerpidtrackmatcher.cc:102
 hshowerpidtrackmatcher.cc:103
 hshowerpidtrackmatcher.cc:104
 hshowerpidtrackmatcher.cc:105
 hshowerpidtrackmatcher.cc:106
 hshowerpidtrackmatcher.cc:107
 hshowerpidtrackmatcher.cc:108
 hshowerpidtrackmatcher.cc:109
 hshowerpidtrackmatcher.cc:110
 hshowerpidtrackmatcher.cc:111
 hshowerpidtrackmatcher.cc:112
 hshowerpidtrackmatcher.cc:113
 hshowerpidtrackmatcher.cc:114
 hshowerpidtrackmatcher.cc:115
 hshowerpidtrackmatcher.cc:116
 hshowerpidtrackmatcher.cc:117
 hshowerpidtrackmatcher.cc:118
 hshowerpidtrackmatcher.cc:119
 hshowerpidtrackmatcher.cc:120
 hshowerpidtrackmatcher.cc:121
 hshowerpidtrackmatcher.cc:122
 hshowerpidtrackmatcher.cc:123
 hshowerpidtrackmatcher.cc:124
 hshowerpidtrackmatcher.cc:125
 hshowerpidtrackmatcher.cc:126
 hshowerpidtrackmatcher.cc:127
 hshowerpidtrackmatcher.cc:128
 hshowerpidtrackmatcher.cc:129
 hshowerpidtrackmatcher.cc:130
 hshowerpidtrackmatcher.cc:131
 hshowerpidtrackmatcher.cc:132
 hshowerpidtrackmatcher.cc:133
 hshowerpidtrackmatcher.cc:134
 hshowerpidtrackmatcher.cc:135
 hshowerpidtrackmatcher.cc:136
 hshowerpidtrackmatcher.cc:137
 hshowerpidtrackmatcher.cc:138
 hshowerpidtrackmatcher.cc:139
 hshowerpidtrackmatcher.cc:140
 hshowerpidtrackmatcher.cc:141
 hshowerpidtrackmatcher.cc:142
 hshowerpidtrackmatcher.cc:143
 hshowerpidtrackmatcher.cc:144
 hshowerpidtrackmatcher.cc:145
 hshowerpidtrackmatcher.cc:146
 hshowerpidtrackmatcher.cc:147
 hshowerpidtrackmatcher.cc:148
 hshowerpidtrackmatcher.cc:149
 hshowerpidtrackmatcher.cc:150
 hshowerpidtrackmatcher.cc:151
 hshowerpidtrackmatcher.cc:152
 hshowerpidtrackmatcher.cc:153
 hshowerpidtrackmatcher.cc:154
 hshowerpidtrackmatcher.cc:155