109 auto const preStepPoint = aStep->GetPreStepPoint();
110 auto const track = aStep->GetTrack();
112 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
114 G4ThreeVector localPoint = G4ThreeVector(hitPoint.x(), hitPoint.y(),
zv);
116 double pin = (preStepPoint->GetTotalEnergy()) /
CLHEP::GeV;
117 double zint = hitPoint.z();
121 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam: getHits " <<
track->GetDefinition()->GetParticleName()
122 <<
" of energy " << pin <<
" GeV Pos x,y,z = " << hitPoint.x() <<
"," << hitPoint.y()
123 <<
"," << zint <<
" (" << zz <<
"," << localPoint.z() <<
", "
124 << (localPoint.z() + 0.5 *
gpar_[1]) <<
") Local " << localPoint;
126 std::vector<HFShowerParam::Hit> hits;
132 double pBeta =
track->GetDynamicParticle()->GetTotalMomentum() /
track->GetDynamicParticle()->GetTotalEnergy();
133 double dirz = (
track->GetDynamicParticle()->GetMomentumDirection()).
z();
134 if (hitPoint.z() < 0)
138 <<
track->GetDynamicParticle()->GetMomentumDirection() <<
" HitPoint " << hitPoint
141 if (!isEM &&
track->GetDefinition()->GetPDGCharge() != 0 && pBeta > (1 /
ref_index_) &&
142 aStep->GetTotalEnergyDeposit() > 0.) {
154 edep = (aStep->GetTotalEnergyDeposit()) /
GeV;
158 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam: getHits edep = " << edep <<
" weight " <<
weight <<
" final "
159 << edep *
weight <<
", Kill = " << isKilled <<
", pin = " << pin
160 <<
", edMin = " <<
edMin_ <<
" Other " << other;
167 for (
unsigned int i = 0;
i < hitSL.size();
i++) {
179 hit.
depth = hitSL[
i].depth;
180 hit.
time = hitSL[
i].time;
189 double zp = hit.
position.z() / CLHEP::cm;
190 if (hit.
depth == 1) {
194 }
else if (hit.
depth == 2) {
203 <<
"HFShowerParam: Hit at depth " << hit.
depth <<
" with edep " << hit.
edep <<
" Time " << hit.
time;
208 std::vector<HFGflash::Hit> hitSL =
gflash_->gfParameterization(aStep,
onlyLong_);
209 for (
unsigned int i = 0;
i < hitSL.size(); ++
i) {
211 G4ThreeVector pe_effect(hitSL[
i].
position.x(), hitSL[
i].position.y(), hitSL[
i].position.z());
216 if (zv < 0. || zv >
gpar_[1]) {
218 edm::LogVerbatim(
"HFShower") <<
"-#Zcut-HFShowerParam::getHits:z=" << zv <<
",m=" << gpar_[1];
225 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam::getHits:#PMT= " << npmt <<
",z = " <<
zv;
229 edm::LogVerbatim(
"HFShower") <<
"-#PMT=0 cut-HFShowerParam::getHits: npmt = " << npmt;
232 }
else if (npmt > 24) {
237 edm::LogVerbatim(
"HFShower") <<
"-SHORT cut-HFShowerParam::getHits:zMin=" << gpar_[0];
244 <<
"HFShowerParam: npmt " << npmt <<
" zv " <<
std::abs(pe_effect.z()) <<
":" << gpar_[4] <<
":" << zv
245 <<
":" << gpar_[0] <<
" ok " << ok <<
" depth " << depth;
248 if (G4UniformRand() > 0.5)
250 if (depth == 2 && zv < gpar_[0])
254 double dist =
fibre_->zShift(localPoint, depth, 0);
255 double r1 = G4UniformRand();
257 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam:Distance to PMT (" << npmt <<
") " << dist
263 double r2 = G4UniformRand();
266 <<
"HFShowerParam:Extra exclusion " << r2 <<
">" <<
weight <<
" " << (r2 >
weight);
270 : (
fibre_->tShift(localPoint, depth, 0));
274 hit.
time = time + hitSL[
i].time;
282 double zp = hit.
position.z() / CLHEP::cm;
283 if (hit.
depth == 1) {
287 }
else if (hit.
depth == 2) {
296 <<
"HFShowerParam: Hit at depth " << hit.
depth <<
" with edep " << hit.
edep <<
" Time " << hit.
time;
305 double tSlice = (aStep->GetPostStepPoint()->GetGlobalTime());
307 : (
fibre_->tShift(localPoint, 1, 0));
315 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam: getHits hitPoint " << hitPoint <<
" flag " <<
ok;
319 hit.
time = tSlice + time;
323 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam: Hit at depth 1 with edep " << edep <<
" Time " << tSlice
324 <<
":" << time <<
":" << hit.
time;
327 double zv =
std::abs(hitPoint.z()) - gpar_[4];
332 if (zz >= gpar_[0]) {
335 hit.
time = tSlice + time;
338 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam: Hit at depth 2 with edep " << edep <<
" Time " << tSlice
339 <<
":" << time << hit.
time;
350 for (
unsigned int ii = 0;
ii < hits.size(); ++
ii) {
353 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam: Abnormal hit along " << path <<
" in "
354 << preStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetName() <<
" at "
355 << hits[
ii].position <<
" zz " << zv <<
" Edep " << edep <<
" due to "
356 <<
track->GetDefinition()->GetParticleName() <<
" time " << hit.
time;
358 edm::LogVerbatim(
"HFShower") <<
"HFShowerParam: getHits kill (" << isKilled <<
") track " <<
track->GetTrackID()
359 <<
" at " << hitPoint <<
" and deposit " << edep <<
" " << hits.size() <<
" times"
360 <<
" ZZ " << zz <<
" " << gpar_[0];
std::unique_ptr< HFGflash > gflash_
Log< level::Info, true > LogVerbatim
Exp< T >::type exp(const T &t)
std::vector< double > gpar_
Abs< T >::type abs(const T &t)
std::unique_ptr< HFFibre > fibre_
int PMTNumber(const G4ThreeVector &pe_effect)
std::unique_ptr< HFShowerLibrary > showerLibrary_
static int position[264][3]
static bool isGammaElectronPositron(int pdgCode)
Power< A, B >::type pow(const A &a, const B &b)