#include "hrich700ringfinderideal.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hcategory.h"
#include "hevent.h"
#include "hgeantrich.h"
#include "hlinearcatiter.h"
#include "hmatrixcatiter.h"
#include "hparset.h"
#include "hrichdetector.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "richdef.h"
#include "hrichcalsim.h"
#include "hgeantkine.h"
#include "hrich700digipar.h"
#include "hrichhitsim.h"
#include "hrich700ringfittercop.h"
#include <iostream>
#include <sstream>
#include <map>
#include <vector>
using namespace std;
ClassImp(HRich700RingFinderIdeal)
HRich700RingFinderIdeal::HRich700RingFinderIdeal()
{
}
HRich700RingFinderIdeal::~HRich700RingFinderIdeal()
{
}
Bool_t HRich700RingFinderIdeal::init()
{
fCatKine = gHades->getCurrentEvent()->getCategory(catGeantKine);
if (NULL == fCatKine) {
Error("init()", "Initialization of catGeantKine category failed, returning...");
return kFALSE;
}
fCatRichCal = gHades->getCurrentEvent()->getCategory(catRichCal);
if (NULL == fCatRichCal) {
Error("init()", "Initialization of catRicCal category failed, returning...");
return kFALSE;
}
fCatRichHit = gHades->getCurrentEvent()->getCategory(catRichHit);
if (NULL == fCatRichHit) {
HRichDetector* pRichDet = static_cast<HRichDetector*>(gHades->getSetup()->getDetector("Rich"));
if(pRichDet){
fCatRichHit = pRichDet->buildLinearCat("HRichHitSim", 10);
if (NULL == fCatRichHit) {
Error("init()", "Can not create catRichHit");
return kFALSE;
} else {
gHades->getCurrentEvent()->addCategory(catRichHit, fCatRichHit, "Rich");
}
} else {
Error("init()", "No RICH detector in Setup");
}
}
fDigiPar = (HRich700DigiPar*) gHades->getRuntimeDb()->getContainer("Rich700DigiPar");
if(!fDigiPar) {
Error("init", "Can not retrieve HRich700DigiPar");
return kFALSE;
}
return kTRUE;
}
Bool_t HRich700RingFinderIdeal::reinit()
{
return kTRUE;
}
Int_t HRich700RingFinderIdeal::execute()
{
processEvent();
return 0;
}
void HRich700RingFinderIdeal::processEvent()
{
map<Int_t, vector<Int_t> > hitMap;
Int_t nofRichCals = fCatRichCal->getEntries();
for (Int_t iC = 0; iC < nofRichCals; iC++) {
HRichCalSim* calSim = static_cast<HRichCalSim*>(fCatRichCal->getObject(iC));
if (NULL == calSim) continue;
Int_t nofTrackIds = calSim->getNofTrackIds();
for (Int_t iT = 0; iT < nofTrackIds; iT++) {
Int_t trackId = calSim->getTrackId(iT);
if (trackId < 0) continue;
hitMap[trackId].push_back(iC);
}
}
for(map<Int_t, vector<Int_t> >::iterator it = hitMap.begin(); it != hitMap.end(); it++) {
Int_t trackId = it->first;
addRichHit(1, trackId, it->second);
}
}
void HRich700RingFinderIdeal::addRichHit(Int_t sector, Int_t trackId, const vector<Int_t>& cals)
{
HRich700Ring ring;
for (UInt_t i = 0; i < cals.size(); i++) {
HRichCal* richCal = static_cast<HRichCalSim*>(fCatRichCal->getObject(cals[i]));
if (richCal == NULL) continue;
Int_t loc[3];
loc[0] = richCal->getSector();
loc[1] = richCal->getCol();
loc[2] = richCal->getRow();
pair<Double_t, Double_t> xy = fDigiPar->getXY(loc);
HRich700Hit calHit;
calHit.fX = xy.first;
calHit.fY = xy.second;
calHit.fId = cals[i];
ring.fHits.push_back(calHit);
}
HRich700RingFitterCOP::FitRing(&ring);
HLocation loc;
loc.set(1, sector);
HRichHitSim* hit = (HRichHitSim*)fCatRichHit->getNewSlot(loc);
hit = new (hit) HRichHitSim();
if (NULL != hit) {
Float_t theta,phi;
hit->nSector = fDigiPar->getInterpolatedSectorThetaPhi(ring.fCircleXCenter,ring.fCircleYCenter,theta,phi);
hit->fTheta = theta;
hit->fPhi = phi;
hit->track1 = trackId;
hit->weigTrack1 = cals.size();
hit->fRich700NofRichCals = cals.size();
hit->fRich700CircleCenterX = ring.fCircleXCenter;
hit->fRich700CircleCenterY = ring.fCircleYCenter;
hit->fRich700CircleRadius = ring.fCircleRadius;
hit->fRich700CircleChi2 = ring.fCircleChi2;
Float_t x = ring.fCircleXCenter;
Float_t y = ring.fCircleYCenter;
for (int iC = 0; iC < cals.size(); iC++) {
if (iC >= NMAXCALSPERRING) break;
hit->fRich700CalIds[iC] = cals[iC];
}
hit->setXY(x,y);
Int_t pmtID = fDigiPar->getPMTId(x,y);
if(pmtID !=- 1){
HRich700PmtData* data = fDigiPar->getPMTData(pmtID);
if(data){
hit->setRingCenterX(data->fIndX);
hit->setRingCenterY(data->fIndY);
hit->setLabXYZ(x,y,data->fZ);
}
} else {
hit->setLabXYZ(x,y,-1000);
}
}
}
Bool_t HRich700RingFinderIdeal::finalize()
{
return kTRUE;
}
hrich700ringfinderideal.cc:1 hrich700ringfinderideal.cc:2 hrich700ringfinderideal.cc:3 hrich700ringfinderideal.cc:4 hrich700ringfinderideal.cc:5 hrich700ringfinderideal.cc:6 hrich700ringfinderideal.cc:7 hrich700ringfinderideal.cc:8 hrich700ringfinderideal.cc:9 hrich700ringfinderideal.cc:10 hrich700ringfinderideal.cc:11 hrich700ringfinderideal.cc:12 hrich700ringfinderideal.cc:13 hrich700ringfinderideal.cc:14 hrich700ringfinderideal.cc:15 hrich700ringfinderideal.cc:16 hrich700ringfinderideal.cc:17 hrich700ringfinderideal.cc:18 hrich700ringfinderideal.cc:19 hrich700ringfinderideal.cc:20 hrich700ringfinderideal.cc:21 hrich700ringfinderideal.cc:22 hrich700ringfinderideal.cc:23 hrich700ringfinderideal.cc:24 hrich700ringfinderideal.cc:25 hrich700ringfinderideal.cc:26 hrich700ringfinderideal.cc:27 hrich700ringfinderideal.cc:28 hrich700ringfinderideal.cc:29 hrich700ringfinderideal.cc:30 hrich700ringfinderideal.cc:31 hrich700ringfinderideal.cc:32 hrich700ringfinderideal.cc:33 hrich700ringfinderideal.cc:34 hrich700ringfinderideal.cc:35 hrich700ringfinderideal.cc:36 hrich700ringfinderideal.cc:37 hrich700ringfinderideal.cc:38 hrich700ringfinderideal.cc:39 hrich700ringfinderideal.cc:40 hrich700ringfinderideal.cc:41 hrich700ringfinderideal.cc:42 hrich700ringfinderideal.cc:43 hrich700ringfinderideal.cc:44 hrich700ringfinderideal.cc:45 hrich700ringfinderideal.cc:46 hrich700ringfinderideal.cc:47 hrich700ringfinderideal.cc:48 hrich700ringfinderideal.cc:49 hrich700ringfinderideal.cc:50 hrich700ringfinderideal.cc:51 hrich700ringfinderideal.cc:52 hrich700ringfinderideal.cc:53 hrich700ringfinderideal.cc:54 hrich700ringfinderideal.cc:55 hrich700ringfinderideal.cc:56 hrich700ringfinderideal.cc:57 hrich700ringfinderideal.cc:58 hrich700ringfinderideal.cc:59 hrich700ringfinderideal.cc:60 hrich700ringfinderideal.cc:61 hrich700ringfinderideal.cc:62 hrich700ringfinderideal.cc:63 hrich700ringfinderideal.cc:64 hrich700ringfinderideal.cc:65 hrich700ringfinderideal.cc:66 hrich700ringfinderideal.cc:67 hrich700ringfinderideal.cc:68 hrich700ringfinderideal.cc:69 hrich700ringfinderideal.cc:70 hrich700ringfinderideal.cc:71 hrich700ringfinderideal.cc:72 hrich700ringfinderideal.cc:73 hrich700ringfinderideal.cc:74 hrich700ringfinderideal.cc:75 hrich700ringfinderideal.cc:76 hrich700ringfinderideal.cc:77 hrich700ringfinderideal.cc:78 hrich700ringfinderideal.cc:79 hrich700ringfinderideal.cc:80 hrich700ringfinderideal.cc:81 hrich700ringfinderideal.cc:82 hrich700ringfinderideal.cc:83 hrich700ringfinderideal.cc:84 hrich700ringfinderideal.cc:85 hrich700ringfinderideal.cc:86 hrich700ringfinderideal.cc:87 hrich700ringfinderideal.cc:88 hrich700ringfinderideal.cc:89 hrich700ringfinderideal.cc:90 hrich700ringfinderideal.cc:91 hrich700ringfinderideal.cc:92 hrich700ringfinderideal.cc:93 hrich700ringfinderideal.cc:94 hrich700ringfinderideal.cc:95 hrich700ringfinderideal.cc:96 hrich700ringfinderideal.cc:97 hrich700ringfinderideal.cc:98 hrich700ringfinderideal.cc:99 hrich700ringfinderideal.cc:100 hrich700ringfinderideal.cc:101 hrich700ringfinderideal.cc:102 hrich700ringfinderideal.cc:103 hrich700ringfinderideal.cc:104 hrich700ringfinderideal.cc:105 hrich700ringfinderideal.cc:106 hrich700ringfinderideal.cc:107 hrich700ringfinderideal.cc:108 hrich700ringfinderideal.cc:109 hrich700ringfinderideal.cc:110 hrich700ringfinderideal.cc:111 hrich700ringfinderideal.cc:112 hrich700ringfinderideal.cc:113 hrich700ringfinderideal.cc:114 hrich700ringfinderideal.cc:115 hrich700ringfinderideal.cc:116 hrich700ringfinderideal.cc:117 hrich700ringfinderideal.cc:118 hrich700ringfinderideal.cc:119 hrich700ringfinderideal.cc:120 hrich700ringfinderideal.cc:121 hrich700ringfinderideal.cc:122 hrich700ringfinderideal.cc:123 hrich700ringfinderideal.cc:124 hrich700ringfinderideal.cc:125 hrich700ringfinderideal.cc:126 hrich700ringfinderideal.cc:127 hrich700ringfinderideal.cc:128 hrich700ringfinderideal.cc:129 hrich700ringfinderideal.cc:130 hrich700ringfinderideal.cc:131 hrich700ringfinderideal.cc:132 hrich700ringfinderideal.cc:133 hrich700ringfinderideal.cc:134 hrich700ringfinderideal.cc:135 hrich700ringfinderideal.cc:136 hrich700ringfinderideal.cc:137 hrich700ringfinderideal.cc:138 hrich700ringfinderideal.cc:139 hrich700ringfinderideal.cc:140 hrich700ringfinderideal.cc:141 hrich700ringfinderideal.cc:142 hrich700ringfinderideal.cc:143 hrich700ringfinderideal.cc:144 hrich700ringfinderideal.cc:145 hrich700ringfinderideal.cc:146 hrich700ringfinderideal.cc:147 hrich700ringfinderideal.cc:148 hrich700ringfinderideal.cc:149 hrich700ringfinderideal.cc:150 hrich700ringfinderideal.cc:151 hrich700ringfinderideal.cc:152 hrich700ringfinderideal.cc:153 hrich700ringfinderideal.cc:154 hrich700ringfinderideal.cc:155 hrich700ringfinderideal.cc:156 hrich700ringfinderideal.cc:157 hrich700ringfinderideal.cc:158 hrich700ringfinderideal.cc:159 hrich700ringfinderideal.cc:160 hrich700ringfinderideal.cc:161 hrich700ringfinderideal.cc:162 hrich700ringfinderideal.cc:163 hrich700ringfinderideal.cc:164 hrich700ringfinderideal.cc:165 hrich700ringfinderideal.cc:166 hrich700ringfinderideal.cc:167 hrich700ringfinderideal.cc:168 hrich700ringfinderideal.cc:169 hrich700ringfinderideal.cc:170 hrich700ringfinderideal.cc:171 hrich700ringfinderideal.cc:172 hrich700ringfinderideal.cc:173 hrich700ringfinderideal.cc:174 hrich700ringfinderideal.cc:175 hrich700ringfinderideal.cc:176 hrich700ringfinderideal.cc:177 hrich700ringfinderideal.cc:178 hrich700ringfinderideal.cc:179 hrich700ringfinderideal.cc:180 hrich700ringfinderideal.cc:181 hrich700ringfinderideal.cc:182 hrich700ringfinderideal.cc:183 hrich700ringfinderideal.cc:184 hrich700ringfinderideal.cc:185 hrich700ringfinderideal.cc:186 hrich700ringfinderideal.cc:187 hrich700ringfinderideal.cc:188 hrich700ringfinderideal.cc:189 hrich700ringfinderideal.cc:190 hrich700ringfinderideal.cc:191 hrich700ringfinderideal.cc:192 hrich700ringfinderideal.cc:193 hrich700ringfinderideal.cc:194