Skip to content
Snippets Groups Projects
Commit 3100f861 authored by Edward Moyse's avatar Edward Moyse
Browse files

Merge branch 'overlay/trt-order' into 'master'

Sort TRT RDOs when doing data overlay

Closes ATLASSIM-4910

See merge request atlas/athena!37186
parents 773aaf15 3543b848
No related branches found
No related tags found
No related merge requests found
...@@ -51,6 +51,8 @@ private: ...@@ -51,6 +51,8 @@ private:
const TRT_ID *m_trtId{}; const TRT_ID *m_trtId{};
Gaudi::Property<bool> m_sortBkgInput{this, "SortBkgInput", false, "Sort background input RDOs"};
SG::ReadHandleKey<TRT_RDO_Container> m_bkgInputKey{this, "BkgInputKey", "Bkg_TRT_RDOs"," ReadHandleKey for Background Input TRT_RDO_Container"}; SG::ReadHandleKey<TRT_RDO_Container> m_bkgInputKey{this, "BkgInputKey", "Bkg_TRT_RDOs"," ReadHandleKey for Background Input TRT_RDO_Container"};
SG::ReadHandleKey<TRT_RDO_Container> m_signalInputKey{this, "SignalInputKey", "Sig_TRT_RDOs", "ReadHandleKey for Signal Input TRT_RDO_Container"}; SG::ReadHandleKey<TRT_RDO_Container> m_signalInputKey{this, "SignalInputKey", "Sig_TRT_RDOs", "ReadHandleKey for Signal Input TRT_RDO_Container"};
SG::WriteHandleKey<TRT_RDO_Container> m_outputKey{this, "OutputKey", "TRT_RDOs", "WriteHandleKey for Output TRT_RDO_Container"}; SG::WriteHandleKey<TRT_RDO_Container> m_outputKey{this, "OutputKey", "TRT_RDOs", "WriteHandleKey for Output TRT_RDO_Container"};
......
...@@ -70,11 +70,13 @@ def getTRTOverlay(name="TRTOverlay", **kwargs): ...@@ -70,11 +70,13 @@ def getTRTOverlay(name="TRTOverlay", **kwargs):
from Digitization.DigitizationFlags import digitizationFlags from Digitization.DigitizationFlags import digitizationFlags
if overlayFlags.isOverlayMT(): if overlayFlags.isOverlayMT():
kwargs.setdefault("SortBkgInput", overlayFlags.isDataOverlay())
kwargs.setdefault("BkgInputKey", overlayFlags.bkgPrefix() + "TRT_RDOs"); kwargs.setdefault("BkgInputKey", overlayFlags.bkgPrefix() + "TRT_RDOs");
kwargs.setdefault("SignalInputKey", overlayFlags.sigPrefix() + "TRT_RDOs"); kwargs.setdefault("SignalInputKey", overlayFlags.sigPrefix() + "TRT_RDOs");
kwargs.setdefault("OutputKey", "TRT_RDOs"); kwargs.setdefault("OutputKey", "TRT_RDOs");
kwargs.setdefault("SignalInputSDOKey", overlayFlags.sigPrefix() + "TRT_SDO_Map"); kwargs.setdefault("SignalInputSDOKey", overlayFlags.sigPrefix() + "TRT_SDO_Map");
else: else:
kwargs.setdefault("SortBkgInput", overlayFlags.isDataOverlay())
kwargs.setdefault("BkgInputKey", overlayFlags.dataStore() + "+TRT_RDOs"); kwargs.setdefault("BkgInputKey", overlayFlags.dataStore() + "+TRT_RDOs");
kwargs.setdefault("SignalInputKey", overlayFlags.evtStore() + "+TRT_RDOs"); kwargs.setdefault("SignalInputKey", overlayFlags.evtStore() + "+TRT_RDOs");
kwargs.setdefault("OutputKey", overlayFlags.outputStore() + "+TRT_RDOs"); kwargs.setdefault("OutputKey", overlayFlags.outputStore() + "+TRT_RDOs");
......
...@@ -53,6 +53,7 @@ def TRTOverlayAlgCfg(flags, name="TRTOverlay", **kwargs): ...@@ -53,6 +53,7 @@ def TRTOverlayAlgCfg(flags, name="TRTOverlay", **kwargs):
from InDetOverlay.TRT_ConditionsConfig import TRTStrawCondAlgCfg from InDetOverlay.TRT_ConditionsConfig import TRTStrawCondAlgCfg
acc.merge(TRTStrawCondAlgCfg(flags)) acc.merge(TRTStrawCondAlgCfg(flags))
kwargs.setdefault("SortBkgInput", flags.Overlay.DataOverlay)
kwargs.setdefault("BkgInputKey", flags.Overlay.BkgPrefix + "TRT_RDOs") kwargs.setdefault("BkgInputKey", flags.Overlay.BkgPrefix + "TRT_RDOs")
kwargs.setdefault("SignalInputKey", flags.Overlay.SigPrefix + "TRT_RDOs") kwargs.setdefault("SignalInputKey", flags.Overlay.SigPrefix + "TRT_RDOs")
kwargs.setdefault("SignalInputSDOKey", flags.Overlay.SigPrefix + "TRT_SDO_Map") kwargs.setdefault("SignalInputSDOKey", flags.Overlay.SigPrefix + "TRT_SDO_Map")
......
...@@ -23,6 +23,13 @@ ...@@ -23,6 +23,13 @@
namespace Overlay namespace Overlay
{ {
struct TRTRDOSorter {
bool operator() (TRT_RDORawData *digit1, TRT_RDORawData *digit2)
{
return digit1->identify() < digit2->identify();
}
} TRTRDOSorterObject;
// Specialize copyCollection() for the TRT // Specialize copyCollection() for the TRT
template<> template<>
std::unique_ptr<TRT_RDO_Collection> copyCollection(const IdentifierHash &hashId, std::unique_ptr<TRT_RDO_Collection> copyCollection(const IdentifierHash &hashId,
...@@ -39,6 +46,14 @@ namespace Overlay ...@@ -39,6 +46,14 @@ namespace Overlay
return outputCollection; return outputCollection;
} }
std::unique_ptr<TRT_RDO_Collection> copyCollectionAndSort(const IdentifierHash &hashId,
const TRT_RDO_Collection *collection)
{
std::unique_ptr<TRT_RDO_Collection> outputCollection = copyCollection(hashId, collection);
std::stable_sort(outputCollection->begin(), outputCollection->end(), TRTRDOSorterObject);
return outputCollection;
}
} // namespace Overlay } // namespace Overlay
...@@ -186,7 +201,12 @@ StatusCode TRTOverlay::overlayContainer(const TRT_RDO_Container *bkgContainer, ...@@ -186,7 +201,12 @@ StatusCode TRTOverlay::overlayContainer(const TRT_RDO_Container *bkgContainer,
[](const std::pair<IdentifierHash, bool> &lhs, IdentifierHash rhs) -> bool { return lhs.first < rhs; } ); [](const std::pair<IdentifierHash, bool> &lhs, IdentifierHash rhs) -> bool { return lhs.first < rhs; } );
if (search == overlapMap.end() || search->first != hashId) { if (search == overlapMap.end() || search->first != hashId) {
// Copy the background collection // Copy the background collection
std::unique_ptr<TRT_RDO_Collection> bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId)); std::unique_ptr<TRT_RDO_Collection> bkgCollection{};
if (m_sortBkgInput) {
bkgCollection = Overlay::copyCollectionAndSort(hashId, bkgContainer->indexFindPtr(hashId));
} else {
bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId));
}
if (outputContainer->addCollection(bkgCollection.get(), hashId).isFailure()) { if (outputContainer->addCollection(bkgCollection.get(), hashId).isFailure()) {
ATH_MSG_ERROR("Adding background Collection with hashId " << hashId << " failed"); ATH_MSG_ERROR("Adding background Collection with hashId " << hashId << " failed");
...@@ -211,7 +231,12 @@ StatusCode TRTOverlay::overlayContainer(const TRT_RDO_Container *bkgContainer, ...@@ -211,7 +231,12 @@ StatusCode TRTOverlay::overlayContainer(const TRT_RDO_Container *bkgContainer,
auto outputCollection = std::make_unique<TRT_RDO_Collection>(hashId); auto outputCollection = std::make_unique<TRT_RDO_Collection>(hashId);
outputCollection->setIdentifier(signalCollection->identify()); outputCollection->setIdentifier(signalCollection->identify());
// Copy the background collection // Copy the background collection
std::unique_ptr<TRT_RDO_Collection> bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId)); std::unique_ptr<TRT_RDO_Collection> bkgCollection{};
if (m_sortBkgInput) {
bkgCollection = Overlay::copyCollectionAndSort(hashId, bkgContainer->indexFindPtr(hashId));
} else {
bkgCollection = Overlay::copyCollection(hashId, bkgContainer->indexFindPtr(hashId));
}
// Merge collections // Merge collections
int det = m_trtId->barrel_ec(signalCollection->identify()); int det = m_trtId->barrel_ec(signalCollection->identify());
......
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