#ifndef HMDCLOOKUPTB_H
#define HMDCLOOKUPTB_H
#include "TObject.h"
#include "hparset.h"
#include "hmdcgeomobj.h"
#include "hlocation.h"
#include <stdlib.h>
class TH2C;
class TObjArray;
class HCategory;
class HMdcGeomPar;
class HMdcDetector;
class HMdcGetContainers;
class HMdcLayerGeomPar;
class HMdcSizesCells;
class HMdcSizesCellsSec;
class HSpecGeomPar;
class HMdcClus;
class HMdcCluster;
class HMdcClustersArrs;
class HMdcList12GroupCells;
class HMdcClFnStack;
class HMdcClFnStacksArr;
class HMdcSecListCells;
class HMdcLookUpTbCell: public TObject {
protected:
Short_t nLines;
Short_t line;
Short_t yBinMin;
Short_t yBinMax;
Short_t *xBinMin;
Short_t *xBinMax;
public:
HMdcLookUpTbCell(void);
~HMdcLookUpTbCell(void);
void clear(void) {line=0;}
void init(Int_t yBinMinT, Int_t yBinMaxT);
Bool_t addLine(Short_t nc1, Short_t nc2);
Short_t getNLines(void) const {return line;}
Short_t getYBinMin(void) const {return yBinMin;}
Short_t getYBinMax(void) const {return yBinMax;}
Short_t getXBinMin(Short_t yb) const {return xBinMin[yb];}
Short_t getXBinMax(Short_t yb) const {return xBinMax[yb];}
ClassDef(HMdcLookUpTbCell,0)
};
class HMdcLookUpTbLayer: public TObject {
protected:
HMdcLookUpTbCell* array;
Int_t nCells;
public:
HMdcLookUpTbLayer(Int_t sec, Int_t mod, Int_t layer);
~HMdcLookUpTbLayer(void);
HMdcLookUpTbCell& operator[](Int_t i) {return array[i];}
Int_t getSize(void);
ClassDef(HMdcLookUpTbLayer,0)
};
class HMdcLookUpTbMod : public TObject {
protected:
TObjArray* array;
Int_t nLayers;
public:
HMdcLookUpTbMod(Int_t sec, Int_t mod);
~HMdcLookUpTbMod(void);
HMdcLookUpTbLayer& operator[](Int_t i) {
return *static_cast<HMdcLookUpTbLayer*>((*array)[i]);
}
Int_t getSize(void);
void setNLayers(Int_t nl) {nLayers=nl;}
Int_t getNLayers(void) {return nLayers;}
ClassDef(HMdcLookUpTbMod,0)
};
class HMdcLookUpTbSec : public TObject {
protected:
Int_t sector;
Int_t segment;
Int_t nSegments;
Int_t nModules;
Bool_t isCoilOff;
Int_t nBinX;
Double_t xLow;
Double_t xUp;
Double_t xStep;
Int_t nBinY;
Double_t yLow;
Double_t yUp;
Double_t yStep;
Float_t xFirstBin;
Float_t yFirstBin;
Double_t* xBinsPos;
Double_t* yBinsPos;
Int_t size;
static UChar_t* hPlMod[4];
static Int_t hPlModsSize;
Int_t sizeBAr;
static Int_t sizeBArSt;
static UChar_t* plotBArSc;
Int_t maxBinBAr4Sc;
Int_t minBinBAr4Sc;
static UChar_t* plotBArM[4];
Int_t maxBinBAr4M[4];
Int_t minBinBAr4M[4];
Int_t* xMin[4];
Int_t* xMax[4];
Bool_t mergeFlag;
HMdcClFnStack* stack;
HMdcClFnStacksArr* stacksArr;
TObjArray* array;
HCategory* fClusCat;
HLocation locClus;
Int_t counter[2];
Bool_t isGeant;
Bool_t fillTrackList;
Bool_t noFiredCells;
Int_t maxAmp[4];
HMdcSecListCells* pListCells;
Int_t minAmp[4];
Int_t nMods;
Int_t typeClFinder;
Int_t neighbBins[8];
HMdcPlane prPlane;
Float_t target[3];
Float_t eTarg[3];
HGeomVector targVc[3];
Int_t nClusters;
TH2C* hist;
Int_t plBining;
HMdcClustersArrs* pClustersArrs;
Int_t nModSeg[2];
Int_t clusArrSize;
HMdcCluster* clusArr;
Int_t nClsArr;
static Short_t* clusIndM1;
static Int_t clIndArrSzM1;
HMdcCluster* clusArrM1;
Int_t nClsArrM1;
static Short_t* clusIndM2;
static Int_t clIndArrSzM2;
HMdcCluster* clusArrM2;
Int_t nClsArrM2;
Int_t clusArrInd;
HMdcCluster* cClusArr;
Int_t* cNClusArr;
Int_t cSeg;
Int_t cMod1;
Int_t cMod2;
UChar_t* cPlModF;
UChar_t* cPlModS;
Int_t cMod;
UChar_t* cPlMod;
Short_t* clusInd;
HMdcLookUpTbMod* cFMod;
UChar_t* cHPlModM;
HMdcCluster* clus;
Bool_t isClstrInited;
Int_t* cXMinM;
Int_t* cXMaxM;
Int_t* pXMinM;
Int_t* pXMaxM;
UChar_t* cPlotBAr;
Int_t nLMaxCl;
Int_t nLMinCl;
Short_t* xMaxCl;
Short_t* xMinCl;
HMdcClus* fClus;
Int_t nFirstClust;
Bool_t isSlotAv[2];
Int_t layerOrder[6];
public:
HMdcLookUpTbMod& operator[](Int_t i) {
return *static_cast<HMdcLookUpTbMod*>((*array)[i]);
}
Int_t getSize(void);
Int_t getNClusters(void) const {return nClusters;}
Int_t getMaxClus(Int_t m=-1) const;
Int_t getNBinX(void) const {return nBinX;}
Double_t getXlow(void) const {return xLow;}
Double_t getXup(void) const {return xUp;}
Int_t getNBinY(void) const {return nBinY;}
Double_t getYlow(void) const {return yLow;}
Double_t getYup(void) const {return yUp;}
void clearwk(void);
Int_t findClusters(Int_t* imax);
void setParPlane(const HMdcPlane &plane) {prPlane.setPlanePar(plane);}
void setTargetF(const HGeomVector& vec) {targVc[0]=vec;}
void setTargetL(const HGeomVector& vec) {targVc[1]=vec;}
HMdcPlane& getPrPlane(void) {return prPlane;}
const HGeomVector& getTargetF(void) {return targVc[0];}
const HGeomVector& getTargetL(void) {return targVc[1];}
TH2C* fillTH2C(const Char_t* name,const Char_t* title, Int_t type=0,Int_t bining=2);
void setTypeClFinder(Int_t type) {typeClFinder=type;}
Int_t getTypeClFinder(void) {return typeClFinder;}
Int_t xBinNum(Double_t x) {return Int_t((x-xLow)/xStep);}
Int_t yBinNum(Double_t y) {return Int_t((y-yLow)/yStep);}
Int_t xBinNumInBounds(Double_t x);
Int_t yBinNumInBounds(Double_t y);
Bool_t calcXYBounds(Double_t& xL,Double_t& xU,Double_t& yL,Double_t& yU);
void setPrPlotSize(Double_t xL,Double_t xU,Double_t yL,Double_t yU);
void donotMergeClusters(void) {mergeFlag=kFALSE;}
HMdcLookUpTbSec(Int_t sec, Int_t nSegs, Int_t inBinX, Int_t inBinY);
void setClusCat(HCategory* cat) {fClusCat = cat;}
void setStack(HMdcClFnStack* st) {stack = st;}
void setStacksArr(HMdcClFnStacksArr* sA) {stacksArr = sA;}
void setCoilFlag(Bool_t flg) {isCoilOff = flg;}
void calcTarget(HMdcSizesCellsSec& fSCSec,Double_t* targLenInc);
Bool_t calcLookUpTb(void);
void doNotFillTrackList(void) {fillTrackList = kFALSE;}
protected:
HMdcLookUpTbSec(void) {}
~HMdcLookUpTbSec(void);
Bool_t fillLookUpTb(Int_t m, Int_t l,HMdcTrapPlane& cellPr,
HMdcLookUpTbCell& fCell);
void clearPrArrs(void);
void clearPrMod(Int_t mod);
void fillClusCat(Int_t mod, Int_t segp, Int_t tpClFndr);
void findClusInSeg(Int_t seg);
void findClusInSec(void);
void findClusInMod(Int_t mod);
Int_t getClusterSlot(Int_t seg, HMdcList12GroupCells& list);
void fillModWiresList(Int_t mod, HMdcList12GroupCells& list);
Bool_t fillModCluster(Int_t mod);
Bool_t fillSegCluster(void);
Bool_t fillSecCluster(void);
void makeModPlot(Int_t mod);
void makeSPlot(void);
void makeLayProjV1(Int_t mod,Int_t layer);
void makeLayProjV1b(Int_t mod,Int_t layer);
void makeLayProjV2(Int_t mod,Int_t layer);
void findClusInSeg1(void);
void mergeClusInMod(Int_t mod);
void mergeClusMod1to2(void);
void mergeClusInSeg(void);
void mergeClusInSec(void);
void testClusMod12toSeg(void);
void scanPlotInMod(Int_t mod);
Bool_t calcMixedClusterFixedLevel(Int_t nBin);
Bool_t calcMixedClusterFloatLevel(Int_t nBin);
void scanPlotInSeg1(Int_t seg, UChar_t* plotBAr);
Bool_t calcClusterInSecFixedLevel(Int_t nBin);
Bool_t calcClusterInSecFloatLevel(Int_t nBin);
Bool_t calcClusterInSegFixedLevel(Int_t nBin);
Bool_t calcClusterInSegFloatLevel(Int_t nBin);
Bool_t calcClusterInSeg1FixedLevel(Int_t nBin);
Bool_t calcClusterInSeg1FloatLevel(Int_t nBin);
void testSeg1ModClMatching(void);
Bool_t calcClusterInModFixedLevel(Int_t nBin);
Bool_t calcClusterInModFloatLevel(Int_t nBin);
void calcClParam(void);
void initCluster(Int_t nBin);
void reinitCluster(Int_t nBin);
void initCluster(Int_t nBin,Int_t amp);
void reinitCluster(Int_t nBin,Int_t amp);
void addBinInCluster(Int_t nBin,UChar_t wt);
void initClusterT2(Int_t nBin,Int_t amp);
void reinitClusterT2(Int_t nBin,Int_t amp);
void addBinInClusterT2(Int_t nBin,UChar_t wt);
Bool_t increaseClusterNum(void);
inline void setCurrentArraySec(void);
inline void setCurrentArrayMod1(void);
inline void setCurrentArrayMod2(void);
ClassDef(HMdcLookUpTbSec,0)
};
inline void HMdcLookUpTbSec::setCurrentArraySec(void) {
cClusArr = clusArr;
cNClusArr = &nClsArr;
clusArrInd = 0;
}
inline void HMdcLookUpTbSec::setCurrentArrayMod1(void) {
cClusArr = clusArrM1;
cNClusArr = &nClsArrM1;
clusArrInd = 1;
}
inline void HMdcLookUpTbSec::setCurrentArrayMod2(void) {
cClusArr = clusArrM2;
cNClusArr = &nClsArrM2;
clusArrInd = 2;
}
class HMdcLookUpTb : public HParSet {
protected:
static HMdcLookUpTb* fMdcLookUpTb;
TObjArray* array;
Int_t nBinX;
Int_t nBinY;
Bool_t isCoilOff;
HMdcGetContainers* fGetCont;
HMdcSizesCells* fSizesCells;
HMdcGeomPar* fMdcGeomPar;
HMdcDetector* fMdcDet;
HSpecGeomPar* fSpecGeomPar;
HMdcLayerGeomPar* fLayerGeomPar;
HCategory* fMdcClusCat;
Double_t targLenInc[2];
Bool_t quietMode;
HMdcClFnStack* stack;
HMdcClFnStacksArr* stacksArr;
static Bool_t useFixedLevel;
Bool_t mergeFlag;
public:
static HMdcLookUpTb* getExObject(void) {return fMdcLookUpTb;}
static HMdcLookUpTb* getObject(void);
static void deleteCont(void);
static void setUseFixedLevel(void) {useFixedLevel=kTRUE ;}
static void setUseFloatLevel(void) {useFixedLevel=kFALSE;}
static Bool_t getUseFixedLevelFlag(void) {return useFixedLevel;}
HMdcLookUpTbSec& operator[](Int_t i) {
return *static_cast<HMdcLookUpTbSec*>((*array)[i]);
}
Int_t getSize(void);
Bool_t init(HParIo* input,Int_t* set) {return kTRUE;}
virtual Bool_t initContainer(void);
void clear(void);
Int_t findClusters(Int_t *imax);
void setTargLenInc(Double_t lf,Double_t rt);
void setTypeClFinder(Int_t type);
void setPar(Int_t inBinX, Bool_t isCOff,Int_t inBinY=0);
void setQuietMode(Bool_t md=kTRUE) {quietMode=md;}
void donotFillTrackList(void);
void donotMergeClusters(void) {mergeFlag=kFALSE;}
protected:
HMdcLookUpTb(const Char_t* name="MdcLookUpTb",
const Char_t* title="Look Up Table for Dubna track finding",
const Char_t* context="");
~HMdcLookUpTb(void);
virtual Bool_t calcPrPlane(Int_t sec);
virtual Bool_t calcPlotSize(Int_t sec);
Bool_t calcTarget(Int_t sec);
ClassDef(HMdcLookUpTb,0)
};
#endif /*!HMDCLOOKUPTB_H*/
Last change: Sat May 22 13:02:42 2010
Last generated: 2010-05-22 13:02
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.