ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// $Id: $
//
//*-- Author  : S. Lebedev
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRich700RingFinderIdeal
//
//
//////////////////////////////////////////////////////////////////////////////

#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;
      //HRichCal* richCal = cals[i];
      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) {
          // assign MC information
    	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