71 ATH_MSG_ERROR(
"Could not get background xAOD::EventInfo " << bkgEvent.
name() <<
" from store " << bkgEvent.
store());
72 return StatusCode::FAILURE;
78 ATH_MSG_ERROR(
"Could not get signal xAOD::EventInfo " << signalEvent.
name() <<
" from store " << signalEvent.
store());
79 return StatusCode::FAILURE;
81 ATH_MSG_DEBUG(
"Found signal xAOD::EventInfo " << signalEvent.
name() <<
" in store " << signalEvent.
store());
83 std::vector<std::string> keep_ids;
84#if !defined(XAOD_ANALYSIS)
88 auto outputEvent = std::make_unique<xAOD::EventInfo>();
89 auto outputEventAux = std::make_unique<xAOD::EventAuxInfo>();
90 outputEvent->setStore (outputEventAux.get());
93 *outputEvent = *bkgEvent;
95 outputEvent->clearSubEvents();
98 outputEvent->setEventNumber(signalEvent->eventNumber());
102 if (signalEvent->mcChannelNumber() == 0) {
108 outputEvent->setMCChannelNumber(signalEvent->mcChannelNumber());
112 ATH_MSG_WARNING(
"Signal mcChannelNumber (" << signalEvent->mcChannelNumber()
113 <<
") and provided mcChannelNumber (" <<
m_mcChannelNumber.value() <<
") do not match.");
115 outputEvent->setMCChannelNumber(signalEvent->mcChannelNumber());
118 if (signalEvent->mcEventNumber() == 0) {
119 if (signalEvent->eventNumber() != 0) {
120 ATH_MSG_WARNING(
"Signal mcEventNumber is 0, setting it to match the eventNumber (" << signalEvent->eventNumber() <<
")");
121 outputEvent->setMCEventNumber(signalEvent->eventNumber());
124 return StatusCode::FAILURE;
127 outputEvent->setMCEventNumber(signalEvent->mcEventNumber());
130 if (signalEvent->mcEventWeights().empty()) {
131 ATH_MSG_ERROR(
"Signal mcEventWeights are empty. This should not happen.");
132 return StatusCode::FAILURE;
134 outputEvent->setMCEventWeights(signalEvent->mcEventWeights());
154 outputEvent->setEventFlags (det, 0);
160#if !defined(XAOD_ANALYSIS) && !defined(GENERATIONBASE)
162 if (std::abs(signalEvent->beamPosSigmaZ() - bkgEvent->beamPosSigmaZ()) > 1e-5f) {
163 ATH_MSG_ERROR(
"Beam spot size does not match between signal and background events ("
164 << signalEvent->beamPosSigmaZ() <<
" vs " << bkgEvent->beamPosSigmaZ() <<
")");
165 return StatusCode::FAILURE;
169 if (!beamSpotHandle.
isValid()) {
171 return StatusCode::FAILURE;
173 outputEvent->setBeamPos( beamSpotHandle->beamPos()[
Amg::x ],
174 beamSpotHandle->beamPos()[
Amg::y ],
175 beamSpotHandle->beamPos()[
Amg::z ] );
176 outputEvent->setBeamPosSigma( beamSpotHandle->beamSigma( 0 ),
177 beamSpotHandle->beamSigma( 1 ),
178 beamSpotHandle->beamSigma( 2 ) );
179 outputEvent->setBeamPosSigmaXY( beamSpotHandle->beamSigmaXY() );
180 outputEvent->setBeamTiltXZ( beamSpotHandle->beamTilt( 0 ) );
181 outputEvent->setBeamTiltYZ( beamSpotHandle->beamTilt( 1 ) );
182 outputEvent->setBeamStatus( beamSpotHandle->beamStatus() );
187 for (
const std::string&
id : keep_ids){
190 filtDecor(*outputEvent) = origDecor(*signalEvent);
195 ATH_CHECK(outputEventH.
record(std::move(outputEvent), std::move(outputEventAux)));
196 ATH_MSG_DEBUG(
"Recorded output xAOD::EventInfo " << outputEventH.
name() <<
" in store " << outputEventH.
store());
199 return StatusCode::SUCCESS;