Skip to content
Snippets Groups Projects
Commit 6d4e4eb5 authored by Walter Lampl's avatar Walter Lampl
Browse files

Merge branch 'HepMC3FixVertexSmearing_master' into 'master'

Workaround feature in HepMC3::GenVertex::position()

See merge request !56977
parents 9ad8dff4 07ad64da
18 merge requests!59674InDetPerformanceMonitoring with LumiBlock selection,!59383cppcheck in trigger code: Prefer prefix ++/-- operators for non-primitive types.,!58990Draft:Fixing bug in FTF config when running with Reco_tf,!58835DataQualityConfigurations: Modify L1Calo config for web display,!58791DataQualityConfigurations: Modify L1Calo config for web display,!58373Modification of V2.3 processing to work well with all clients,!58289New NVSI calibration,!58286New NVSI calibration,!58106Update NVSI example algorithm,!57937Draft: New nighlty test for trigger with a Run 4 single muon RDO,!57841Edits to ZDC signal processing in preparation for analysis of data from LHCf run,!57590Fixing LAr DT dumper,!57584Draft: LAr DB fixes,!57316ATR-26311 and ATR-25754 moving one dimuon and few egamma chains from dev to phys or MC,!57090ATLASRECTS-7305: fixes for large cluster building,!56977Workaround feature in HepMC3::GenVertex::position(),!56828Draft: [trigEGam] Integration beteween mongroups and TrigEgammaMonitoring,!55609Add Athena TEvent-based file access
......@@ -65,7 +65,7 @@ namespace Simulation
continue;
}
ATH_MSG_VERBOSE("Retrieved Vertex shift of: " << *curShift);
ATH_MSG_VERBOSE("Retrieved Vertex shift of: " << *curShift << " from " << vertexShifter->name());
// As signal process vertex is a pointer, there is some risk
// that the pointer points to a vertex somewhere else in the
......@@ -86,7 +86,14 @@ namespace Simulation
for( ; vtxIt != vtxItEnd; ++vtxIt) {
// quick access:
auto curVtx = (*vtxIt);
#ifdef HEPMC3
// NB Doing this check to explicitly avoid the fallback mechanism in
// HepMC3::GenVertex::position() to return the position of
// another GenVertex in the event if the position isn't set (or is set to zero)!
const HepMC::FourVector &curPos = (curVtx->has_set_position()) ? curVtx->position() : HepMC::FourVector::ZERO_VECTOR();
#else
const HepMC::FourVector &curPos = curVtx->position();
#endif
// get a copy of the current vertex position
CLHEP::HepLorentzVector newPos( curPos.x(), curPos.y(), curPos.z(), curPos.t() );
......
......@@ -81,7 +81,10 @@ StatusCode Simulation::ZeroLifetimePositioner::manipulate(HepMC::GenEvent& ge, b
if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
HepMC::Print::line(nextVtx);
}
const HepMC::FourVector &nextVec = nextVtx->position();
// NB Doing this check to explicitly avoid the fallback mechanism in
// HepMC3::GenVertex::position() to return the position of
// another GenVertex in the event if the position isn't set (or is set to zero)!
const HepMC::FourVector &nextVec = (nextVtx->has_set_position()) ? nextVtx->position() : HepMC::FourVector::ZERO_VECTOR();
const CLHEP::HepLorentzVector nextPos( nextVec.x(), nextVec.y(), nextVec.z(), nextVec.t() );
ATH_MSG_VERBOSE("Current Vertex:");
if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
......@@ -93,7 +96,10 @@ StatusCode Simulation::ZeroLifetimePositioner::manipulate(HepMC::GenEvent& ge, b
if (ATH_UNLIKELY(this->msgLvl (MSG::VERBOSE))) {
HepMC::Print::line(prevVtx);
}
const HepMC::FourVector &prevVec = prevVtx->position();
// NB Doing this check to explicitly avoid the fallback mechanism in
// HepMC3::GenVertex::position() to return the position of
// another GenVertex in the event if the position isn't set (or is set to zero)!
const HepMC::FourVector &prevVec = (prevVtx->has_set_position()) ? prevVtx->position() : HepMC::FourVector::ZERO_VECTOR();
const CLHEP::HepLorentzVector prevPos( prevVec.x(), prevVec.y(), prevVec.z(), prevVec.t() );
CLHEP::HepLorentzVector newPos = 0.5*(prevPos+nextPos);
curVtx->set_position(HepMC::FourVector(newPos.x(),newPos.y(),newPos.z(),newPos.t()));
......
......@@ -267,7 +267,11 @@ void ISF::TruthSvc::recordIncidentToMCTruth( ISF::ITruthIncident& ti, bool passW
// 2) A new GenVertex for the intermediate interaction should be
// added.
#ifdef HEPMC3
auto newVtx = HepMC::newGenVertexPtr( vtx->position(), vtx->status());
// NB Doing this check to explicitly avoid the fallback mechanism in
// HepMC3::GenVertex::position() to return the position of
// another GenVertex in the event if the position isn't set (or is set to zero)!
const HepMC::FourVector &posVec = (vtx->has_set_position()) ? vtx->position() : HepMC::FourVector::ZERO_VECTOR();
auto newVtx = HepMC::newGenVertexPtr( posVec, vtx->status());
HepMC::GenEvent *mcEvent = parentBeforeIncident->parent_event();
auto tmpVtx = newVtx;
mcEvent->add_vertex( newVtx);
......@@ -448,7 +452,14 @@ HepMC::GenVertexPtr ISF::TruthSvc::createGenVertexFromTruthIncident( ISF::ITrut
this->deleteChildVertex(oldVertex);
}
else {
#ifdef HEPMC3
// NB Doing this check to explicitly avoid the fallback mechanism in
// HepMC3::GenVertex::position() to return the position of
// another GenVertex in the event if the position isn't set (or is set to zero)!
const HepMC::FourVector &old_pos = (oldVertex->has_set_position()) ? oldVertex->position() : HepMC::FourVector::ZERO_VECTOR();
#else
const auto& old_pos=oldVertex->position();
#endif
const auto& new_pos=ti.position();
double diffr=std::sqrt(std::pow(new_pos.x()-old_pos.x(),2)+std::pow(new_pos.y()-old_pos.y(),2)+std::pow(new_pos.z()-old_pos.z(),2));
//AV The comparison below is not portable.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment