ROOT logo
#pragma implementation

#include "TROOT.h"

#include "TH2.h"
#include "TH3.h"
#include "hshowerhistcell.h"
#include "hshowercalpar.h"
#include "hshowergeometry.h"
#include "hshowerpad.h"
#include "hades.h"
#include "hruntimedb.h"

//------------------------------------------------------------------------------

ClassImp(HShowerHistCell)

//------------------------------------------------------------------------------

const Char_t* g_cpstr_HSHC_Methods[HSHC_MAX] =
        { "Test", "CalElect", "RunSigma", "RunThreshold",
          "CalSigma", "CalThreshold", "RunIntegrate", "CalIntegrate" };

//------------------------------------------------------------------------------

#define ROUND_INT(A) {if((Int_t)(A) != (A)) \
                            A = (Float_t)((Int_t)(A) - 1);}

//------------------------------------------------------------------------------

HShowerHistCell::HShowerHistCell()
{
    m_pHist = NULL;
    m_pSlopeHist = NULL;
    m_pOffsetHist = NULL;

    setSector(-1);
    setModule(-1);
    setRows(0);
    setCols(0);

    m_nDataSize = 0;
    m_pData = NULL;
    m_pGeom = NULL;

    m_fChannel10pC = DEF_CHANNEL_10pC;
}

//------------------------------------------------------------------------------

HShowerHistCell::HShowerHistCell(Int_t nSect, Int_t nMod,
                 Int_t nRows, Int_t nCols)
{
    m_pHist       = NULL;
    m_pSlopeHist  = NULL;
    m_pOffsetHist = NULL;

    setSector(nSect);
    setModule(nMod);
    setRows(nRows);
    setCols(nCols);

    m_nDataSize = 0;
    m_pData = NULL;
    m_pGeom = NULL;

    m_fChannel10pC = 500.0;
}

//------------------------------------------------------------------------------

HShowerHistCell::~HShowerHistCell()
{
    deleteHist();
}

//------------------------------------------------------------------------------

Bool_t HShowerHistCell::reset()
{
    m_pHist->Reset();
    m_pSlopeHist->Reset();
    m_pOffsetHist->Reset();

    return kTRUE;
}

//------------------------------------------------------------------------------

Bool_t HShowerHistCell::book()
{
    if(m_nRows * m_nCols==0)
        return kFALSE;

Char_t name[60];
Char_t title[60];
Char_t name2[60];
Char_t title2[60];

    deleteHist();

    getName(name, sizeof(name));
    getTitle(title, sizeof(title));

    m_pHist = new TH3S(name, title,
                           m_nRows, 0, m_nRows,
                           m_nCols, 0, m_nCols,
                           1024, 0, 1024);

    m_nDataSize = m_pHist->GetNbinsZ();
    m_pData = new Int_t[m_nDataSize];

    sprintf(name2, "%sSlope", name);
    sprintf(title2, "%s - Slope", title);

    m_pSlopeHist = new TH2F(name2, title,
                           m_nRows, 0, m_nRows,
                           m_nCols, 0, m_nCols);

    m_pSlopeHist->GetXaxis()->SetTitle("columns");
    m_pSlopeHist->GetYaxis()->SetTitle("rows");

    sprintf(name2, "%sOffset", name);
    sprintf(title2, "%s - Offset", title);

    m_pOffsetHist = new TH2F(name2, title,
                           m_nRows, 0, m_nRows,
                           m_nCols, 0, m_nCols);

    m_pOffsetHist->GetXaxis()->SetTitle("columns");
    m_pOffsetHist->GetYaxis()->SetTitle("rows");

    return kTRUE;
}

//------------------------------------------------------------------------------

Bool_t HShowerHistCell::book(Int_t nRows, Int_t nCols)
{
    if(nRows * nCols == 0)
        return kFALSE;

    setRows(nRows);
    setCols(nCols);

    return book();
}

//------------------------------------------------------------------------------

Bool_t HShowerHistCell::fill(Int_t nRow, Int_t nCol, Int_t nVal)
{
    if( ! m_pHist)
        return kFALSE;

    m_pHist->Fill(nRow, nCol, nVal);

    return kTRUE;
}

//------------------------------------------------------------------------------

Bool_t HShowerHistCell::draw(Int_t nRow, Int_t nCol, Option_t* opt)
{
    if( ! m_pHist)
        return kFALSE;

//   m_pHist->Draw(opt);
    return kTRUE;
}

//------------------------------------------------------------------------------

void HShowerHistCell::deleteHist()
{
    if(m_pHist)
        m_pHist = NULL;

    if(m_pSlopeHist)
        m_pSlopeHist = NULL;

    if(m_pOffsetHist)
        m_pOffsetHist = NULL;

    if(m_pData)
    {
        delete [] m_pData;
        m_pData = NULL;
        m_nDataSize = 0;
    }
}

//------------------------------------------------------------------------------

void HShowerHistCell::getName(Char_t* name, Int_t nSize)
{
Char_t buf[40];

    sprintf(buf, "S%d%d", m_nSector, m_nModule);
    strncpy(name, buf, nSize);
}

//------------------------------------------------------------------------------

void HShowerHistCell::getTitle(Char_t* title, Int_t nSize)
{
Char_t buf[60];
Char_t mods[3][6] = {"pre", "post", "post2"};

    sprintf(buf, "Shower Histogram: Sector %d %s",
                        m_nSector, mods[(Int_t)m_nModule]);
    strncpy(title, buf, nSize);
}

//------------------------------------------------------------------------------

void HShowerHistCell::writeHistogram()
{
//    m_pHist->Write();
    m_pSlopeHist->Write();
    m_pOffsetHist->Write();
}

