#ifndef HEMCCLUSTERF_H
#define HEMCCLUSTERF_H
using namespace std;
#include "hreconstructor.h"
#include <iostream>
#include "hlocation.h"
#include "emcdef.h"
class HIterator;
class HCategory;
class HGeomVector;
class HEmcCal;
class HRpcCluster;
class HEmcClusterF : public HReconstructor {
private:
HLocation fLoc;
HCategory* fEmcCalCat;
HCategory* fClusterCat;
HCategory* fRpcCat;
Float_t cellXmod[emcMaxComponents];
Float_t cellYmod[emcMaxComponents];
HGeomVector* emcCellsLab[6][emcMaxComponents];
Float_t thetaEmcLab[6][emcMaxComponents];
Float_t sigmaTheta[6][emcMaxComponents];
Float_t phiEmcLab[6][emcMaxComponents];
Float_t sigmaPhi[6][emcMaxComponents];
Float_t sigmaXYmod;
Float_t energy[emcMaxComponents];
Char_t flagUsed[emcMaxComponents];
HEmcCal* pSecECells[emcMaxComponents];
UChar_t listClustCell[emcMaxComponents];
HEmcCal* pClustCells[emcMaxComponents];
Float_t dThetaSigOffset;
Float_t dThetaScale;
Float_t dTimeOffset;
Float_t dTimeCut;
Float_t dThdPhCut;
Float_t dTimeCutNS;
Float_t cellToCellSpeed;
Float_t distOffset;
Float_t timeCutMin;
Float_t timeCutMax;
Float_t addEnergy;
Float_t energyCut;
Bool_t isSimulation;
public:
HEmcClusterF(void);
HEmcClusterF(const Text_t* name,const Text_t* title);
~HEmcClusterF(void);
Bool_t init(void);
Bool_t reinit(void);
Bool_t finalize(void) {return kTRUE;}
Int_t execute(void);
void setRpcMatchingParDThDPh(Float_t dTPC) {dThdPhCut = dTPC;}
void setRpcMatchingParDTheta(Float_t dTh,Float_t dThs) {dThetaSigOffset = dTh;
dThetaScale = dThs;}
void setRpcMatchingParDTime(Float_t dTO,Float_t dTC) {dTimeOffset = dTO;
dTimeCut = dTC;}
void setRpcMatchParDTimeInNs(Float_t dTO,Float_t dTC) {dTimeOffset = dTO;
dTimeCutNS = dTC;}
void setClFnParamCtoCSpeed(Float_t sp) {cellToCellSpeed = sp;}
void setClFnParamDistOffset(Float_t os) {distOffset = os;}
void setClFnParamDTimeWindow(Float_t min,Float_t max) {timeCutMin = min;
timeCutMax = max;}
void addToCellEnergy(Float_t ae) {addEnergy = ae;}
void setCellEnergyCut(Float_t ct) {energyCut = ct;}
protected:
void initData(void);
HRpcCluster* rpcMatch(HEmcCal* cal,Float_t &qualityDThDPh,Float_t &qualityDTime);
Int_t maxEnergyCell(void) const;
Float_t calcDist(HEmcCal *cal1,HEmcCal *cal2) const;
Int_t getNearbyCell(Int_t cell,Int_t i) const;
static bool cmpEnergy(pair<Int_t,Float_t> p1,pair<Int_t,Float_t> p2) {return p1.second > p2.second;}
public:
ClassDef(HEmcClusterF,0)
};
#endif