 |
ATLAS Offline Software
|
Go to the documentation of this file.
21 #include "Gaudi/Property.h"
22 #include "GaudiKernel/ThreadLocalContext.h"
34 const std::string&
name,
35 ISvcLocator* pSvcLocator):
48 ATH_MSG_FATAL(
"No inner detector track selection strings provided!");
49 return StatusCode::FAILURE;
70 ATH_MSG_DEBUG(
"Initializing measurement ThinningHandleKeys.");
82 return StatusCode::SUCCESS;
90 ATH_MSG_INFO(
"Pixel state objects thinning, Total / Passed (Efficiency): "
97 ATH_MSG_INFO(
"SCT state objects thinning, Total / Passed (Efficiency): "
104 ATH_MSG_INFO(
"TRT state objects thinning, Total / Passed (Efficiency): "
113 return StatusCode::SUCCESS;
122 ATH_CHECK( importedTrackParticles.isValid() );
128 unsigned int size_measurements = importedMeasurements->
size();
134 unsigned int size_measurements = importedMeasurements->
size();
140 unsigned int size_measurements = importedMeasurements->
size();
146 unsigned int nTracks = importedTrackParticles->size();
147 if (nTracks==0)
return StatusCode::SUCCESS;
150 std::vector<bool>
mask;
151 mask.assign(nTracks,
false);
160 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used ID TrackParticles?");
161 return StatusCode::FAILURE;
164 for (
unsigned int i=0;
i<nTracks; ++
i) {
175 *importedTrackParticles,
187 *importedTrackParticles,
199 *importedTrackParticles,
209 return StatusCode::SUCCESS;
215 const std::vector<bool>& inputMask,
218 std::atomic<unsigned int>& ntot_states,
219 std::atomic<unsigned int>& npass_states,
220 std::atomic<unsigned int>& npass_measurements,
221 const EventContext& ctx)
const
223 std::vector<bool> maskStates;
224 std::vector<bool> maskMeasurements;
227 maskStates, maskMeasurements);
229 auto count = [] (
const std::vector<bool>&
m)
231 npass_states +=
count (maskStates);
232 npass_measurements +=
count (maskMeasurements);
234 if (!statesKey.
empty()) {
237 unsigned int size_states = importedStates->size();
238 if (size_states == 0) {
242 ntot_states += size_states;
243 if (maskStates.size() > size_states) {
244 ATH_MSG_ERROR(
"States mask size mismatch: mask size (" << maskStates.size() <<
") > number of states (" << size_states <<
").");
245 return StatusCode::FAILURE;
247 maskStates.resize (size_states);
248 importedStates.
keep (maskStates);
252 if (!measurementsKey.
empty()) {
254 ATH_CHECK( importedMeasurements.isValid() );
255 unsigned int size_measurements = importedMeasurements->size();
256 if (size_measurements == 0) {
260 if (maskMeasurements.size() > size_measurements) {
261 ATH_MSG_ERROR(
"Measurements mask size mismatch: mask size (" << maskMeasurements.size() <<
") > number of measurements (" << size_measurements <<
").");
262 return StatusCode::FAILURE;
264 maskMeasurements.resize (size_measurements);
265 importedMeasurements.
keep (maskMeasurements);
269 return StatusCode::SUCCESS;
273 const std::vector<bool>& inputMask,
275 std::vector<bool>& outputStatesMask, std::vector<bool>& outputMeasurementsMask)
const
277 using StatesOnTrack = std::vector<ElementLink<xAOD::TrackStateValidationContainer>>;
284 if (not inputMask[trkIndex])
continue;
289 ATH_MSG_INFO(
"Cannot find TrackState link from xAOD::TrackParticle. Skipping track.");
292 const StatesOnTrack& measurementsOnTrack = trackStateAcc(*trkIt);
295 if (not trkState_el.isValid()) {
296 ATH_MSG_INFO(
"Cannot find a valid link to TrackStateValidation object for track index: " << trkIndex);
299 if ((*trkState_el)->detType() != detTypeToSelect) {
300 ATH_MSG_VERBOSE(
"Discarding TrackState as not of correct type " << detTypeToSelect);
303 if (trkState_el.index() >= outputStatesMask.size()) {
304 outputStatesMask.resize (trkState_el.index()+1);
306 outputStatesMask[trkState_el.index()] =
true;
310 if (not trkMeasurement_el.
isValid()) {
311 ATH_MSG_VERBOSE(
"Cannot find a valid link to TrackMeasurementValidation object from track state for track index: " << trkIndex
312 <<
", trackState index: " << trkState_el.index());
315 if (*trkMeasurement_el ==
nullptr) {
316 ATH_MSG_VERBOSE(
"Invalid pointer to TrackMeasurementValidation object from track state for track index: " << trkIndex
317 <<
", trackState index: " << trkState_el.index());
320 if (trkMeasurement_el.
index() >= outputMeasurementsMask.size()) {
321 outputMeasurementsMask.resize (trkMeasurement_el.
index()+1);
323 outputMeasurementsMask[trkMeasurement_el.
index()] =
true;
std::atomic< unsigned int > m_npass_trt_states
SG::ThinningHandleKey< xAOD::TrackStateValidationContainer > m_statesSctSGKey
StatusCode finalizeParser()
std::atomic< unsigned int > m_npass_sct_states
HandleKey object for adding thinning to an object.
Handle for requesting thinning for a data object.
StringProperty m_selectionString
Expressions for object thinning selections Default InDetTrackParticles (also accomplished through fla...
std::conditional< NUM_PARSER==1, std::unique_ptr< ExpressionParsing::ExpressionParser >, std::array< std::unique_ptr< ExpressionParsing::ExpressionParser >, NUM_PARSER > >::type m_parser
std::atomic< unsigned int > m_npass
MeasurementType
Track state types Subset of enum MeasurementType from Athena: Tracking/TrkEvent/TrkEventPrimitives/Tr...
BooleanProperty m_thinTRTHitsOnTrack
Helper class to provide constant type-safe access to aux data.
#define ATH_MSG_VERBOSE(x)
const std::string & key() const
Return the StoreGate ID for the referenced object.
bool empty() const
Test if the key is blank.
void selectTrackHits(const xAOD::TrackParticleContainer &inputTrackParticles, const std::vector< bool > &inputMask, MeasurementType detTypeToSelect, std::vector< bool > &outputStatesMask, std::vector< bool > &outputMeasurementsMask) const
Select TrackStateValidation and TrackMeasurementValidation objects that are used in the (thinned) tra...
virtual StatusCode finalize() override
Athena algorithm's finalize hook.
bool isValid() const
Test to see if the link can be dereferenced.
Handle for requesting thinning for a data object.
An algorithm that can be simultaneously executed in multiple threads.
std::atomic< unsigned int > m_ntot
Counters and keys for xAOD::TrackParticle container.
SG::ThinningHandleKey< xAOD::TrackStateValidationContainer > m_statesPixSGKey
virtual StatusCode initialize() override
Athena algorithm's initalize hook.
void keep(size_t ndx)
Mark that index ndx in the container should be kept (not thinned away).
ThinInDetClustersAlg(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:
::StatusCode StatusCode
StatusCode definition for legacy code.
std::atomic< unsigned int > m_npass_sct_measurements
SG::ThinningHandleKey< xAOD::TrackMeasurementValidationContainer > m_measurementsPixSGKey
BooleanProperty m_thinSCTHitsOnTrack
StringProperty m_streamName
Stream for object thinning selections.
virtual StatusCode execute(const EventContext &ctx) const override
Athena algorithm's execute hook.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode initializeParser(const ExpressionParsing::SelectionArg< 1 > &selection_string)
ElementLink implementation for ROOT usage.
SG::ThinningHandleKey< xAOD::TrackParticleContainer > m_inDetSGKey
SGKey for TrackParticleContainer.
SG::ThinningHandleKey< xAOD::TrackStateValidationContainer > m_statesTrtSGKey
SG::ThinningHandleKey< xAOD::TrackMeasurementValidationContainer > m_measurementsTrtSGKey
std::atomic< unsigned int > m_ntot_pix_states
Counters and keys for xAOD::TrackStateValidation and xAOD::TrackMeasurementValidation containers.
StatusCode initialize(bool used=true)
std::atomic< unsigned int > m_ntot_trt_measurements
std::atomic< unsigned int > m_npass_trt_measurements
std::atomic< unsigned int > m_ntot_trt_states
std::atomic< unsigned int > m_npass_pix_states
#define ATH_MSG_WARNING(x)
std::atomic< unsigned int > m_ntot_pix_measurements
index_type index() const
Get the index of the element inside of its container.
BooleanProperty m_thinPixelHitsOnTrack
Thinning logic.
StatusCode filterTrackHits(MeasurementType detTypeToSelect, const xAOD::TrackParticleContainer &inputTrackParticles, const std::vector< bool > &inputMask, const SG::ThinningHandleKey< xAOD::TrackStateValidationContainer > &statesKey, const SG::ThinningHandleKey< xAOD::TrackMeasurementValidationContainer > &measurementsKey, std::atomic< unsigned int > &ntot_states, std::atomic< unsigned int > &npass_states, std::atomic< unsigned int > &npass_measurements, const EventContext &ctx) const
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
For P->T converter of SCT_Clusters.
Class describing a TrackParticle.
std::atomic< unsigned int > m_ntot_sct_measurements
SG::ThinningHandleKey< xAOD::TrackMeasurementValidationContainer > m_measurementsSctSGKey
size_type size() const noexcept
Returns the number of elements in the collection.
std::atomic< unsigned int > m_npass_pix_measurements
std::atomic< unsigned int > m_ntot_sct_states