//------------------------------------------------------------------------------

void HShowerHistCell::fillData(Int_t nRow, Int_t nCol,
                                             Int_t nBins, Int_t *pData)
{
Int_t i;
Int_t bin;
Int_t binx, biny, binz;

    for(i = 0; i < nBins; i++)
    {
        binx = m_pHist->GetXaxis()->FindBin(nRow);
        biny = m_pHist->GetYaxis()->FindBin(nCol);
        binz = m_pHist->GetZaxis()->FindBin(i);
        bin  = m_pHist->GetBin(binx, biny, binz);
        pData[i] = (Int_t)m_pHist->GetBinContent(bin);
    }
}

//------------------------------------------------------------------------------

Int_t HShowerHistCell::getMax(void)
{
Int_t   i    = 0;
Int_t nMax = 0;

    for (i = 0; i < m_nDataSize; i++)
        if (nMax < m_pData[i])
            nMax = m_pData[i];

    return nMax;
}

//------------------------------------------------------------------------------

Float_t HShowerHistCell::getMean(Int_t nMin, Int_t nMax, Int_t nThreshold)
{
Int_t nSum = 0;
Int_t nE   = 0;
Int_t nStart = (nMin < 0)           ? 0           : nMin;
Int_t nStop  = (nMax > m_nDataSize) ? m_nDataSize : nMax;
Int_t   i;

    for(i = nStart; i < nStop; i++)
        if(m_pData[i] >= nThreshold)
        {
            nSum += m_pData[i];
            nE   += i * m_pData[i];
        }

    return (nSum == 0) ? -1.0 : ((float) nE) / nSum;
}

//------------------------------------------------------------------------------

Float_t HShowerHistCell::getSigma(Float_t fMean, Int_t nMin, Int_t nMax,
                                                Int_t nThreshold)
{
Float_t fSum = 0;
Float_t fE2 = 0;
Int_t nStart = (nMin < 0)           ? 0           : nMin;
Int_t nStop  = (nMax > m_nDataSize) ? m_nDataSize : nMax;
Int_t   i;
Float_t fRet;

    for(i = nStart; i < nStop; i++)
    {
        if(m_pData[i] >= nThreshold)
        {
            fE2  += m_pData[i] * (i - fMean) * (i - fMean);
            fSum += m_pData[i];
        }
    }

    if(fSum <= 0.0)
        return 0.0f;

    fRet = (Float_t) TMath::Abs(sqrt(fE2 / fSum));

    return fRet;
}

//------------------------------------------------------------------------------

void HShowerHistCell::makeRunFromCal(HShowerCalParCell* pCell)
{
// For data from the calibration mode cut out left half of the first peak
// and the second peak. The data should be similar to the data from
// the run mode without HV.

Int_t i;
Int_t iMax;

    if((iMax = (int)(-pCell->getOffset())) >= m_nDataSize)
        iMax = m_nDataSize - 1;

    for(i = 0; i <= iMax; i++)
        m_pData[i] = 0;

    if(pCell->getSlope() <= 0.0f)
        return;

        // zero all data starting from the bin in the middle of the peaks
    iMax = (int)(0.5
        * (m_fChannel10pC / pCell->getSlope() - 2 * pCell->getOffset()));
    for(i = iMax; i < m_nDataSize; i++)
        m_pData[i] = 0;
}


//------------------------------------------------------------------------------

void HShowerHistCell::calculate(Int_t iEvents, HShowerCalPar* pCalPar,
                                Int_t iMethod, Float_t fParam1, Float_t fParam2)
{
Int_t                nRow, nCol;
HLocation          loc;
HShowerCalParCell *pCell;
HShowerPadTab     *pPadTable;
HShowerPad        *pPad;

    printf("HShowerHistCell %d %d calculate. Method: %s\n",
            m_nSector, m_nModule, g_cpstr_HSHC_Methods[iMethod]);

    m_iEvents = iEvents;

    if(m_pGeom == NULL)
    {
    HRuntimeDb        *rtdb  = gHades->getRuntimeDb();
    HShowerGeometry   *pGeom = (HShowerGeometry*)rtdb->
                                           getContainer("ShowerGeometry");

        if( ! pGeom)
            Error("calculate", "Unknown container : ShowerGeometry");

        setGeometry(pGeom);
    }

    loc.setNIndex(4);
    loc[0] = m_nSector;
    loc[1] = m_nModule;

    for(nRow = 0; nRow < m_nRows; nRow++)
    {
        loc[2] = nRow;

        for(nCol = 0; nCol < m_nCols; nCol++)
        {
            loc[3] = nCol;

            if((pCell = pCalPar->getObject(loc)) == NULL)
                continue;
#if 0
            printf("A Cell %d %d %2d %2d: ",
                    m_nSector, m_nModule, nRow, nCol);

            pCell->print();
#endif
                // throw away all pads outside detector
            if(((pPadTable = m_pGeom->getPadParam(m_nModule)) == NULL)
                || ((pPad = pPadTable->getPad(nRow, nCol)) == NULL)
                || (pPad->getPadFlag() == 0))
            {
                if(pPadTable == NULL)
                {
                    Error("calculate",
                            "HShowerGeometry->getPadParam(%d) == NULL",
                            m_nModule);
                }
                else
                {
                    if(pPad == NULL)
                    {
                        Error("calculate", "No pad M: %d  R: %d  C: %d",
                                m_nModule, nRow, nCol);
                    }
                }

                pCell->setParams(0.0f, MAX_OFFSET, MAX_OFFSET, 1.0f);

                continue;
            }

            fillData(nRow, nCol, m_nDataSize, m_pData);

            switch(iMethod)
            {
                case HSHC_CAL_TEST:
                    calTest(loc, pCell, fParam1, fParam2);
                    break;

                case HSHC_CAL_ELECT:
                    calElect(loc, pCell, fParam1, fParam2);
                    break;

                case HSHC_RUN_SIGMA:
                    runSigma(loc, pCell, fParam1, fParam2);
                    break;

                case HSHC_RUN_THRESHOLD:
                    runThreshold(loc, pCell, fParam1, fParam2);
                    break;

                case HSHC_CAL_SIGMA:
                    calElect(loc, pCell, fParam1, fParam2);
                    makeRunFromCal(pCell);
                    runSigma(loc, pCell, fParam1, fParam2);
                    break;

                case HSHC_CAL_THRESHOLD:
                    calElect(loc, pCell, fParam1, fParam2);
                    makeRunFromCal(pCell);
                    runThreshold(loc, pCell, fParam1, fParam2);
                    break;

                case HSHC_RUN_INTEGRATE:
                    runIntegrate(loc, pCell, fParam1, fParam2);
                    break;

                case HSHC_CAL_INTEGRATE:
                    calElect(loc, pCell, fParam1, fParam2);
                    makeRunFromCal(pCell);
                    runIntegrate(loc, pCell, fParam1, fParam2);
                    break;

                default:
                    gROOT->Error("HShowerHistCell::calculate",
                            "Unknown method: %d\n", iMethod);
                    return;
            }

#if 0
            printf("A Cell %d %d %2d %2d: ",
                    m_nSector, m_nModule, nRow, nCol);
            pCell->print();
#endif
        }
    }
}

