Skip to content

True particles from neutrino interactions often have exactly the same start and end positions #590

@sungbinoh

Description

@sungbinoh

True particles from neutrino interactions sometime have exactly the same start and end positions.
For a detailed presentation, please have a look to SBN-doc-43942.

It is an issue for analyses using true particles (coming from G4Particles) position information such as start and end to define signal with containment requirements.

Main source of this bug is happening when the simb::MCParticle has only two indices in its simb::MCTrajectory.
In void FillTrueG4Particle of sbncode/CAFMaker/FillTrue.cxx,

        if (!active_volumes.at(cryostat_index).ContainsPosition(this_point) && active_volumes.at(cryostat_index).ContainsPosition(pos)) {
          exit_point = i-1;
        }

or

    if (exit_point < 0 && entry_point >= 0) {
      exit_point = particle.NumberTrajectoryPoints() - 1;
    }
    if (exit_point >= 0 && ((unsigned)exit_point) < particle.NumberTrajectoryPoints() - 1) {
      srparticle.wallout = sbn::GetWallCross(active_volumes.at(cryostat_index), particle.Position(exit_point).Vect(), particle.Position(exit_point+1).Vect());
    }

This logic has an issue of having exit_point == entry_point when particle.NumberTrajectoryPoints() == 2, first position is within the active volume and the second position is outside of the active volume.

To fix this, I will add an additional if condition to the second code block as

    if (exit_point < 0 && entry_point >= 0) {
      exit_point = particle.NumberTrajectoryPoints() - 1;
    }
    if (exit_point >= 0 && entry_point >=0 && exit_point == entry_point && exit_point < static_cast<int>(particle.NumberTrajectoryPoints()) - 1){
      exit_point++; // to avoid exactly the same start and end positions when single index is inside the active volumne
    }
    if (exit_point >= 0 && ((unsigned)exit_point) < particle.NumberTrajectoryPoints() - 1) {
      srparticle.wallout = sbn::GetWallCross(active_volumes.at(cryostat_index), particle.Position(exit_point).Vect(), particle.Position(exit_point+1).Vect());
    }

into the sbncode for both release/SBN2025A and develop branches.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions