#include "TROOT.h"
#include "hshowercalparcalculator.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 "hshowerraw.h"
#include "hshowercalpar.h"
#include "hshowerhist.h"
#include "hdebug.h"
#include "hades.h"
#include "hiterator.h"
#include "showerdef.h"
#include "hshowerhistcell.h"
ClassImp(HShowerCalParCalculator)
HShowerCalParCalculator::HShowerCalParCalculator(const Text_t *name,const Text_t *title,
                          Int_t iMethod, Float_t fParam1, Float_t fParam2)
                          : HReconstructor(name,title)
{
    clearAtBegin(iMethod, fParam1, fParam2);
}
HShowerCalParCalculator::HShowerCalParCalculator(Int_t iMethod,
                                        Float_t fParam1, Float_t fParam2)
{
    clearAtBegin(iMethod, fParam1, fParam2);
}
HShowerCalParCalculator::HShowerCalParCalculator(const Text_t *name,const Text_t *title,
                          const Text_t *nameOfMethod, Float_t fParam1,
                          Float_t fParam2)
                          : HReconstructor(name,title)
{
    clearAtBegin(0, fParam1, fParam2);
    setMethod(nameOfMethod);
}
HShowerCalParCalculator::~HShowerCalParCalculator(void)
{
    if(fIter)
        delete fIter;
}
void HShowerCalParCalculator::clearAtBegin(Int_t iMethod,
                                        Float_t fParam1, Float_t fParam2)
{
    m_pCalPar     = NULL;
    m_pCalParHist = NULL;
    fIter         = NULL;
    m_loc.set(4, 0, 0, 0, 0);
    m_zeroLoc.set(0);
    m_fParam1 = fParam1;
    m_fParam2 = fParam2;
    setMethod(iMethod);
}
void HShowerCalParCalculator::setMethod(Int_t iMethod)
{
    if(((m_iMethod = iMethod) < 0) || (m_iMethod >= HSHC_MAX))
    {
        gROOT->Error("HShowerCalParCalculator", "No such method: %d\n",
                                            iMethod);
    }
}
void HShowerCalParCalculator::setMethod(const Char_t* pName)
{
Int_t i;
    for(i = 0; i < HSHC_MAX; i++)
    {
        if((g_cpstr_HSHC_Methods[i] == NULL)
            || (strcasecmp(pName, g_cpstr_HSHC_Methods[i]) != 0))
        {
            continue;
        }
        setMethod(i);
        return;
    }
    gROOT->Error("HShowerCalParCalculator", "Unknown method: %s\n", pName);
}
const Char_t* HShowerCalParCalculator::getMethodName(void)
{
    return g_cpstr_HSHC_Methods[m_iMethod];
}
void HShowerCalParCalculator::initCalPar()
{
    HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()
                                                  ->getDetector("Shower");
    HRuntimeDb* rtdb=gHades->getRuntimeDb();
    m_pCalPar = rtdb->getContainer("ShowerCalPar");
    if (m_pCalPar) {
      ((HShowerCalPar*)m_pCalPar)->
             setSetup(pShowerDet->getShowerSectors(),
                      pShowerDet->getShowerModules(),
                      pShowerDet->getRows(),
                      pShowerDet->getColumns());
    }
    m_pCalParHist = rtdb->getContainer("ShowerHist");
    if (m_pCalParHist) {
      ((HShowerHist*)m_pCalParHist)->
             setSetup(pShowerDet->getShowerSectors(),
                      pShowerDet->getShowerModules(),
                      pShowerDet->getRows(),
                      pShowerDet->getColumns());
    }
}
Bool_t HShowerCalParCalculator::init()
{
    printf("initialization of shower calpar calculator\n");
    m_nExecutes = 0;
    HShowerDetector *pShowerDet = (HShowerDetector*)gHades->getSetup()
                                                  ->getDetector("Shower");
    m_pRawCat=gHades->getCurrentEvent()->getCategory(catShowerRaw);
    if (!m_pRawCat) {
      m_pRawCat=pShowerDet->buildCategory(catShowerRaw);
      if (!m_pRawCat) return kFALSE;
      else gHades->getCurrentEvent()
                         ->addCategory(catShowerRaw, m_pRawCat, "Shower");
    }
    initCalPar();
    fIter = (HIterator*)m_pRawCat->MakeIterator("native");
    return kTRUE;
}
Bool_t HShowerCalParCalculator::reinit()
{
    return kTRUE;
}
void HShowerCalParCalculator::setCalPar(HParSet *pCalPar)
{
    if (m_pCalPar)
        delete m_pCalPar;
    m_pCalPar = pCalPar;
}
void HShowerCalParCalculator::setCalParHist(HParSet *pCalParHist)
{
    if (m_pCalParHist)
        delete m_pCalParHist;
    m_pCalParHist = pCalParHist;
}
Bool_t HShowerCalParCalculator::finalize(void)
{
    ((HShowerHist*)getCalParHist())
                ->calculate(m_nExecutes, (HShowerCalPar*)getCalPar(),
                        m_iMethod, m_fParam1, m_fParam2);
    m_pCalPar->setChanged();
    if(m_pCalPar->getInputVersion(1) == -1)
    {
        if(m_pCalPar->getInputVersion(2) == -1)
        {
            m_pCalPar->setInputVersion(1, 1);
            printf("No version. Set 1 to 1 -> %d",
                        m_pCalPar->getInputVersion(1));
        }
        else
        {
            printf("Change Input Version 2: %d ->",
                        m_pCalPar->getInputVersion(2));
            m_pCalPar->setInputVersion(m_pCalPar->getInputVersion(2) + 1, 2);
            printf(" %d\n", m_pCalPar->getInputVersion(2));
        }
    }
    else
    {
        printf("Change Input Version 1: %d ->", m_pCalPar->getInputVersion(1));
        m_pCalPar->setInputVersion(m_pCalPar->getInputVersion(1) + 1, 1);
        printf(" %d\n", m_pCalPar->getInputVersion(1));
    }
    return kTRUE;
}
Int_t HShowerCalParCalculator::execute()
{
HShowerRaw *pRaw;
    fIter->Reset();
    while((pRaw = (HShowerRaw*)fIter->Next()))
    {
        m_loc[0]=pRaw->getSector();
        m_loc[1]=pRaw->getModule();
        m_loc[2]=pRaw->getRow();
        m_loc[3]=pRaw->getCol();
        ((HShowerHist*)getCalParHist())->fill(m_loc, (Int_t)pRaw->getCharge());
    }
    m_nExecutes++;
    return 0;
}
 hshowercalparcalculator.cc:1  hshowercalparcalculator.cc:2  hshowercalparcalculator.cc:3  hshowercalparcalculator.cc:4  hshowercalparcalculator.cc:5  hshowercalparcalculator.cc:6  hshowercalparcalculator.cc:7  hshowercalparcalculator.cc:8  hshowercalparcalculator.cc:9  hshowercalparcalculator.cc:10  hshowercalparcalculator.cc:11  hshowercalparcalculator.cc:12  hshowercalparcalculator.cc:13  hshowercalparcalculator.cc:14  hshowercalparcalculator.cc:15  hshowercalparcalculator.cc:16  hshowercalparcalculator.cc:17  hshowercalparcalculator.cc:18  hshowercalparcalculator.cc:19  hshowercalparcalculator.cc:20  hshowercalparcalculator.cc:21  hshowercalparcalculator.cc:22  hshowercalparcalculator.cc:23  hshowercalparcalculator.cc:24  hshowercalparcalculator.cc:25  hshowercalparcalculator.cc:26  hshowercalparcalculator.cc:27  hshowercalparcalculator.cc:28  hshowercalparcalculator.cc:29  hshowercalparcalculator.cc:30  hshowercalparcalculator.cc:31  hshowercalparcalculator.cc:32  hshowercalparcalculator.cc:33  hshowercalparcalculator.cc:34  hshowercalparcalculator.cc:35  hshowercalparcalculator.cc:36  hshowercalparcalculator.cc:37  hshowercalparcalculator.cc:38  hshowercalparcalculator.cc:39  hshowercalparcalculator.cc:40  hshowercalparcalculator.cc:41  hshowercalparcalculator.cc:42  hshowercalparcalculator.cc:43  hshowercalparcalculator.cc:44  hshowercalparcalculator.cc:45  hshowercalparcalculator.cc:46  hshowercalparcalculator.cc:47  hshowercalparcalculator.cc:48  hshowercalparcalculator.cc:49  hshowercalparcalculator.cc:50  hshowercalparcalculator.cc:51  hshowercalparcalculator.cc:52  hshowercalparcalculator.cc:53  hshowercalparcalculator.cc:54  hshowercalparcalculator.cc:55  hshowercalparcalculator.cc:56  hshowercalparcalculator.cc:57  hshowercalparcalculator.cc:58  hshowercalparcalculator.cc:59  hshowercalparcalculator.cc:60  hshowercalparcalculator.cc:61  hshowercalparcalculator.cc:62  hshowercalparcalculator.cc:63  hshowercalparcalculator.cc:64  hshowercalparcalculator.cc:65  hshowercalparcalculator.cc:66  hshowercalparcalculator.cc:67  hshowercalparcalculator.cc:68  hshowercalparcalculator.cc:69  hshowercalparcalculator.cc:70  hshowercalparcalculator.cc:71  hshowercalparcalculator.cc:72  hshowercalparcalculator.cc:73  hshowercalparcalculator.cc:74  hshowercalparcalculator.cc:75  hshowercalparcalculator.cc:76  hshowercalparcalculator.cc:77  hshowercalparcalculator.cc:78  hshowercalparcalculator.cc:79  hshowercalparcalculator.cc:80  hshowercalparcalculator.cc:81  hshowercalparcalculator.cc:82  hshowercalparcalculator.cc:83  hshowercalparcalculator.cc:84  hshowercalparcalculator.cc:85  hshowercalparcalculator.cc:86  hshowercalparcalculator.cc:87  hshowercalparcalculator.cc:88  hshowercalparcalculator.cc:89  hshowercalparcalculator.cc:90  hshowercalparcalculator.cc:91  hshowercalparcalculator.cc:92  hshowercalparcalculator.cc:93  hshowercalparcalculator.cc:94  hshowercalparcalculator.cc:95  hshowercalparcalculator.cc:96  hshowercalparcalculator.cc:97  hshowercalparcalculator.cc:98  hshowercalparcalculator.cc:99  hshowercalparcalculator.cc:100  hshowercalparcalculator.cc:101  hshowercalparcalculator.cc:102  hshowercalparcalculator.cc:103  hshowercalparcalculator.cc:104  hshowercalparcalculator.cc:105  hshowercalparcalculator.cc:106  hshowercalparcalculator.cc:107  hshowercalparcalculator.cc:108  hshowercalparcalculator.cc:109  hshowercalparcalculator.cc:110  hshowercalparcalculator.cc:111  hshowercalparcalculator.cc:112  hshowercalparcalculator.cc:113  hshowercalparcalculator.cc:114  hshowercalparcalculator.cc:115  hshowercalparcalculator.cc:116  hshowercalparcalculator.cc:117  hshowercalparcalculator.cc:118  hshowercalparcalculator.cc:119  hshowercalparcalculator.cc:120  hshowercalparcalculator.cc:121  hshowercalparcalculator.cc:122  hshowercalparcalculator.cc:123  hshowercalparcalculator.cc:124  hshowercalparcalculator.cc:125  hshowercalparcalculator.cc:126  hshowercalparcalculator.cc:127  hshowercalparcalculator.cc:128  hshowercalparcalculator.cc:129  hshowercalparcalculator.cc:130  hshowercalparcalculator.cc:131  hshowercalparcalculator.cc:132  hshowercalparcalculator.cc:133  hshowercalparcalculator.cc:134  hshowercalparcalculator.cc:135  hshowercalparcalculator.cc:136  hshowercalparcalculator.cc:137  hshowercalparcalculator.cc:138  hshowercalparcalculator.cc:139  hshowercalparcalculator.cc:140  hshowercalparcalculator.cc:141  hshowercalparcalculator.cc:142  hshowercalparcalculator.cc:143  hshowercalparcalculator.cc:144  hshowercalparcalculator.cc:145  hshowercalparcalculator.cc:146  hshowercalparcalculator.cc:147  hshowercalparcalculator.cc:148  hshowercalparcalculator.cc:149  hshowercalparcalculator.cc:150  hshowercalparcalculator.cc:151  hshowercalparcalculator.cc:152  hshowercalparcalculator.cc:153  hshowercalparcalculator.cc:154  hshowercalparcalculator.cc:155  hshowercalparcalculator.cc:156  hshowercalparcalculator.cc:157  hshowercalparcalculator.cc:158  hshowercalparcalculator.cc:159  hshowercalparcalculator.cc:160  hshowercalparcalculator.cc:161  hshowercalparcalculator.cc:162  hshowercalparcalculator.cc:163  hshowercalparcalculator.cc:164  hshowercalparcalculator.cc:165  hshowercalparcalculator.cc:166  hshowercalparcalculator.cc:167  hshowercalparcalculator.cc:168  hshowercalparcalculator.cc:169  hshowercalparcalculator.cc:170  hshowercalparcalculator.cc:171  hshowercalparcalculator.cc:172  hshowercalparcalculator.cc:173  hshowercalparcalculator.cc:174  hshowercalparcalculator.cc:175  hshowercalparcalculator.cc:176  hshowercalparcalculator.cc:177  hshowercalparcalculator.cc:178  hshowercalparcalculator.cc:179  hshowercalparcalculator.cc:180  hshowercalparcalculator.cc:181  hshowercalparcalculator.cc:182  hshowercalparcalculator.cc:183  hshowercalparcalculator.cc:184  hshowercalparcalculator.cc:185  hshowercalparcalculator.cc:186  hshowercalparcalculator.cc:187  hshowercalparcalculator.cc:188  hshowercalparcalculator.cc:189  hshowercalparcalculator.cc:190  hshowercalparcalculator.cc:191  hshowercalparcalculator.cc:192  hshowercalparcalculator.cc:193  hshowercalparcalculator.cc:194  hshowercalparcalculator.cc:195  hshowercalparcalculator.cc:196  hshowercalparcalculator.cc:197  hshowercalparcalculator.cc:198  hshowercalparcalculator.cc:199  hshowercalparcalculator.cc:200  hshowercalparcalculator.cc:201  hshowercalparcalculator.cc:202  hshowercalparcalculator.cc:203  hshowercalparcalculator.cc:204  hshowercalparcalculator.cc:205  hshowercalparcalculator.cc:206  hshowercalparcalculator.cc:207  hshowercalparcalculator.cc:208  hshowercalparcalculator.cc:209  hshowercalparcalculator.cc:210  hshowercalparcalculator.cc:211  hshowercalparcalculator.cc:212  hshowercalparcalculator.cc:213  hshowercalparcalculator.cc:214  hshowercalparcalculator.cc:215  hshowercalparcalculator.cc:216  hshowercalparcalculator.cc:217  hshowercalparcalculator.cc:218  hshowercalparcalculator.cc:219  hshowercalparcalculator.cc:220  hshowercalparcalculator.cc:221  hshowercalparcalculator.cc:222  hshowercalparcalculator.cc:223  hshowercalparcalculator.cc:224  hshowercalparcalculator.cc:225  hshowercalparcalculator.cc:226  hshowercalparcalculator.cc:227  hshowercalparcalculator.cc:228  hshowercalparcalculator.cc:229  hshowercalparcalculator.cc:230  hshowercalparcalculator.cc:231  hshowercalparcalculator.cc:232  hshowercalparcalculator.cc:233  hshowercalparcalculator.cc:234  hshowercalparcalculator.cc:235  hshowercalparcalculator.cc:236  hshowercalparcalculator.cc:237  hshowercalparcalculator.cc:238  hshowercalparcalculator.cc:239  hshowercalparcalculator.cc:240  hshowercalparcalculator.cc:241  hshowercalparcalculator.cc:242  hshowercalparcalculator.cc:243  hshowercalparcalculator.cc:244  hshowercalparcalculator.cc:245  hshowercalparcalculator.cc:246  hshowercalparcalculator.cc:247  hshowercalparcalculator.cc:248  hshowercalparcalculator.cc:249  hshowercalparcalculator.cc:250  hshowercalparcalculator.cc:251  hshowercalparcalculator.cc:252  hshowercalparcalculator.cc:253  hshowercalparcalculator.cc:254  hshowercalparcalculator.cc:255  hshowercalparcalculator.cc:256  hshowercalparcalculator.cc:257  hshowercalparcalculator.cc:258  hshowercalparcalculator.cc:259  hshowercalparcalculator.cc:260  hshowercalparcalculator.cc:261  hshowercalparcalculator.cc:262  hshowercalparcalculator.cc:263  hshowercalparcalculator.cc:264  hshowercalparcalculator.cc:265  hshowercalparcalculator.cc:266  hshowercalparcalculator.cc:267