//------------------------------------------------------------------------------

void HShowerHistCell::calTest(HLocation &loc, HShowerCalParCell *pCell,
                                 Float_t fParam1, Float_t fParam2)
{
static Int_t iCount = 0;

    iCount++;

    pCell->setParams(loc[0], loc[1], loc[2], loc[3]);
}

//------------------------------------------------------------------------------

void HShowerHistCell::calElect(HLocation &loc, HShowerCalParCell* pCell,
                                 Float_t fParam1, Float_t fParam2)
{
Float_t fOffset;
Float_t fSlope;
Float_t fThreshold; // threshold for electronics
Float_t fMean, fMean1, fMean2;
Float_t fMeanThreshold = (fParam1 <= 0.0f) ? 0.05 : fParam1;
Float_t fMinePeakDist  = (fParam2 <= 0.0f) ? (m_fChannel10pC / 4) : fParam2;

    fMeanThreshold *= getMax();
    if(((fMean = getMean(0, m_nDataSize, (Int_t)fMeanThreshold)) < 0)
        || ((fMean1 = getMean(0, (Int_t)fMean, (Int_t)fMeanThreshold)) < 0)
        || ((fMean2 = getMean((Int_t)fMean, m_nDataSize, (Int_t)fMeanThreshold)) < 0)
        || ((fMean2 - fMean1) < fMinePeakDist))
    {
        pCell->setParams(0.0f, MAX_OFFSET, MAX_OFFSET, 1.0f);
        return;
    }

    fOffset = -fMean1;

    fSlope = m_fChannel10pC / (fMean2 - fMean1);
    fThreshold = fOffset;
    ROUND_INT(fThreshold);

    pCell->setParams(fSlope, fOffset, fThreshold, 1.0f);

    if((loc[0] == 5) && (loc[1] == 2) && (loc[2] == 29) && (loc[3] == 9))
    {
        printf("**** ");
        pCell->print();
        printf("fMean %f  fMean1 %f  fMean2 %f  fMinePeakDist %f  "
                "m_fChannel10pC %f\n",
                fMean, fMean1, fMean2, fMinePeakDist, m_fChannel10pC);
    }
}

//------------------------------------------------------------------------------

void HShowerHistCell::runSigma(HLocation &loc, HShowerCalParCell* pCell,
                                 Float_t fParam1, Float_t fParam2)
{
Float_t fThreshold; // threshold for electronics
Float_t fMean;
Float_t fSigma;
Float_t fMeanThreshold = (fParam1 <= 0.0f) ? 0.05 : fParam1;
Float_t fSigmaMod      = (fParam2 <= 0.0f) ? 3.0  : fParam2;

    if(pCell->getOffset() == MAX_OFFSET)
    {
        pCell->setThreshold(MAX_OFFSET);
        return;
    }

    fMeanThreshold *= getMax();

    if((fMean = getMean(0, m_nDataSize, (Int_t)fMeanThreshold)) < 0)
        return;

    fSigma = getSigma(fMean, 0, m_nDataSize, (Int_t)fMeanThreshold);

    fThreshold = -(fMean + fSigmaMod * fSigma);

    if(fThreshold > pCell->getOffset())
    {
        gROOT->Warning("ShowerHistCell::runSigma",
                "\n\tThreshold < Offset %f / %f [%d,%d,%d,%d]\n",
                fThreshold, pCell->getOffset(), loc[0], loc[1], loc[2], loc[3]);

        fThreshold = pCell->getOffset();
    }

    ROUND_INT(fThreshold);

    pCell->setThreshold(fThreshold);
}

//------------------------------------------------------------------------------

