// @(#)$Id: hshowercheckIPU.h,v 1.5 2009-07-15 11:34:11 halo Exp $
//*-- Author : Jerzy Pietraszko & Marcin Jaskula 02/11/2002

#ifndef HSHOWERCHECKIPU_H
#define HSHOWERCHECKIPU_H

////////////////////////////////////////////////////////////////////////////////
//                                                                            //
// HShowerCheckIPU                                                            //
//                                                                            //
// Compare the results of the software IPU emulation with the data from MU    //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

#include "hreconstructor.h"
#include "TString.h"

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

class HIterator;
class TH1;
class TFile;
class HQAMaker;

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

// structure for storing positions of the hits
class HShowerHitIPUAddres
{
public:
                 HShowerHitIPUAddres(Char_t s = 0, Char_t x = 0, Char_t y = 0)
                                    : cS(s), cX(x), cY(y), bMask(kFALSE) {}

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

    void         set(Char_t s = 0, Char_t x = 0, Char_t y = 0)
                                    { cS = s; cX = x; cY = y; bMask = kFALSE;  }

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

    void         print(void) const          { printf("%s\n", toString());      }
    inline const Char_t*  toString(void) const;

    void         mask(void)                 { bMask = kTRUE;                   }
    Bool_t       isMasked(void)             { return bMask;                    }
    void         clearMask(void)            { bMask = kFALSE;                  }

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

    Char_t  cS;     // sector
    Char_t  cX;     // column
    Char_t  cY;     // row
    Bool_t  bMask;  // mask
};

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

inline const Char_t*  HShowerHitIPUAddres::toString(void) const
{
static Char_t s[100];

    sprintf(s, "%s S: %d  X: %2d  Y: %2d", (bMask) ? "M" : " ", cS, cX, cY);

    return s;
}

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

inline Bool_t operator==(const HShowerHitIPUAddres &l,
                    const HShowerHitIPUAddres &r)
{
    return ((l.cS == r.cS) && (l.cX == r.cX) && (l.cY == r.cY)
                && (l.bMask == r.bMask));
}

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

class HShowerCheckIPU : public HReconstructor
{
public:
                        HShowerCheckIPU(Int_t iRatio = 100,
                                    const Char_t *pOut = "");
                        HShowerCheckIPU(const Text_t name[],const Text_t title[],
                                    Int_t iRatio = 100, const Char_t *pOut = "");

                       ~HShowerCheckIPU(void);

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

    virtual Bool_t      init(void);
    virtual Int_t       execute(void);
    virtual Bool_t      finalize(void);

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

    void                setInfoRate(Int_t iRate)        { iInfoRatio = iRate;  }
    Int_t               getInfoRate(void) const         { return iInfoRatio;   }

    void                setVerbose(Int_t i)             { iVerbose = i;        }
    Int_t               getVerbose(void) const          { return iVerbose;     }

    void                setOutputFile(const Char_t *pName)
                                                  { sOutputFile = pName;       }
    const Char_t*         getOutputFile(void) const
                                                  { return sOutputFile.Data(); }

    void                setHistEvents(Int_t i)          { iHistEvents = i;     }
    Int_t               getHistEvents(void) const       { return iHistEvents;  }

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

    Int_t               getEvents(void) const           { return iEvents;      }
    Int_t               getErrors(void) const           { return iErrors;      }

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

    inline const TH1*   getHist(UInt_t i) const;
    const TH1*          getHistCorrX(void) const
                                            { return getHist(kHistCorrX);      }
    const TH1*          getHistCorrY(void) const
                                            { return getHist(kHistCorrY);      }
    const TH1*          getHistNoCorrAna(void) const
                                            { return getHist(kHistNoCorrAna);  }
    const TH1*          getHistNoCorrIPU(void) const
                                            { return getHist(kHistNoCorrIPU);  }
    const TH1*          getHistDoubleAna(void) const
                                            { return getHist(kHistDoubleAna);  }
    const TH1*          getHistDoubleIPU(void) const
                                            { return getHist(kHistDoubleIPU);  }

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

    Bool_t              writeHistograms(void);

    void                dumpEvent(void) const;
    void                writeInfo(void) const;

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

    void                setQA(HQAMaker *p)     { pQA = p;                 }
    HQAMaker*           getQA(void) const      { return pQA;              }

    Bool_t              putHistograms(TList *pList);

protected:

    enum {
        kHistCorrX = 0,
        kHistCorrY,
        kHistCorr,
        kHistNoCorrAna,
        kHistNoCorrIPU,
        kHistNoCorrXY,
        kHistDoubleAna,
        kHistDoubleIPU,
        kHistIPUInEvent,
        kHistAnaInEvent,
        kHistErrorInEvent,
        kHistMax,

        kMaxAna = 6000,
        kMaxIPU = 6000
    };

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

    HIterator          *pitAna;
    HIterator          *pitIPU;

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

    HShowerHitIPUAddres asAna[kMaxAna];
    HShowerHitIPUAddres asIPU[kMaxIPU];

    Int_t               iAnaNum;
    Int_t               iIPUNum;

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

    TH1                *ahOut[kHistMax];
    TString             sOutputFile;

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

    Int_t               iInfoRatio;
    Int_t               iVerbose;

    Int_t               iEvents;
    Int_t               iErrors;

    Bool_t              bInitOk;

    Int_t               iHistEvents;

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

    HQAMaker            *pQA;

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

    void                setDefault(Int_t iRatio, const Char_t *pOut);
    void                checkDoubles(void);
    Int_t               checkDoubles(HShowerHitIPUAddres *pArr,
                                        Int_t iMax, Int_t iType);
    void                matchHits(void);

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

    ClassDef(HShowerCheckIPU, 0)  // Check shower IPU with the software data
};

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

inline const TH1* HShowerCheckIPU::getHist(UInt_t i) const
{
// Return histogram by its name

    if(i >= kHistMax)
    {
        Error("getHist", "Out of bounds: %d / %d\n", i, kHistMax);
        return NULL;
    }

    return ahOut[i];
}

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

#undef DEFAULT_OPTIONS

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

#endif //HSHOWERCHECKIPU_H

Last change: Sat May 22 13:13:20 2010
Last generated: 2010-05-22 13:13

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.