8 const TVector3& globalMom)
13 TGeoNode* envelopeNode = gGeoManager->GetCurrentNode();
17 auto* box =
dynamic_cast<TGeoBBox*
>(envelopeNode->GetVolume()->GetShape());
21 double gpos[3] = {globalPos.X(), globalPos.Y(), globalPos.Z()};
22 double gdir[3] = {globalMom.X(), globalMom.Y(), globalMom.Z()};
23 double lpos[3], ldir[3];
25 gGeoManager->MasterToLocal(gpos, lpos);
26 gGeoManager->MasterToLocalVect(gdir, ldir);
28 TVector3 local(lpos[0], lpos[1], lpos[2]);
29 TVector3 direc(ldir[0], ldir[1], ldir[2]);
36 } checks[] = {{
BoxFace::Xplus, local.X() - box->GetDX(), TVector3(1, 0, 0)},
43 const double eps = 1e-3;
44 for (
const auto& check : checks) {
45 if (std::abs(check.coord) < eps) {
46 double dot = direc.Dot(check.normal);
48 return {check.face,
d};