Problem in G4SDParticleWithEnergyFilter

Hi, Im Sangbin from Korea. I faced a problem in set filter (particle and incident kinetic energy of particle filtering) to my sensitive detector.

Here is the code.

G4SDManager* pSDman = G4SDManager::GetSDMpointer();
G4String phantomSDname = “PhantomSD”;
G4VPrimitiveScorer* primitive;

// MultiFunctional detector
G4MultiFunctionalDetector* MFDet = new G4MultiFunctionalDetector(phantomSDname);
pSDman->AddNewDetector( MFDet );
G4SDManager::GetSDMpointer()->SetVerboseLevel(1);
// primitive and filtering
for (int i=0; i<87; i++){
primitive = new TETPSCellFlux(fluxmapname[i], tetData);
// G4cout << fluxmapname[i] <<G4endl;
if (i==0){
gammaneutronfilter->add(“gamma”);
gammaneutronfilter->add(“neutron”);
gammaneutronfilter->SetKineticEnergy(Energylist_det[0], Energylist_det[43]);
primitive->SetFilter(gammaneutronfilter);
MFDet->RegisterPrimitive(primitive);
gammaneutronfilter->show();
}
else if (1 <= i && i < 44){
// else if (1 <= i && i < 21){
gammafilter->add(“gamma”);
gammafilter->SetKineticEnergy(Energylist_det[i-1], Energylist_det[i]);
// gammafilter->SetKineticEnergy(Energylist_det[0], Energylist_det[43]);
// gammafilter->SetKineticEnergy(Energylist_det[i-1], Energylist_det[i]);
primitive->SetFilter(gammafilter);
MFDet->RegisterPrimitive(primitive);
gammafilter->show();
// primitive->PrintAll();
}
else if (44 <= i && i<87) {
neutronfilter->add(“neutron”);
neutronfilter->SetKineticEnergy(Energylist_det[i-43-1], Energylist_det[i-43]);
// neutronfilter->SetKineticEnergy(Energylist_det[0], Energylist_det[43]);
primitive->SetFilter(neutronfilter);
MFDet->RegisterPrimitive(primitive);
neutronfilter->show();
// primitive->PrintAll();
}
}
SetSensitiveDetector(tetLogic, MFDet);

And the Energylist_det array is this.
G4double Energylist_det[44] = {0.0MeV,1.00E-09MeV,1.00E-08MeV,2.50E-08MeV,1.00E-07MeV,2.00E-07MeV,5.00E-07MeV,1.00E-06MeV,2.00E-06MeV,5.00E-06MeV,
1.00E-05MeV,2.00E-05MeV,5.00E-05MeV,1.00E-04MeV,2.00E-04MeV,5.00E-04MeV,1.00E-03MeV,2.00E-03MeV,5.00E-03MeV,
1.00E-02
MeV,2.00E-02MeV,3.00E-02MeV,5.00E-02MeV,7.00E-02MeV,1.00E-01MeV,1.50E-01MeV,2.00E-01MeV,3.00E-01MeV,
5.00E-01MeV,7.00E-01MeV,9.00E-01MeV,1.00E+00MeV,1.20E+00MeV,1.50E+00MeV,2.00E+00MeV,3.00E+00MeV,4.00E+00MeV,
5.00E+00
MeV,6.00E+00MeV,7.00E+00MeV,8.00E+00MeV,9.00E+00MeV,1.00E+01MeV,1.20E+01MeV};

there is a problem when I set the discrepancy between elow and ehigh very short range.
if I set the kinetic energy filter (gamma and neutron is added) Energylist_det[0], Energylist_[det][43] (whole range), there is no problem. and I confirmed that the 87 primitives are set as sensitive detector well.
And the summation of outputs from gamma filtered sensitive detector and the neutron filtered sensitive detector are equal with neutron and gamma filtered sensitive detector(both particle is added, (PhantomSD/flux). So I think the problem comes from the energy range. because if I set the energy range of each sensitive detectors (for only gamma filtered ones and neutron filtered ones) more broadly, there was no problem.

What should I do? I need to get a spectral flux of gamma and neutrons. I looked over all source files related to it, I figured out no problem. because kineticfiltering source file is like below.

(if particlekineticenergy < fLowEnergy) return false;
(if particlekineticenergy >= fHighEnergy) return false;

this means when the particle’s kinetic energy is in range [fLowEnergy, fHighEnergy), it accept the particle. How can I handle this problem? I will wait for your advice. Thanks!