#ifndef HEMCDIGITIZER_H
#define HEMCDIGITIZER_H
using namespace std;
#include "hreconstructor.h"
#include "hgeomtransform.h"
#include "hlocation.h"
#include "emcdef.h"
#include <vector>
class HIterator;
class HCategory;
class HLinearCategory;
class HEmcCal;
class HEmcDetector;
class HEmcGeomPar;
class HEmcDigiPar;
class HEmcCellStatusPar;
class HEmcSimulPar;
class HGeantEmc;
class HEmcDigitizer : public HReconstructor {
protected:
typedef struct celltrack {
Float_t gtime;
Int_t gtrack;
Float_t trackEn;
void reset() {
gtime = 10000.;
gtrack = -1;
trackEn = 0;
}
Bool_t static cmpTime(celltrack* a, celltrack* b) {
return (a->gtime < b->gtime);
}
Bool_t static cmpEnergy(celltrack* a, celltrack* b) {
return (a->trackEn > b->trackEn);
}
} celltrack;
typedef struct {
Float_t energy;
Bool_t isEmbeddedReal;
vector<celltrack*> ctracks;
vector<Int_t> inputTracks;
void reset() {
energy = 0.;
isEmbeddedReal = kFALSE;
for (UInt_t i=0;i<ctracks.size();i++) { delete ctracks[i]; }
inputTracks.clear();
ctracks.clear();
}
void sortTime(void) {
std::sort(ctracks.begin(),ctracks.end(),celltrack::cmpTime);
}
void sortEnergy(void) {
std::sort(ctracks.begin(),ctracks.end(),celltrack::cmpEnergy);
}
} celldata;
vector<celldata* > cellobjects;
void clearCellobjects();
Int_t embeddingmode;
HLocation fLoc;
HCategory* fGeantEmcCat;
HLinearCategory* fGeantKineCat;
HCategory* fCalCat;
HCategory* fStartHitCat;
HEmcDetector* fEmcDet;
HEmcGeomPar* fGeomPar;
HEmcDigiPar* fDigiPar;
HEmcCellStatusPar* pStatuspar;
HEmcSimulPar* fSimulPar;
HIterator* iterGeantEmc;
HGeomTransform labTrans[6];
Int_t maxCell;
Float_t sigmaT;
Float_t phot2Energy[3];
Float_t facEnergSmear[3];
Double_t zVertBorder;
Float_t energyDepositCut;
Float_t signalVelocity;
Float_t halfOfCellLength;
public:
HEmcDigitizer(void);
HEmcDigitizer(const Text_t* name,const Text_t* title);
~HEmcDigitizer(void);
Bool_t init(void);
Bool_t reinit(void);
Bool_t finalize(void) {return kTRUE;}
Int_t execute(void);
void setzVertBorder(Double_t vc) {zVertBorder = vc;}
void setEnergyDepositCut(Double_t cut) {energyDepositCut = cut;}
void setSignalVelocity(Double_t v) {signalVelocity = v;}
void setEmbeddingMode(Int_t mode) {embeddingmode = mode;}
Int_t getEmbeddingMode(void) const {return embeddingmode;}
protected:
void initVariables(void);
Bool_t setParameterContainers(void);
Int_t cellObjectsSize(void) const {return 6 * emcMaxComponents;}
Int_t cellObjectIndex(Int_t s,Int_t c) const {return s * emcMaxComponents +c;}
Int_t sectorFromIndex(Int_t ind) const {return ind / emcMaxComponents;}
Int_t cellFromIndex(Int_t ind) const {return ind % emcMaxComponents;}
HGeantEmc* getInputHit(HGeantEmc* pGeantEmc,Int_t &inputTrack) const;
ClassDef(HEmcDigitizer,0)
};
#endif