19#include "BDSPSCellFlux4D.hh"
20#include "BDSHistBinMapper.hh"
23#include <boost/variant.hpp>
31BDSPSCellFlux4D::BDSPSCellFlux4D(
const G4String& name,
33 G4int ni, G4int nj, G4int nk,
34 G4int depi, G4int depj, G4int depk):
35 G4PSCellFlux3D(name,ni,nj,nk,depi,depj,depk),
42BDSPSCellFlux4D::BDSPSCellFlux4D(
const G4String& name,
45 G4int ni, G4int nj, G4int nk,
46 G4int depi, G4int depj, G4int depk):
47 G4PSCellFlux3D(name, unit, ni, nj, nk, depi, depj, depk),
54G4int BDSPSCellFlux4D::GetIndex(G4Step* aStep)
56 const G4VTouchable* touchable = aStep->GetPreStepPoint()->GetTouchable();
58 G4int i = touchable->GetReplicaNumber(fDepthi);
59 G4int j = touchable->GetReplicaNumber(fDepthj);
60 G4int k = touchable->GetReplicaNumber(fDepthk);
63 double energy = aStep->GetPostStepPoint()->GetKineticEnergy();
64 G4int l = boost::apply_visitor([&energy](
auto&& one){
return (
decltype(one)(one))->index(energy);}, mapper->GetEnergyAxis()) + 1;
69 if (i<0 || j<0 || k<0)
71 G4ExceptionDescription ED;
72 ED <<
"GetReplicaNumber is negative" << G4endl
73 <<
"touchable->GetReplicaNumber(fDepthi) returns i,j,k = "
74 << i <<
"," << j <<
"," << k <<
"," << l <<
" for volume "
75 << touchable->GetVolume(fDepthi)->GetName() <<
","
76 << touchable->GetVolume(fDepthj)->GetName() <<
","
77 << touchable->GetVolume(fDepthk)->GetName() <<
"," << G4endl;
78 G4Exception(
"PSRadiationQuantity3D::GetIndex",
"DetPS0006",JustWarning,ED);
81 G4int globalIndex = mapper->GlobalFromIJKLIndex(i, j, k, l);
Mapping from axis indices to 1D index.