13 #include "hlinearcategory.h"
90 Error(
"init",
"No Emc Detector found");
100 Error(
"HEmcDigitizer::init()",
"HGeant EMC input missing");
107 Error(
"HEmcDigitizer::init()",
"No catGeantKine in input!");
117 if(
fCalCat == NULL)
return kFALSE;
122 if (!
fStartHitCat) Warning(
"init",
"Start hit level not defined; setting start time to 0");
130 Error(
"initParContainer",
"No EmcGeomPar parameter container");
135 Error(
"initParContainer",
"No EmcDigiPar parameter container");
140 Error(
"initParContainer",
"No EmcSimulPar parameter container");
156 facEnergSmear[0] = 1000.*TMath::Sqrt(sigmaEReal*sigmaEReal - sigmaEIntern*sigmaEIntern);
157 facEnergSmear[1] = 1000.*TMath::Sqrt(sigmaEReal2*sigmaEReal2 - sigmaEIntern*sigmaEIntern);
166 Float_t startTimeSmearing = 0;
179 Int_t nentr =
fCalCat->getEntries();
180 for(Int_t
n=0;
n<nentr;
n++) {
185 Warning(
"HEmcDigitizer:execute",
"EmcCal cell address invalid: sec=%i cell=%i",sec,cell);
207 Int_t trackNumber = geantemc->
getTrack();
209 Int_t cell = geantemc->
getCell();
211 Warning(
"HEmcDigitizer:execute",
"Emc Geant cell address invalid: sec=%i cell=%i",sec,cell);
214 if(trackNumber <= 0 && trackNumber != -777)
continue;
219 Float_t peHit, xHit, yHit, zHit, tofHit, momHit, trackLength;
220 geantemc->
getHit(peHit, xHit, yHit, zHit, tofHit, momHit, trackLength);
221 if(peHit == 0.)
continue;
224 if(pmtType < 1 || pmtType > 2)
continue;
225 Float_t energyHit = peHit *
phot2Energy[pmtType-1];
235 if(trackNumber == -777) {
236 cdata->
energy += energyHit;
239 if(trackNumber <= 0 || pFirstEmc == NULL)
continue;
245 Bool_t isInTheList = kFALSE;
246 Int_t numInpTrack = pFirstEmc->
getTrack();
251 pFirstEmc->
getHit(peHit, xHit, yHit, zHit, tofHitD, momHit, trackLength);
253 energyHit = peHit * phot2Energy[pmtType-1];
256 for(UInt_t i=0;i<cdata->
ctracks.size();i++) {
258 if (celltr->
gtrack == trackNumber) {
262 if (tofHit < celltr->gtime) celltr->
gtime = tofHit;
272 celltr->
gtime = tofHit;
273 celltr->
gtrack = trackNumber;
274 cdata->
ctracks.push_back(celltr);
281 if (cdata!=NULL && cdata->
energy>0.) {
282 if(cdata->
ctracks.size() == 0)
continue;
288 Warning(
"HEmcDigitizer:execute",
"HEmcCalSim:getSlot(loc) failed!");
296 energy = gRandom->Gaus(cdata->
energy,sigmaE);
318 Float_t energySum = 0.;
320 for(UInt_t k = 0; k < cdata->
ctracks.size(); k++ ) {
333 for(UInt_t k = 0; k < cdata->
ctracks.size() && k<5; k++ ) {
363 Int_t cell = pGeantEmc->
getCell();
379 Float_t peHit,xHit, yHit, zHit, tofHit, momHit, trackLength;
380 gemc->
getHit(peHit, xHit, yHit, zHit, tofHit, momHit, trackLength);
382 firstHitInCell = gemc;
399 if(kine == NULL)
break;
404 return firstHitInCell;
virtual Bool_t addCategory(Cat_t aCat, HCategory *cat, Option_t opt[])=0
struct HEmcDigitizer::celltrack celltrack
static Int_t getPositionFromCell(Int_t cell)
static Int_t getEmbeddingRealTrackId()
Int_t cellObjectsSize(void) const
HEmcSimulPar * fSimulPar
pointer to calibration parameters
Float_t getSigmaEnergy(void) const
Float_t getEnergy(void) const
void getVertex(Float_t &ax, Float_t &ay, Float_t &az)
vector< celltrack * > ctracks
void setSigmaEnergy(Float_t e)
HModGeomPar * getModule(const Int_t, const Int_t)
HEmcCellStatusPar * pStatuspar
Int_t getEmbeddingDebug()
vector< Int_t > inputTracks
void setEnergy(Float_t e)
Float_t getSigmaEReal() const
HRuntimeDb * getRuntimeDb(void)
HEvent *& getCurrentEvent(void)
Int_t getCellStatus(Int_t sec, Int_t cell)
Int_t cellObjectIndex(Int_t s, Int_t c) const
Float_t getSigmaT() const
void setTimeTrack(Int_t tr)
Int_t getPmtType(Int_t sec, Int_t cell)
HSpectrometer * getSetup(void)
HDetector * getDetector(const Char_t *name)
Int_t sectorFromIndex(Int_t ind) const
HGeomTransform labTrans[6]
Float_t getResolution(void) const
Float_t getSigmaEReal2() const
const Cat_t catEmcGeantRaw
Float_t getTime(void) const
HParSet * getContainer(const Text_t *)
void getHit(Float_t &ae, Float_t &ax, Float_t &ay, Float_t &az, Float_t &atof, Float_t &amom, Float_t &alen)
Float_t getPhot2E() const
Float_t getSigmaEIntern() const
Bool_t setParameterContainers(void)
UChar_t getCell(void) const
vector< celldata * > cellobjects
Int_t cellFromIndex(Int_t ind) const
HLinearCategory * fGeantKineCat
HCategory * buildMatrixCategory(const Text_t *, Float_t)
const Int_t emcMaxComponents
HLinkedDataObject * nextEmcHit()
void setTrack(Int_t trackNumber, Float_t energy)
Float_t getPhot2E2() const
virtual HCategory * getCategory(Cat_t aCat)=0
HGeomTransform & getLabTransform()
Int_t getTrack(void) const
ClassImp(HEmcDigitizer) HEmcDigitizer
Char_t getSector(void) const
static HGeantKine * getParent(Int_t track, HLinearCategory *cat=NULL)
void setSigmaTime(Float_t t)
static void getRowCol(const Int_t cell, Char_t &row, Char_t &col)
HGeantEmc * getInputHit(HGeantEmc *pGeantEmc, Int_t &inputTrack) const