38 for (
auto &acceptList : m_acceptLists) {
41 std::ifstream white_list;
42 white_list.open( resolvedFilename );
43 if (!white_list.is_open()){
45 return StatusCode::FAILURE;
51 while (!white_list.eof()){
52 getline( white_list , a_line );
53 long int pdg = strtol( a_line.c_str() , &pEnd , 10 );
54 if (
std::find(m_pdgId.begin(), m_pdgId.end(), pdg) == m_pdgId.end()) {
55 m_pdgId.push_back(pdg);
57 ATH_MSG_DEBUG(
"pdgId " << pdg <<
" already in acceptlist. Will not add it again.");
62 std::sort( m_pdgId.begin() , m_pdgId.end() );
66 return StatusCode::SUCCESS;
76 std::vector<int> vertices(500);
77 bool so_far_so_good = pass(
particle , vertices );
80 const int id_of_particle =
particle->id();
81 if (so_far_so_good &&
particle->production_vertex() && m_qs){
82 for (
auto& pit:
particle->production_vertex()->particles_in()){
84 if ( pit->id() == id_of_particle )
continue;
87 bool parent_all_clear = pass( pit , vertices );
89 "\nIf true, will not pass the daughter because it should have been picked up through the parent already (to avoid multi-counting)." );
90 so_far_so_good = so_far_so_good && !parent_all_clear;
94 return so_far_so_good;
102 std::vector<int> vertices(500);
103 bool so_far_so_good = pass(
particle , vertices );
106 if (so_far_so_good &&
particle.production_vertex() && m_qs){
113 bool parent_all_clear = pass( **
it , vertices );
115 "\nIf true, will not pass the daughter because it should have been picked up through the parent already (to avoid multi-counting)." );
116 so_far_so_good = so_far_so_good && !parent_all_clear;
120 return so_far_so_good;
138 passFilter =
passFilter && ( (m_minDecayRadiusQS <
particle->end_vertex()->position().perp()) || (m_minDecayRadiusQS < particle->production_vertex()->position().perp()) );
141 if (
std::find( used_vertices.begin() , used_vertices.end() ,
particle->end_vertex()->id() )==used_vertices.end() ){
142 used_vertices.push_back(
particle->end_vertex()->id() );
143 for (
auto& pit:
particle->end_vertex()->particles_out()){
153 ATH_MSG_VERBOSE(
"Particle " <<
particle <<
" was produced and decayed within a radius of " << m_minDecayRadiusQS <<
" mm.");
157 ATH_MSG_ERROR(
"Found a particle with no end vertex that does not appear in the accept list." );
158 ATH_MSG_ERROR(
"This is VERY likely pointing to a problem with either the configuration you ");
159 ATH_MSG_ERROR(
"are using, or a bug in the generator. Either way it should be fixed. The");
160 ATH_MSG_ERROR(
"particle will come next, and then we will throw.");
162 throw std::runtime_error(
"GenParticleSimAcceptList: Particle with no end vertex and not in acceptlist");
196 ATH_MSG_VERBOSE(
"Particle " <<
particle <<
" was produced and decayed within a radius of " << m_minDecayRadiusQS <<
" mm.");
200 ATH_MSG_ERROR(
"Found a particle with no end vertex that does not appear in the accept list." );
201 ATH_MSG_ERROR(
"This is VERY likely pointing to a problem with either the configuration you ");
202 ATH_MSG_ERROR(
"are using, or a bug in the generator. Either way it should be fixed. The");
203 ATH_MSG_ERROR(
"particle will come next, and then we will throw.");
205 throw std::runtime_error(
"GenParticleSimAcceptList: Particle with no end vertex and not in acceptlist");
215 return StatusCode::SUCCESS;