void HShowerHistCell::runThreshold(HLocation &loc, HShowerCalParCell* pCell,
                                 Float_t fParam1, Float_t fParam2)
{
Float_t fThreshold; // threshold for electronics
Float_t fMean;
Float_t fPeakThreshold = (fParam1 <= 0.0f) ? 0.05 : fParam1;
Int_t   iNeibourhood   = (fParam2 <= 0.0f) ? 5 : (Int_t) fParam2;
Int_t     iCurBin;
Int_t   iMax = getMax();

    if(pCell->getOffset() == MAX_OFFSET)
    {
        pCell->setThreshold(MAX_OFFSET);
        return;
    }

    if(iMax <= 1)
        return;

    if(fParam1 >= 0.0f)
    {
        fPeakThreshold = (fParam1 == 0.0f) ? 0.05 : fParam1;
        fPeakThreshold *= iMax;
    }
    else
    {
        fPeakThreshold = -fParam1;
        if(iMax < fPeakThreshold)
            return;
    }

    if(((fMean = pCell->getOffset()) >= 0.0f)
        && ((fMean = -getMean(0, m_nDataSize, 0)) > 0))
    {
        return;
    }

    ROUND_INT(fMean);
    fMean = -fMean;

    for(iCurBin = (int)(fMean + iNeibourhood);
        (iCurBin > fMean) && (m_pData[iCurBin] <= fPeakThreshold); iCurBin--);

    fThreshold = -iCurBin;
    ROUND_INT(fThreshold);

    if(fThreshold > pCell->getOffset())
    {
        gROOT->Warning("ShowerHistCell::runThreshold",
                "\n\tThreshold < Offset %f / %f [%d,%d,%d,%d]\n",
                fThreshold, pCell->getOffset(), loc[0], loc[1], loc[2], loc[3]);

        fThreshold = pCell->getOffset();
    }

    if(fThreshold < pCell->getThreshold())
        pCell->setThreshold(fThreshold);
}

//------------------------------------------------------------------------------

void HShowerHistCell::runIntegrate(HLocation &loc, HShowerCalParCell* pCell,
                                 Float_t fParam1, Float_t fParam2)
{
Float_t fThreshold; // threshold for electronics
Float_t fMean;
Int_t   iNeibourhood   = (fParam2 <= 0.0f) ? 5 : (Int_t) fParam2;
Int_t     iCurBin;
Int_t   iMax;
Int_t   iSum;

    if(pCell->getOffset() == MAX_OFFSET)
    {
        pCell->setThreshold(MAX_OFFSET);
        return;
    }

    if(fParam1 >= 0.0f)
        iMax = (int)(((fParam1 == 0.0f) ? 0.05 : fParam1) * m_iEvents);
    else
        iMax = (int)(-fParam1);

    if(((fMean = pCell->getOffset()) >= 0.0f)
        && ((fMean = -getMean(0, m_nDataSize, 0)) > 0))
    {
        return;
    }

    ROUND_INT(fMean);
    fMean = -fMean;

    for(iCurBin = (int)(fMean + iNeibourhood), iSum = 0;
        (iCurBin > fMean) && ((iSum += m_pData[iCurBin]) <= iMax); iCurBin--);

    fThreshold = -iCurBin;
    if(iSum > iMax)
        fThreshold -= 1.0f;

    ROUND_INT(fThreshold);

    if(fThreshold > pCell->getOffset())
    {
        gROOT->Warning("ShowerHistCell::runIntegrate",
                "\n\tThreshold < Offset %f / %f [%d,%d,%d,%d]\n",
                fThreshold, pCell->getOffset(), loc[0], loc[1], loc[2], loc[3]);

        fThreshold = pCell->getOffset();
    }

    if(fThreshold < pCell->getThreshold())
        pCell->setThreshold(fThreshold);
}
 hshowerhistcell.cc:1
 hshowerhistcell.cc:2
 hshowerhistcell.cc:3
 hshowerhistcell.cc:4
 hshowerhistcell.cc:5
 hshowerhistcell.cc:6
 hshowerhistcell.cc:7
 hshowerhistcell.cc:8
 hshowerhistcell.cc:9
 hshowerhistcell.cc:10
 hshowerhistcell.cc:11
 hshowerhistcell.cc:12
 hshowerhistcell.cc:13
 hshowerhistcell.cc:14
 hshowerhistcell.cc:15
 hshowerhistcell.cc:16
 hshowerhistcell.cc:17
 hshowerhistcell.cc:18
 hshowerhistcell.cc:19
 hshowerhistcell.cc:20
 hshowerhistcell.cc:21
 hshowerhistcell.cc:22
 hshowerhistcell.cc:23
 hshowerhistcell.cc:24
 hshowerhistcell.cc:25
 hshowerhistcell.cc:26
 hshowerhistcell.cc:27
 hshowerhistcell.cc:28
 hshowerhistcell.cc:29
 hshowerhistcell.cc:30
 hshowerhistcell.cc:31
 hshowerhistcell.cc:32
 hshowerhistcell.cc:33
 hshowerhistcell.cc:34
 hshowerhistcell.cc:35
 hshowerhistcell.cc:36
 hshowerhistcell.cc:37
 hshowerhistcell.cc:38
 hshowerhistcell.cc:39
 hshowerhistcell.cc:40
 hshowerhistcell.cc:41
 hshowerhistcell.cc:42
 hshowerhistcell.cc:43
 hshowerhistcell.cc:44
 hshowerhistcell.cc:45
 hshowerhistcell.cc:46
 hshowerhistcell.cc:47
 hshowerhistcell.cc:48
 hshowerhistcell.cc:49
 hshowerhistcell.cc:50
 hshowerhistcell.cc:51
 hshowerhistcell.cc:52
 hshowerhistcell.cc:53
 hshowerhistcell.cc:54
 hshowerhistcell.cc:55
 hshowerhistcell.cc:56
 hshowerhistcell.cc:57
 hshowerhistcell.cc:58
 hshowerhistcell.cc:59
 hshowerhistcell.cc:60
 hshowerhistcell.cc:61
 hshowerhistcell.cc:62
 hshowerhistcell.cc:63
 hshowerhistcell.cc:64
 hshowerhistcell.cc:65
 hshowerhistcell.cc:66
 hshowerhistcell.cc:67
 hshowerhistcell.cc:68
 hshowerhistcell.cc:69
 hshowerhistcell.cc:70
 hshowerhistcell.cc:71
 hshowerhistcell.cc:72
 hshowerhistcell.cc:73
 hshowerhistcell.cc:74
 hshowerhistcell.cc:75
 hshowerhistcell.cc:76
 hshowerhistcell.cc:77
 hshowerhistcell.cc:78
 hshowerhistcell.cc:79
 hshowerhistcell.cc:80
 hshowerhistcell.cc:81
 hshowerhistcell.cc:82
 hshowerhistcell.cc:83
 hshowerhistcell.cc:84
 hshowerhistcell.cc:85
 hshowerhistcell.cc:86
 hshowerhistcell.cc:87
 hshowerhistcell.cc:88
 hshowerhistcell.cc:89
 hshowerhistcell.cc:90
 hshowerhistcell.cc:91
 hshowerhistcell.cc:92
 hshowerhistcell.cc:93
 hshowerhistcell.cc:94
 hshowerhistcell.cc:95
 hshowerhistcell.cc:96
 hshowerhistcell.cc:97
 hshowerhistcell.cc:98
 hshowerhistcell.cc:99
 hshowerhistcell.cc:100
 hshowerhistcell.cc:101
 hshowerhistcell.cc:102
 hshowerhistcell.cc:103
 hshowerhistcell.cc:104
 hshowerhistcell.cc:105
 hshowerhistcell.cc:106
 hshowerhistcell.cc:107
 hshowerhistcell.cc:108
 hshowerhistcell.cc:109
 hshowerhistcell.cc:110
 hshowerhistcell.cc:111
 hshowerhistcell.cc:112
 hshowerhistcell.cc:113
 hshowerhistcell.cc:114
 hshowerhistcell.cc:115
 hshowerhistcell.cc:116
 hshowerhistcell.cc:117
 hshowerhistcell.cc:118
 hshowerhistcell.cc:119
 hshowerhistcell.cc:120
 hshowerhistcell.cc:121
 hshowerhistcell.cc:122
 hshowerhistcell.cc:123
 hshowerhistcell.cc:124
 hshowerhistcell.cc:125
 hshowerhistcell.cc:126
 hshowerhistcell.cc:127
 hshowerhistcell.cc:128
 hshowerhistcell.cc:129
 hshowerhistcell.cc:130
 hshowerhistcell.cc:131
 hshowerhistcell.cc:132
 hshowerhistcell.cc:133
 hshowerhistcell.cc:134
 hshowerhistcell.cc:135
 hshowerhistcell.cc:136
 hshowerhistcell.cc:137
 hshowerhistcell.cc:138
 hshowerhistcell.cc:139
 hshowerhistcell.cc:140
 hshowerhistcell.cc:141
 hshowerhistcell.cc:142
 hshowerhistcell.cc:143
 hshowerhistcell.cc:144
 hshowerhistcell.cc:145
 hshowerhistcell.cc:146
 hshowerhistcell.cc:147
 hshowerhistcell.cc:148
 hshowerhistcell.cc:149
 hshowerhistcell.cc:150
 hshowerhistcell.cc:151
 hshowerhistcell.cc:152
 hshowerhistcell.cc:153
 hshowerhistcell.cc:154
 hshowerhistcell.cc:155
 hshowerhistcell.cc:156
 hshowerhistcell.cc:157
 hshowerhistcell.cc:158
 hshowerhistcell.cc:159
 hshowerhistcell.cc:160
 hshowerhistcell.cc:161
 hshowerhistcell.cc:162
 hshowerhistcell.cc:163
 hshowerhistcell.cc:164
 hshowerhistcell.cc:165
 hshowerhistcell.cc:166
 hshowerhistcell.cc:167
 hshowerhistcell.cc:168
 hshowerhistcell.cc:169
 hshowerhistcell.cc:170
 hshowerhistcell.cc:171
 hshowerhistcell.cc:172
 hshowerhistcell.cc:173
 hshowerhistcell.cc:174
 hshowerhistcell.cc:175
 hshowerhistcell.cc:176
 hshowerhistcell.cc:177
 hshowerhistcell.cc:178
 hshowerhistcell.cc:179
 hshowerhistcell.cc:180
 hshowerhistcell.cc:181
 hshowerhistcell.cc:182
 hshowerhistcell.cc:183
 hshowerhistcell.cc:184
 hshowerhistcell.cc:185
 hshowerhistcell.cc:186
 hshowerhistcell.cc:187
 hshowerhistcell.cc:188
 hshowerhistcell.cc:189
 hshowerhistcell.cc:190
 hshowerhistcell.cc:191
 hshowerhistcell.cc:192
 hshowerhistcell.cc:193
 hshowerhistcell.cc:194
 hshowerhistcell.cc:195
 hshowerhistcell.cc:196
 hshowerhistcell.cc:197
 hshowerhistcell.cc:198
 hshowerhistcell.cc:199
 hshowerhistcell.cc:200
 hshowerhistcell.cc:201
 hshowerhistcell.cc:202
 hshowerhistcell.cc:203
 hshowerhistcell.cc:204
 hshowerhistcell.cc:205
 hshowerhistcell.cc:206
 hshowerhistcell.cc:207
 hshowerhistcell.cc:208
 hshowerhistcell.cc:209
 hshowerhistcell.cc:210
 hshowerhistcell.cc:211
 hshowerhistcell.cc:212
 hshowerhistcell.cc:213
 hshowerhistcell.cc:214
 hshowerhistcell.cc:215
 hshowerhistcell.cc:216
 hshowerhistcell.cc:217
 hshowerhistcell.cc:218
 hshowerhistcell.cc:219
 hshowerhistcell.cc:220
 hshowerhistcell.cc:221
 hshowerhistcell.cc:222
 hshowerhistcell.cc:223
 hshowerhistcell.cc:224
 hshowerhistcell.cc:225
 hshowerhistcell.cc:226
 hshowerhistcell.cc:227
 hshowerhistcell.cc:228
 hshowerhistcell.cc:229
 hshowerhistcell.cc:230
 hshowerhistcell.cc:231
 hshowerhistcell.cc:232
 hshowerhistcell.cc:233
 hshowerhistcell.cc:234
 hshowerhistcell.cc:235
 hshowerhistcell.cc:236
 hshowerhistcell.cc:237
 hshowerhistcell.cc:238
 hshowerhistcell.cc:239
 hshowerhistcell.cc:240
 hshowerhistcell.cc:241
 hshowerhistcell.cc:242
 hshowerhistcell.cc:243
 hshowerhistcell.cc:244
 hshowerhistcell.cc:245
 hshowerhistcell.cc:246
 hshowerhistcell.cc:247
 hshowerhistcell.cc:248
 hshowerhistcell.cc:249
 hshowerhistcell.cc:250
 hshowerhistcell.cc:251
 hshowerhistcell.cc:252
 hshowerhistcell.cc:253
 hshowerhistcell.cc:254
 hshowerhistcell.cc:255
 hshowerhistcell.cc:256
 hshowerhistcell.cc:257
 hshowerhistcell.cc:258
 hshowerhistcell.cc:259
 hshowerhistcell.cc:260
 hshowerhistcell.cc:261
 hshowerhistcell.cc:262
 hshowerhistcell.cc:263
 hshowerhistcell.cc:264
 hshowerhistcell.cc:265
 hshowerhistcell.cc:266
 hshowerhistcell.cc:267
 hshowerhistcell.cc:268
 hshowerhistcell.cc:269
 hshowerhistcell.cc:270
 hshowerhistcell.cc:271
 hshowerhistcell.cc:272
 hshowerhistcell.cc:273
 hshowerhistcell.cc:274
 hshowerhistcell.cc:275
 hshowerhistcell.cc:276
 hshowerhistcell.cc:277
 hshowerhistcell.cc:278
 hshowerhistcell.cc:279
 hshowerhistcell.cc:280
 hshowerhistcell.cc:281
 hshowerhistcell.cc:282
 hshowerhistcell.cc:283
 hshowerhistcell.cc:284
 hshowerhistcell.cc:285
 hshowerhistcell.cc:286
 hshowerhistcell.cc:287
 hshowerhistcell.cc:288
 hshowerhistcell.cc:289
 hshowerhistcell.cc:290
 hshowerhistcell.cc:291
 hshowerhistcell.cc:292
 hshowerhistcell.cc:293
 hshowerhistcell.cc:294
 hshowerhistcell.cc:295
 hshowerhistcell.cc:296
 hshowerhistcell.cc:297
 hshowerhistcell.cc:298
 hshowerhistcell.cc:299
 hshowerhistcell.cc:300
 hshowerhistcell.cc:301
 hshowerhistcell.cc:302
 hshowerhistcell.cc:303
 hshowerhistcell.cc:304
 hshowerhistcell.cc:305
 hshowerhistcell.cc:306
 hshowerhistcell.cc:307
 hshowerhistcell.cc:308
 hshowerhistcell.cc:309
 hshowerhistcell.cc:310
 hshowerhistcell.cc:311
 hshowerhistcell.cc:312
 hshowerhistcell.cc:313
 hshowerhistcell.cc:314
 hshowerhistcell.cc:315
 hshowerhistcell.cc:316
 hshowerhistcell.cc:317
 hshowerhistcell.cc:318
 hshowerhistcell.cc:319
 hshowerhistcell.cc:320
 hshowerhistcell.cc:321
 hshowerhistcell.cc:322
 hshowerhistcell.cc:323
 hshowerhistcell.cc:324
 hshowerhistcell.cc:325
 hshowerhistcell.cc:326
 hshowerhistcell.cc:327
 hshowerhistcell.cc:328
 hshowerhistcell.cc:329
 hshowerhistcell.cc:330
 hshowerhistcell.cc:331
 hshowerhistcell.cc:332
 hshowerhistcell.cc:333
 hshowerhistcell.cc:334
 hshowerhistcell.cc:335
 hshowerhistcell.cc:336
 hshowerhistcell.cc:337
 hshowerhistcell.cc:338
 hshowerhistcell.cc:339
 hshowerhistcell.cc:340
 hshowerhistcell.cc:341
 hshowerhistcell.cc:342
 hshowerhistcell.cc:343
 hshowerhistcell.cc:344
 hshowerhistcell.cc:345
 hshowerhistcell.cc:346
 hshowerhistcell.cc:347
 hshowerhistcell.cc:348
 hshowerhistcell.cc:349
 hshowerhistcell.cc:350
 hshowerhistcell.cc:351
 hshowerhistcell.cc:352
 hshowerhistcell.cc:353
 hshowerhistcell.cc:354
 hshowerhistcell.cc:355
 hshowerhistcell.cc:356
 hshowerhistcell.cc:357
 hshowerhistcell.cc:358
 hshowerhistcell.cc:359
 hshowerhistcell.cc:360
 hshowerhistcell.cc:361
 hshowerhistcell.cc:362
 hshowerhistcell.cc:363
 hshowerhistcell.cc:364
 hshowerhistcell.cc:365
 hshowerhistcell.cc:366
 hshowerhistcell.cc:367
 hshowerhistcell.cc:368
 hshowerhistcell.cc:369
 hshowerhistcell.cc:370
 hshowerhistcell.cc:371
 hshowerhistcell.cc:372
 hshowerhistcell.cc:373
 hshowerhistcell.cc:374
 hshowerhistcell.cc:375
 hshowerhistcell.cc:376
 hshowerhistcell.cc:377
 hshowerhistcell.cc:378
 hshowerhistcell.cc:379
 hshowerhistcell.cc:380
 hshowerhistcell.cc:381
 hshowerhistcell.cc:382
 hshowerhistcell.cc:383
 hshowerhistcell.cc:384
 hshowerhistcell.cc:385
 hshowerhistcell.cc:386
 hshowerhistcell.cc:387
 hshowerhistcell.cc:388
 hshowerhistcell.cc:389
 hshowerhistcell.cc:390
 hshowerhistcell.cc:391
 hshowerhistcell.cc:392
 hshowerhistcell.cc:393
 hshowerhistcell.cc:394
 hshowerhistcell.cc:395
 hshowerhistcell.cc:396
 hshowerhistcell.cc:397
 hshowerhistcell.cc:398
 hshowerhistcell.cc:399
 hshowerhistcell.cc:400
 hshowerhistcell.cc:401
 hshowerhistcell.cc:402
 hshowerhistcell.cc:403
 hshowerhistcell.cc:404
 hshowerhistcell.cc:405
 hshowerhistcell.cc:406
 hshowerhistcell.cc:407
 hshowerhistcell.cc:408
 hshowerhistcell.cc:409
 hshowerhistcell.cc:410
 hshowerhistcell.cc:411
 hshowerhistcell.cc:412
 hshowerhistcell.cc:413
 hshowerhistcell.cc:414
 hshowerhistcell.cc:415
 hshowerhistcell.cc:416
 hshowerhistcell.cc:417
 hshowerhistcell.cc:418
 hshowerhistcell.cc:419
 hshowerhistcell.cc:420
 hshowerhistcell.cc:421
 hshowerhistcell.cc:422
 hshowerhistcell.cc:423
 hshowerhistcell.cc:424
 hshowerhistcell.cc:425
 hshowerhistcell.cc:426
 hshowerhistcell.cc:427
 hshowerhistcell.cc:428
 hshowerhistcell.cc:429
 hshowerhistcell.cc:430
 hshowerhistcell.cc:431
 hshowerhistcell.cc:432
 hshowerhistcell.cc:433
 hshowerhistcell.cc:434
 hshowerhistcell.cc:435
 hshowerhistcell.cc:436
 hshowerhistcell.cc:437
 hshowerhistcell.cc:438
 hshowerhistcell.cc:439
 hshowerhistcell.cc:440
 hshowerhistcell.cc:441
 hshowerhistcell.cc:442
 hshowerhistcell.cc:443
 hshowerhistcell.cc:444
 hshowerhistcell.cc:445
 hshowerhistcell.cc:446
 hshowerhistcell.cc:447
 hshowerhistcell.cc:448
 hshowerhistcell.cc:449
 hshowerhistcell.cc:450
 hshowerhistcell.cc:451
 hshowerhistcell.cc:452
 hshowerhistcell.cc:453
 hshowerhistcell.cc:454
 hshowerhistcell.cc:455
 hshowerhistcell.cc:456
 hshowerhistcell.cc:457
 hshowerhistcell.cc:458
 hshowerhistcell.cc:459
 hshowerhistcell.cc:460
 hshowerhistcell.cc:461
 hshowerhistcell.cc:462
 hshowerhistcell.cc:463
 hshowerhistcell.cc:464
 hshowerhistcell.cc:465
 hshowerhistcell.cc:466
 hshowerhistcell.cc:467
 hshowerhistcell.cc:468
 hshowerhistcell.cc:469
 hshowerhistcell.cc:470
 hshowerhistcell.cc:471
 hshowerhistcell.cc:472
 hshowerhistcell.cc:473
 hshowerhistcell.cc:474
 hshowerhistcell.cc:475
 hshowerhistcell.cc:476
 hshowerhistcell.cc:477
 hshowerhistcell.cc:478
 hshowerhistcell.cc:479
 hshowerhistcell.cc:480
 hshowerhistcell.cc:481
 hshowerhistcell.cc:482
 hshowerhistcell.cc:483
 hshowerhistcell.cc:484
 hshowerhistcell.cc:485
 hshowerhistcell.cc:486
 hshowerhistcell.cc:487
 hshowerhistcell.cc:488
 hshowerhistcell.cc:489
 hshowerhistcell.cc:490
 hshowerhistcell.cc:491
 hshowerhistcell.cc:492
 hshowerhistcell.cc:493
 hshowerhistcell.cc:494
 hshowerhistcell.cc:495
 hshowerhistcell.cc:496
 hshowerhistcell.cc:497
 hshowerhistcell.cc:498
 hshowerhistcell.cc:499
 hshowerhistcell.cc:500
 hshowerhistcell.cc:501
 hshowerhistcell.cc:502
 hshowerhistcell.cc:503
 hshowerhistcell.cc:504
 hshowerhistcell.cc:505
 hshowerhistcell.cc:506
 hshowerhistcell.cc:507
 hshowerhistcell.cc:508
 hshowerhistcell.cc:509
 hshowerhistcell.cc:510
 hshowerhistcell.cc:511
 hshowerhistcell.cc:512
 hshowerhistcell.cc:513
 hshowerhistcell.cc:514
 hshowerhistcell.cc:515
 hshowerhistcell.cc:516
 hshowerhistcell.cc:517
 hshowerhistcell.cc:518
 hshowerhistcell.cc:519
 hshowerhistcell.cc:520
 hshowerhistcell.cc:521
 hshowerhistcell.cc:522
 hshowerhistcell.cc:523
 hshowerhistcell.cc:524
 hshowerhistcell.cc:525
 hshowerhistcell.cc:526
 hshowerhistcell.cc:527
 hshowerhistcell.cc:528
 hshowerhistcell.cc:529
 hshowerhistcell.cc:530
 hshowerhistcell.cc:531
 hshowerhistcell.cc:532
 hshowerhistcell.cc:533
 hshowerhistcell.cc:534
 hshowerhistcell.cc:535
 hshowerhistcell.cc:536
 hshowerhistcell.cc:537
 hshowerhistcell.cc:538
 hshowerhistcell.cc:539
 hshowerhistcell.cc:540
 hshowerhistcell.cc:541
 hshowerhistcell.cc:542
 hshowerhistcell.cc:543
 hshowerhistcell.cc:544
 hshowerhistcell.cc:545
 hshowerhistcell.cc:546
 hshowerhistcell.cc:547
 hshowerhistcell.cc:548
 hshowerhistcell.cc:549
 hshowerhistcell.cc:550
 hshowerhistcell.cc:551
 hshowerhistcell.cc:552
 hshowerhistcell.cc:553
 hshowerhistcell.cc:554
 hshowerhistcell.cc:555
 hshowerhistcell.cc:556
 hshowerhistcell.cc:557
 hshowerhistcell.cc:558
 hshowerhistcell.cc:559
 hshowerhistcell.cc:560
 hshowerhistcell.cc:561
 hshowerhistcell.cc:562
 hshowerhistcell.cc:563
 hshowerhistcell.cc:564
 hshowerhistcell.cc:565
 hshowerhistcell.cc:566
 hshowerhistcell.cc:567
 hshowerhistcell.cc:568
 hshowerhistcell.cc:569
 hshowerhistcell.cc:570
 hshowerhistcell.cc:571
 hshowerhistcell.cc:572
 hshowerhistcell.cc:573
 hshowerhistcell.cc:574
 hshowerhistcell.cc:575
 hshowerhistcell.cc:576
 hshowerhistcell.cc:577
 hshowerhistcell.cc:578
 hshowerhistcell.cc:579
 hshowerhistcell.cc:580
 hshowerhistcell.cc:581
 hshowerhistcell.cc:582
 hshowerhistcell.cc:583
 hshowerhistcell.cc:584
 hshowerhistcell.cc:585
 hshowerhistcell.cc:586
 hshowerhistcell.cc:587
 hshowerhistcell.cc:588
 hshowerhistcell.cc:589
 hshowerhistcell.cc:590
 hshowerhistcell.cc:591
 hshowerhistcell.cc:592
 hshowerhistcell.cc:593
 hshowerhistcell.cc:594
 hshowerhistcell.cc:595
 hshowerhistcell.cc:596
 hshowerhistcell.cc:597
 hshowerhistcell.cc:598
 hshowerhistcell.cc:599
 hshowerhistcell.cc:600
 hshowerhistcell.cc:601
 hshowerhistcell.cc:602
 hshowerhistcell.cc:603
 hshowerhistcell.cc:604
 hshowerhistcell.cc:605
 hshowerhistcell.cc:606
 hshowerhistcell.cc:607
 hshowerhistcell.cc:608
 hshowerhistcell.cc:609
 hshowerhistcell.cc:610
 hshowerhistcell.cc:611
 hshowerhistcell.cc:612
 hshowerhistcell.cc:613
 hshowerhistcell.cc:614
 hshowerhistcell.cc:615
 hshowerhistcell.cc:616
 hshowerhistcell.cc:617
 hshowerhistcell.cc:618
 hshowerhistcell.cc:619
 hshowerhistcell.cc:620
 hshowerhistcell.cc:621
 hshowerhistcell.cc:622
 hshowerhistcell.cc:623
 hshowerhistcell.cc:624
 hshowerhistcell.cc:625
 hshowerhistcell.cc:626
 hshowerhistcell.cc:627
 hshowerhistcell.cc:628
 hshowerhistcell.cc:629
 hshowerhistcell.cc:630
 hshowerhistcell.cc:631
 hshowerhistcell.cc:632
 hshowerhistcell.cc:633
 hshowerhistcell.cc:634
 hshowerhistcell.cc:635
 hshowerhistcell.cc:636
 hshowerhistcell.cc:637
 hshowerhistcell.cc:638
 hshowerhistcell.cc:639
 hshowerhistcell.cc:640
 hshowerhistcell.cc:641
 hshowerhistcell.cc:642
 hshowerhistcell.cc:643
 hshowerhistcell.cc:644
 hshowerhistcell.cc:645
 hshowerhistcell.cc:646
 hshowerhistcell.cc:647
 hshowerhistcell.cc:648
 hshowerhistcell.cc:649
 hshowerhistcell.cc:650
 hshowerhistcell.cc:651
 hshowerhistcell.cc:652
 hshowerhistcell.cc:653
 hshowerhistcell.cc:654
 hshowerhistcell.cc:655
 hshowerhistcell.cc:656
 hshowerhistcell.cc:657
 hshowerhistcell.cc:658
 hshowerhistcell.cc:659
 hshowerhistcell.cc:660
 hshowerhistcell.cc:661
 hshowerhistcell.cc:662
 hshowerhistcell.cc:663
 hshowerhistcell.cc:664
 hshowerhistcell.cc:665
 hshowerhistcell.cc:666
 hshowerhistcell.cc:667
 hshowerhistcell.cc:668
 hshowerhistcell.cc:669