70 ATH_MSG_ERROR(
"No decoration prefix name provided for the output of TrackStateOnSurfaceDecorator! Use the variable DecorationPrefix to properly set a prefix.");
71 return StatusCode::FAILURE;
77 ATH_MSG_ERROR(
"No TrackParticle collection provided for TrackStateOnSurfaceDecorator!");
78 return StatusCode::FAILURE;
88 if (detStore()->retrieve(
m_idHelper,
"AtlasID").isFailure()) {
90 return StatusCode::FAILURE;
95 return StatusCode::FAILURE;
100 return StatusCode::FAILURE;
105 return StatusCode::FAILURE;
124 std::vector<std::string> decor_names{
"TrtPhaseTime"};
125 std::vector<SG::WriteDecorHandleKey<xAOD::EventInfo> > decor_key_out;
130 std::vector<std::string> names;
152 std::vector<std::string> names;
174 return StatusCode::SUCCESS;
180 return StatusCode::SUCCESS;
185 ATH_MSG_DEBUG(
"Adding TSOS decorations the track particles");
193 return StatusCode::FAILURE;
195 size_t nTracks = tracks->size();
222 return StatusCode::FAILURE;
227 float trtPhase_time=0.;
231 trtPhase_time = trtPhase->getTime();
234 decorTRTPhase(*eventInfo) = trtPhase_time;
247 if (msosPixel.
record(std::make_unique<xAOD::TrackStateValidationContainer>(),
248 std::make_unique<xAOD::TrackStateValidationAuxContainer>()).isFailure()) {
250 return StatusCode::FAILURE;
259 if (msosSCT.
record(std::make_unique<xAOD::TrackStateValidationContainer>(),
260 std::make_unique<xAOD::TrackStateValidationAuxContainer>()).isFailure()) {
262 return StatusCode::FAILURE;
271 if (msosTRT.
record(std::make_unique<xAOD::TrackStateValidationContainer>(),
272 std::make_unique<xAOD::TrackStateValidationAuxContainer>()).isFailure()) {
274 return StatusCode::FAILURE;
283 if (!prd_to_track_map.
isValid()) {
286 prd_to_track_map_cptr = prd_to_track_map.
cptr();
290 std::vector<bool> mask;
291 mask.assign(nTracks,
true);
293 std::vector<int>
entries = m_parser->evaluateAsVector();
294 unsigned int nEntries =
entries.size();
296 if (nTracks != nEntries ) {
297 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used ID TrackParticles?");
298 return StatusCode::FAILURE;
301 for (
unsigned int i=0; i<nTracks; ++i)
if (
entries[i]!=1) mask[i]=
false;
305 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer,float> > trackTRTFloatDecorators;
309 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer,float> >
312 unsigned i_track = 0;
313 for (
const auto *
const track : *tracks) {
323 if( !track->trackLink().isValid() || track->track() ==
nullptr ) {
333 std::vector< ElementLink< xAOD::TrackStateValidationContainer > > msosLink;
353 bool allExtrapolationsSucceded =
true;
358 ATH_MSG_VERBOSE(
"Start radius for extrapolating to layers: "<<startRadius);
361 std::unique_ptr<const Trk::TrackParameters> outputParamsIBL
373 std::unique_ptr<const Trk::TrackParameters> outputParamsBL
385 std::unique_ptr<const Trk::TrackParameters> outputParamsL1
397 std::unique_ptr<const Trk::TrackParameters> outputParamsL2
406 if (outputParamsIBL.get()) {
407 trackPixFloatDecorators[
kTrkIBLXDecor](*track) = outputParamsIBL->position().x();
408 trackPixFloatDecorators[
kTrkIBLYDecor](*track) = outputParamsIBL->position().y();
409 trackPixFloatDecorators[
kTrkIBLZDecor](*track) = outputParamsIBL->position().z();
412 allExtrapolationsSucceded =
false;
419 if (outputParamsBL.get()) {
420 trackPixFloatDecorators[
kTrkBLXDecor](*track) = outputParamsBL->position().x();
421 trackPixFloatDecorators[
kTrkBLYDecor](*track) = outputParamsBL->position().y();
422 trackPixFloatDecorators[
kTrkBLZDecor](*track) = outputParamsBL->position().z();
425 allExtrapolationsSucceded =
false;
432 if (outputParamsL1.get()) {
433 trackPixFloatDecorators[
kTrkL1XDecor](*track) = outputParamsL1->position().x();
434 trackPixFloatDecorators[
kTrkL1YDecor](*track) = outputParamsL1->position().y();
435 trackPixFloatDecorators[
kTrkL1ZDecor](*track) = outputParamsL1->position().z();
438 allExtrapolationsSucceded =
false;
445 if (outputParamsL2.get()) {
446 trackPixFloatDecorators[
kTrkL2XDecor](*track) = outputParamsL2->position().x();
447 trackPixFloatDecorators[
kTrkL2YDecor](*track) = outputParamsL2->position().y();
448 trackPixFloatDecorators[
kTrkL2ZDecor](*track) = outputParamsL2->position().z();
451 allExtrapolationsSucceded =
false;
457 if(!allExtrapolationsSucceded)
ATH_MSG_WARNING(
"At least one extrapolation to a Pixel layer failed!");
460 ATH_MSG_WARNING(
"No perigee TrackParameters found - filling positions on layers to (0,0,0)!");
478 std::vector<const Trk::TrackStateOnSurface*> tsoss;
483 tsoss.push_back(trackState);
486 std::unique_ptr<const Trk::TrackStates> holes;
489 for (
const auto *hole: *holes){
490 tsoss.push_back(hole);
494 stable_sort( tsoss.begin(), tsoss.end(), CompFunc );
501 for (
const auto& trackState: tsoss){
519 if(!trackState->surface().associatedDetectorElement()){
524 Identifier surfaceID = trackState->surface().associatedDetectorElement()->identify();
549 if( !isPixel && !isSCT && !isTRT ){
559 msosTRT->push_back( msos );
565 msosLink.push_back(elink);
569 msosSCT->push_back( msos );
575 msosLink.push_back(elink);
579 msosPixel->push_back( msos );
585 msosLink.push_back(elink);
610 double lTheta=-1000., lPhi=-1000.;
614 errDCAcc(*msos) = -1 ;
624 HitZAcc(*msos)=-3000;
626 rTrkWireAcc(*msos)=-1;
630 HitZAcc(*msos)=-3000;
632 rTrkWireAcc(*msos)=-1;
637 HitZAcc(*msos)=gp.z();
638 HitRAcc(*msos)=gp.perp();
639 rTrkWireAcc(*msos)= fabs(trackState->trackParameters()->parameters()[
Trk::driftRadius]);
640 lTheta = trackState->trackParameters()->parameters()[
Trk::theta];
641 lPhi = trackState->trackParameters()->parameters()[
Trk::phi];
646 rTrkWireAcc(*msos)=0;
653 if (prd_to_track_map_cptr) {
658 isSharedAcc(*msos) = isShared;
664 std::unique_ptr<const Trk::TrackParameters> extrap(
m_extrapolator->extrapolateTrack(ctx,*trkTrack,trackState->surface()) );
671 ATH_MSG_DEBUG(
" Original position " << tp->parameters()[0] <<
" " << tp->parameters()[1]);
672 ATH_MSG_DEBUG(
"Extrapolated position " << extrap->parameters()[0] <<
" " << extrap->parameters()[1]);
688 if (side && (isSCT || isPixel)) {
694 float trketacomp = mytrack.dot(myetaax);
695 float trkphicomp = mytrack.dot(myphiax);
696 float trknormcomp = mytrack.dot(mynormal);
698 ATH_MSG_DEBUG(
" Original incident angle " << trketacomp <<
" " << trkphicomp <<
" " << trknormcomp);
701 float trketacompX = metrack.dot(myetaax);
702 float trkphicompX = metrack.dot(myphiax);
703 float trknormcompX = metrack.dot(mynormal);
704 ATH_MSG_DEBUG(
"Extrapolated incident angle " << trketacompX <<
" " << trkphicompX <<
" " << trknormcompX);
706 msos->
setLocalAngles( atan2(trketacomp,trknormcomp), atan2(trkphicomp,trknormcomp) );
711 float trketacompX = metrack.dot(myetaax);
712 float trkphicompX = metrack.dot(myphiax);
713 float trknormcompX = metrack.dot(mynormal);
714 msos->
setLocalAngles( atan2(trketacompX,trknormcompX), atan2(trkphicompX,trknormcompX) );
719 if(!measurement) {
continue; }
721 if (isTRT && !trtDCOffsets.
isValid() && !trtDCs.
isValid()) {
continue; }
722 if (isSCT && !sctClusterOffsets.
isValid() && !sctClusters.
isValid()) {
continue; }
723 if (isPixel && !pixelClusterOffsets.
isValid() && !pixelClusters.
isValid()) {
continue; }
757 SiWidthAcc(*msos) = SiWidthAcc(*sctCluster);
758 firstStripAcc(*msos) = (rdoStripAcc(*sctCluster)).at(0);
760 SiWidthAcc(*msos) = -1;
761 firstStripAcc(*msos) = -1;
771 driftTimeAcc(*msos) = rtr->
drifttime(fabs(tp->parameters()[0]));
775 driftTimeAcc(*msos) = rtr->
drifttime(fabs(extrap->parameters()[0]));
785 std::optional<Trk::ResidualPull> biased;
786 std::optional<Trk::ResidualPull> unbiased;
793 if(unbiasedTp.get()) {
832 dectsos_msosLink( *track ) = msosLink;
839 return StatusCode::SUCCESS;
844 const std::vector<unsigned int>* offsets,
849 if( contIndex.
collHash() >= offsets->size() ){
854 unsigned int xaodIndex = offsets->at( contIndex.
collHash() ) + contIndex.
objIndex();
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Helper class to provide constant type-safe access to aux data.
Helper class to provide type-safe access to aux data.
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the SCT subdetector.
Handle class for reading a decoration on an object.
Handle class for reading from StoreGate.
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
Handle class for adding a decoration to an object.
This is an Identifier helper class for the TRT subdetector.
const AtlasDetectorID * m_idHelper
Gaudi::Property< bool > m_storeSCT
SG::WriteHandleKey< xAOD::TrackStateValidationContainer > m_pixelMsosName
std::vector< SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > > m_trackPixFloatDecorKeys
SG::ReadHandleKey< ComTime > m_trtPhaseKey
ToolHandle< ITRT_CalDbTool > m_trtcaldbTool
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_containerName
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_trtDCName
std::vector< SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > > m_trackTRTFloatDecorKeys
std::vector< SG::WriteDecorHandleKey< xAOD::EventInfo > > m_trtPhaseDecorKey
Gaudi::Property< bool > m_addPRD
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_trackTSOSMOSLinkDecorKey
virtual StatusCode addBranches(const EventContext &ctx) const
Gaudi::Property< bool > m_storeTRT
Gaudi::Property< bool > m_storeHoles
ElementLink< xAOD::TrackMeasurementValidationContainer > buildElementLink(const Trk::PrepRawData *, const std::vector< unsigned int > *, const xAOD::TrackMeasurementValidationContainer *) const
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
Gaudi::Property< bool > m_addPulls
ToolHandle< Trk::IExtrapolator > m_extrapolator
SG::ReadHandleKey< std::vector< unsigned int > > m_pixelMapName
@ kTRTusedHits_noHT_divByLDecor
@ kTRTdEdx_noHT_divByLDecor
ToolHandle< ITRT_ToT_dEdx > m_TRTdEdxTool
Gaudi::Property< std::string > m_sgName
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_sctClustersName
SG::WriteHandleKey< xAOD::TrackStateValidationContainer > m_sctMsosName
ToolHandle< Trk::IUpdator > m_updator
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_pixelClustersName
Gaudi::Property< bool > m_storeOutliers
ToolHandle< Trk::ITrackHoleSearchTool > m_holeSearchTool
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
ToolHandle< Trk::IResidualPullCalculator > m_residualPullCalculator
StringProperty m_selectionString
SG::ReadHandleKey< std::vector< unsigned int > > m_trtMapName
Gaudi::Property< bool > m_addExtraEventInfo
Gaudi::Property< std::vector< float > > m_pixelLayerRadii
SG::ReadHandleKey< std::vector< unsigned int > > m_sctMapName
SG::WriteHandleKey< xAOD::TrackStateValidationContainer > m_trtMsosName
Gaudi::Property< bool > m_storePixel
ElementLink implementation for ROOT usage.
bool toPersistent()
Dummy function provinding the offline interface.
Identifiable container index to a contained object.
unsigned short objIndex() const
object index in collection
unsigned short collHash() const
Accessor to hash, obj index and combined index.
bool isValid() const
check that both fields are set
bool is_valid() const
Check if id is in a valid state.
value_type get_compact() const
Get the compact id.
Class to hold geometrical description of a silicon detector element.
Represents 'corrected' measurements from the TRT (for example, corrected for wire sag).
virtual const Amg::Vector3D & globalPosition() const override final
return the global position of this RIO_OnTrack
virtual const Trk::Surface & associatedSurface() const override final
returns the surface for the local to global transformation
Helper class to provide type-safe access to aux data.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
Handle class for adding a decoration to an object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Base class for rt-relations in the TRT.
virtual float drifttime(float radius) const =0
drifttime for given radius
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
unsigned int indexOfMaxAssignProb() const
Index of the ROT with the highest assignment probability.
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.
Class for a CylinderSurface in the ATLAS detector.
This class is the pure abstract base class for all fittable tracking measurements.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
bool isShared(const PrepRawData &prd) const
does this PRD belong to more than one track?
const Amg::Vector3D & momentum() const
Access method for the momentum.
virtual const S & associatedSurface() const override final
Access to the Surface method.
const IdentContIndex & getHashAndIndex() const
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
@ Biased
RP with track state including the hit.
@ Unbiased
RP with track state that has measurement not included.
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
const Amg::Vector3D & center() const
Returns the center position of the Surface.
ParticleHypothesis particleHypothesis() const
Returns the particle hypothesis used for Track fitting.
Class providing comparison function, or relational definition, for sorting MeasurementBase objects.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ Hole
A hole on the track - this is defined in the following way.
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
const Perigee * perigeeParameters() const
return Perigee.
This is the base class for all tracking detector elements with read-out relevant information.
virtual const Surface & surface() const =0
Return surface associated with this detector element.
void setBiasedPull(float biasedPullX, float biasedPullY)
Sets the biased pull.
void setLocalPosition(float localX, float localY)
Sets the local position.
void setUnbiasedResidual(float unbiasedResidualX, float unbiasedResidualY)
Sets the unbiased residual.
void setDetType(char detType)
Sets the detector type.
void setBiasedResidual(float biasedResidualX, float biasedResidualY)
Sets the biased residual.
void setDetElementId(uint64_t detElementId)
Sets the detector element identifier.
void setType(int type)
Sets the type (measurement, outlier, hole)
void setLocalAngles(float localTheta, float localPhi)
Sets the local angles.
void setTrackMeasurementValidationLink(ElementLink< xAOD::TrackMeasurementValidationContainer > trackMeasurementValidationLink)
sets the link to the TrackMeasurementValidationContainer
ElementLink< xAOD::TrackMeasurementValidationContainer > trackMeasurementValidationLink() const
void setUnbiasedPull(float unbiasedPullX, float unbiasedPullY)
Sets the unbiased pull.
Eigen::Matrix< double, 3, 1 > Vector3D
std::vector< SG::WriteDecorHandle< T_Cont, T > > createDecorators(const std::vector< SG::WriteDecorHandleKey< T_Cont > > &keys, const EventContext &ctx)
void createDecoratorKeys(T_Parent &parent, const SG::ReadHandleKey< T_Cont > &container_key, const std::string &prefix, const std::vector< std::string > &decor_names, std::vector< SG::WriteDecorHandleKey< T_Cont > > &decor_out)
PropDirection
PropDirection, enum for direction of the propagation.
MaterialUpdateMode
This is a steering enum to force the material update it can be: (1) addNoise (-1) removeNoise Second ...
ParametersBase< TrackParametersDim, Charged > TrackParameters
TrackMeasurementValidation_v1 TrackMeasurementValidation
Reference the current persistent version:
TrackStateValidation_v1 TrackStateValidation
Reference the current persistent version:
TrackMeasurementValidationContainer_v1 TrackMeasurementValidationContainer
Definition of the current "TrackMeasurementValidation container version".