Fix DATAVECTOR_BASE for TrackMeasurementValidation
This really needs some attention from someone like @ssnyder, since I'm way over my head here.
What I think the problem is
The TrackMeasurementValidation_v1
class was inappropriately using DATAVECTOR_BASE
, by having
DATAVECTOR_BASE( xAOD::TrackMeasurementValidation_v1, SG::AuxElement );
at the end of the header. Here I'm requesting that we remove that line. [I'm suggesting that we add a header to make it work]
Why would I want to do that?
We (@backes and I) were unable to get SG::ReadDecorHandleKey<xAOD::TrackMeasurementValidationContainer>
to compile. The full error message is below, but it included
static assertion failed: You should use the CLASS_DEF macro to define CLID and VERSION
...
error: 'classID' is not a member of 'DataVector<SG::AuxElement>'
I have some recollection that we can't use SG::AuxElement
as a base class in the IO layer for some reason, so I tried removing the macro [unless you also include xAODCore/BaseContainer.h
, so I added that] and the code compiled.
What are other EDM classes doing?
Alternatives seem to be using SG_BASE
or using nothing at all.
I looked around at some other objects and found that the following used DATAVECTOR_BASE
with SG::AuxElement
Event/xAOD/xAODMuonRDO/xAODMuonRDO/versions/NRPCRDO_v1.h
Event/xAOD/xAODTracking/xAODTracking/versions/TrackMeasurementValidation_v1.h
MuonSpectrometer/MuonPhaseII/Event/xAOD/xAODMuonSimHit/xAODMuonSimHit/versions/MuonSimHit_v1.h
on the other hand, there were 54 headers that used the SG_BASE
macro. This might suggest that I should replace the macro with SG_BASE
. On the third hand, in xAOD::BTagging_v1
we don't use either of these things, and it seems to work.
Since I tend to be reluctant to do something when nothing will suffice, I'm proposing nothing here. But if using SG_BASE
would let us read the object as an SG::AuxElement
, that would be awesome (we should implement that for xAOD::BTagging
as well).
Ugly details
The full error we were getting is listed below.
In file included from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/DataBucketBase.icc:14,
from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/DataBucketBase.h:102,
from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/DataBucket.h:10,
from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/StorableConversions.h:15,
from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/StoreGate/StoreGate/VarHandleBase.h:25,
from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaBaseComps/AthenaBaseComps/HandleClassifier.h:18,
from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaBaseComps/AthenaBaseComps/AthCommonDataStore.h:38,
from /usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaBaseComps/AthenaBaseComps/AthReentrantAlgorithm.h:19,
from /home/atlas/work/dumpster/training-dataset-dumper/athena/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/JetHitAssociationAlg.h:10,
from /home/atlas/work/dumpster/training-dataset-dumper/athena/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/src/JetHitAssociationAlg.cxx:6:
/usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/ClassID_traits.h: In instantiation of 'static const CLID& ClassID_traits<T>::ID() [with T = DataVector<SG::AuxElement>; CLID = unsigned int]':
/usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/StoreGate/StoreGate/ReadDecorHandleKey.icc:80:40: required from 'SG::ReadDecorHandleKey<T>::ReadDecorHandleKey(OWNER*, const std::string&, const std::string&, const std::string&) [with OWNER = FlavorTagDiscriminants::JetHitAssociationAlg; <template-parameter-2-2> = void; T = DataVector<xAOD::TrackMeasurementValidation_v1>; std::string = std::__cxx11::basic_string<char>]'
/home/atlas/work/dumpster/training-dataset-dumper/athena/PhysicsAnalysis/JetTagging/FlavorTagDiscriminants/FlavorTagDiscriminants/JetHitAssociationAlg.h:45:79: required from here
/usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/ClassID_traits.h:51:22: error: static assertion failed: You should use the CLASS_DEF macro to define CLID and VERSION
51 | MY_STATIC_ASSERT(s_isDataObject);
| ^~~~~~~~~~~~~~
/usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/ClassID_traits.h:33:18: note: in definition of macro 'MY_STATIC_ASSERT'
33 | static_assert (B, "You should use the CLASS_DEF macro to define CLID and VERSION");
| ^
/usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/ClassID_traits.h:51:22: note: 'ClassID_traits<DataVector<SG::AuxElement> >::s_isDataObject' evaluates to false
51 | MY_STATIC_ASSERT(s_isDataObject);
| ^~~~~~~~~~~~~~
/usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/ClassID_traits.h:33:18: note: in definition of macro 'MY_STATIC_ASSERT'
33 | static_assert (B, "You should use the CLASS_DEF macro to define CLID and VERSION");
| ^
/usr/AthAnalysis/25.2.10/InstallArea/x86_64-el9-gcc13-opt/src/Control/AthenaKernel/AthenaKernel/ClassID_traits.h:52:22: error: 'classID' is not a member of 'DataVector<SG::AuxElement>'
52 | return T::classID();
| ~~~~~~~~~~^~