25 const std::string &pathToModelParameters,
int intMinEta,
int intMaxEta) {
30 std::unique_ptr<TFile> modelParametersFile (TFile::Open(pathToModelParameters.c_str(),
"READ"));
31 modelParametersFile->cd();
34 std::vector<std::string> parameterModelNames;
35 if (layer == 1 || layer == 5)
36 parameterModelNames = {
"a0",
"a1",
"a2",
"a3"};
37 else if (layer == 2 || layer == 6)
38 parameterModelNames = {
"eta_s",
"phi_s"};
40 for (
auto ¶meterName : parameterModelNames) {
46 TGraph *modelParameterGraph = (TGraph *)gDirectory->Get(
47 Form(
"photons/layer%d/m%d_m%d_%d_%d/%s", layer, intMaxEta, intMinEta,
48 intMinEta, intMaxEta, parameterName.c_str()));
49 if (modelParameterGraph) {
52 modelParameterGraph->GetX(),
53 modelParameterGraph->GetY());
55 std::make_pair(parameterName, linModelInterpol));
57 ATH_MSG_DEBUG(
"[TFCSLateralShapeTuning] Could not find model parameter "
59 << layer <<
" minEta=" << intMinEta
60 <<
" maxEta=" << intMaxEta);
64 modelParametersFile->Close();
89 float maxScaling = 500;
92 const int pdgId = truth->
pdgid();
93 const double charge = HepPDT::ParticleID(pdgId).charge();
98 const double centerZ = hit.
center_z();
100 const float Ekin = truth->
Ekin();
104 ATH_MSG_DEBUG(
"[TFCSLateralShapeTuning] Initializing with pdgId="
105 << pdgId <<
", charge=" <<
charge <<
", Ekin=" << Ekin
106 <<
", caloSample=" << layer);
109 <<
" hit.eta=" << hit.
eta() <<
", hit.phi=" << hit.
phi()
110 <<
", hit.r=" << hit.
r());
113 const double deltaEta = hit.
eta() - centerEta;
116 if (layer == 2 || layer == 6) {
123 std::abs(etaScaleFactor) < maxScaling ? etaScaleFactor : maxScaling;
125 std::abs(phiScaleFactor) < maxScaling ? phiScaleFactor : maxScaling;
127 ATH_MSG_DEBUG(
"[TFCSLateralShapeTuning] Applying 2D eta_s - eta_phi "
128 "scaling model with eta_s="
129 << etaScaleFactor <<
" and phi_s=" << phiScaleFactor);
131 double deltaEtaCorr = etaScaleFactor * deltaEta;
132 double deltaPhiCorr = phiScaleFactor *
deltaPhi;
134 hit.
setEtaPhiZE(centerEta + deltaEtaCorr, centerPhi + deltaPhiCorr, centerZ,
139 else if (layer == 1 || layer == 5) {
149 std::abs(etaScaleFactor) < maxScaling ? etaScaleFactor : maxScaling;
151 ATH_MSG_DEBUG(
"[TFCSLateralShapeTuning] Applying eta_s series expansion "
155 double deltaEtaCorr = etaScaleFactor * deltaEta;
virtual FCSReturnCode simulate_hit(Hit &hit, TFCSSimulationState &simulstate, const TFCSTruthState *truth, const TFCSExtrapolationState *extrapol) override
simulated one hit position with some energy.