|
ATLAS Offline Software
|
Go to the documentation of this file.
66 const IInterface*
p) :
72 m_updator(
"Trk::KalmanUpdator"),
73 m_residualPullCalculator(
"Trk::ResidualPullCalculator/ResidualPullCalculator"),
74 m_holeSearchTool(
"InDet::InDetTrackHoleSearchTool/InDetHoleSearchTool"),
75 m_extrapolator(
"Trk::Extrapolator/AtlasExtrapolator"),
76 m_trtcaldbTool(
"TRT_CalDbTool",this),
77 m_TRTdEdxTool(
"InDet::TRT_ElectronPidTools/TRT_ToT_dEdx")
79 declareInterface<DerivationFramework::IAugmentationTool>(
this);
107 ATH_MSG_ERROR(
"No decoration prefix name provided for the output of TrackStateOnSurfaceDecorator! Use the variable DecorationPrefix to properly set a prefix.");
108 return StatusCode::FAILURE;
114 ATH_MSG_ERROR(
"No TrackParticle collection provided for TrackStateOnSurfaceDecorator!");
115 return StatusCode::FAILURE;
123 return StatusCode::FAILURE;
128 return StatusCode::FAILURE;
133 return StatusCode::FAILURE;
138 return StatusCode::FAILURE;
157 std::vector<std::string> decor_names{
"TrtPhaseTime"};
158 std::vector<SG::WriteDecorHandleKey<xAOD::EventInfo> > decor_key_out;
163 std::vector<std::string>
names;
185 std::vector<std::string>
names;
207 return StatusCode::SUCCESS;
213 return StatusCode::SUCCESS;
218 const EventContext& ctx = Gaudi::Hive::currentContext();
219 ATH_MSG_DEBUG(
"Adding TSOS decorations the track particles");
227 return StatusCode::FAILURE;
255 return StatusCode::FAILURE;
260 float trtPhase_time=0.;
264 trtPhase_time = trtPhase->
getTime();
267 decorTRTPhase(*eventInfo) = trtPhase_time;
280 if (msosPixel.
record(std::make_unique<xAOD::TrackStateValidationContainer>(),
281 std::make_unique<xAOD::TrackStateValidationAuxContainer>()).isFailure()) {
283 return StatusCode::FAILURE;
292 if (msosSCT.
record(std::make_unique<xAOD::TrackStateValidationContainer>(),
293 std::make_unique<xAOD::TrackStateValidationAuxContainer>()).isFailure()) {
295 return StatusCode::FAILURE;
304 if (msosTRT.
record(std::make_unique<xAOD::TrackStateValidationContainer>(),
305 std::make_unique<xAOD::TrackStateValidationAuxContainer>()).isFailure()) {
307 return StatusCode::FAILURE;
316 if (!prd_to_track_map.
isValid()) {
319 prd_to_track_map_cptr = prd_to_track_map.
cptr();
322 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer,float> > trackTRTFloatDecorators;
326 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer,float> >
329 for (
const auto *
const track : *tracks) {
333 if( !
track->trackLink().isValid() ||
track->track() ==
nullptr ) {
343 std::vector< ElementLink< xAOD::TrackStateValidationContainer > > msosLink;
363 bool allExtrapolationsSucceded =
true;
368 ATH_MSG_VERBOSE(
"Start radius for extrapolating to layers: "<<startRadius);
371 std::unique_ptr<const Trk::TrackParameters> outputParamsIBL
383 std::unique_ptr<const Trk::TrackParameters> outputParamsBL
395 std::unique_ptr<const Trk::TrackParameters> outputParamsL1
407 std::unique_ptr<const Trk::TrackParameters> outputParamsL2
416 if (outputParamsIBL.get()) {
422 allExtrapolationsSucceded =
false;
429 if (outputParamsBL.get()) {
435 allExtrapolationsSucceded =
false;
442 if (outputParamsL1.get()) {
448 allExtrapolationsSucceded =
false;
455 if (outputParamsL2.get()) {
461 allExtrapolationsSucceded =
false;
467 if(!allExtrapolationsSucceded)
ATH_MSG_WARNING(
"At least one extrapolation to a Pixel layer failed!");
470 ATH_MSG_WARNING(
"No perigee TrackParameters found - filling positions on layers to (0,0,0)!");
488 std::vector<const Trk::TrackStateOnSurface*> tsoss;
493 tsoss.push_back(trackState);
496 std::unique_ptr<const Trk::TrackStates>
holes;
500 tsoss.push_back(
hole);
504 stable_sort( tsoss.begin(), tsoss.end(), CompFunc );
511 for (
const auto& trackState: tsoss){
529 if(!trackState->surface().associatedDetectorElement()){
534 Identifier surfaceID = trackState->surface().associatedDetectorElement()->identify();
559 if( !isPixel && !isSCT && !isTRT ){
575 msosLink.push_back(elink);
585 msosLink.push_back(elink);
595 msosLink.push_back(elink);
620 double lTheta=-1000., lPhi=-1000.;
624 errDCAcc(*msos) = -1 ;
634 HitZAcc(*msos)=-3000;
636 rTrkWireAcc(*msos)=-1;
640 HitZAcc(*msos)=-3000;
642 rTrkWireAcc(*msos)=-1;
647 HitZAcc(*msos)=gp.z();
648 HitRAcc(*msos)=gp.perp();
649 rTrkWireAcc(*msos)= fabs(trackState->trackParameters()->parameters()[
Trk::driftRadius]);
650 lTheta = trackState->trackParameters()->parameters()[
Trk::theta];
651 lPhi = trackState->trackParameters()->parameters()[
Trk::phi];
656 rTrkWireAcc(*msos)=0;
663 if (prd_to_track_map_cptr) {
668 isSharedAcc(*msos) = isShared;
675 std::unique_ptr<const Trk::TrackParameters> extrap(
m_extrapolator->extrapolateTrack(ctx,*trkTrack,trackState->surface()) );
682 ATH_MSG_DEBUG(
" Original position " <<
tp->parameters()[0] <<
" " <<
tp->parameters()[1]);
683 ATH_MSG_DEBUG(
"Extrapolated position " << extrap->parameters()[0] <<
" " << extrap->parameters()[1]);
699 if (
side && (isSCT || isPixel)) {
705 float trketacomp = mytrack.dot(myetaax);
706 float trkphicomp = mytrack.dot(myphiax);
707 float trknormcomp = mytrack.dot(mynormal);
709 ATH_MSG_DEBUG(
" Original incident angle " << trketacomp <<
" " << trkphicomp <<
" " << trknormcomp);
712 float trketacompX = metrack.dot(myetaax);
713 float trkphicompX = metrack.dot(myphiax);
714 float trknormcompX = metrack.dot(mynormal);
715 ATH_MSG_DEBUG(
"Extrapolated incident angle " << trketacompX <<
" " << trkphicompX <<
" " << trknormcompX);
717 msos->
setLocalAngles( atan2(trketacomp,trknormcomp), atan2(trkphicomp,trknormcomp) );
722 float trketacompX = metrack.dot(myetaax);
723 float trkphicompX = metrack.dot(myphiax);
724 float trknormcompX = metrack.dot(mynormal);
725 msos->
setLocalAngles( atan2(trketacompX,trknormcompX), atan2(trkphicompX,trknormcompX) );
730 if(!measurement) {
continue; }
732 if (isTRT && !trtDCOffsets.
isValid() && !trtDCs.
isValid()) {
continue; }
733 if (isSCT && !sctClusterOffsets.
isValid() && !sctClusters.
isValid()) {
continue; }
734 if (isPixel && !pixelClusterOffsets.
isValid() && !pixelClusters.
isValid()) {
continue; }
765 driftTimeAcc(*msos) = rtr->
drifttime(fabs(
tp->parameters()[0]));
769 driftTimeAcc(*msos) = rtr->
drifttime(fabs(extrap->parameters()[0]));
779 std::optional<Trk::ResidualPull> biased;
780 std::optional<Trk::ResidualPull> unbiased;
787 if(unbiasedTp.get()) {
826 dectsos_msosLink( *
track ) = msosLink;
832 return StatusCode::SUCCESS;
837 const std::vector<unsigned int>* offsets,
842 if( contIndex.
collHash() >= offsets->size() ){
847 unsigned int xaodIndex = offsets->at( contIndex.
collHash() ) + contIndex.
objIndex();
def retrieve(aClass, aKey=None)
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
bool is_pixel(Identifier id) const
ToolHandle< Trk::IResidualPullCalculator > m_residualPullCalculator
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
virtual StatusCode addBranches() const
Pass the thinning service
SG::ReadHandleKey< std::vector< unsigned int > > m_pixelMapName
void setUnbiasedResidual(float unbiasedResidualX, float unbiasedResidualY)
Sets the unbiased residual.
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
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)
@ kTRTdEdx_noHT_divByLDecor
const_pointer_type cptr()
Dereference the pointer.
void setDetType(char detType)
Sets the detector type.
bool is_sct(Identifier id) const
const Amg::Vector3D & position() const
Access method for the position.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
SG::ReadHandleKey< ComTime > m_trtPhaseKey
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
SG::ReadHandleKey< std::vector< unsigned int > > m_trtMapName
TrackStateValidation_v1 TrackStateValidation
Reference the current persistent version:
@ Unbiased
RP with track state that has measurement not included.
This is an Identifier helper class for the TRT subdetector. This class is a factory for creating comp...
virtual const Trk::Surface & associatedSurface() const override final
returns the surface for the local to global transformation
Class describing a TrackStateValidation.
value_type get_compact() const
Get the compact id.
Identifiable container index to a contained object.
MaterialUpdateMode
This is a steering enum to force the material update it can be: (1) addNoise (-1) removeNoise Second ...
ToolHandle< ITRT_CalDbTool > m_trtcaldbTool
void setUnbiasedPull(float unbiasedPullX, float unbiasedPullY)
Sets the unbiased pull.
ToolHandle< Trk::IExtrapolator > m_extrapolator
bool is_trt(Identifier id) const
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_sctClustersName
ElementLink< xAOD::TrackMeasurementValidationContainer > buildElementLink(const Trk::PrepRawData *, const std::vector< unsigned int > *, const xAOD::TrackMeasurementValidationContainer *) const
#define ATH_MSG_VERBOSE(x)
const std::string & key() const
Return the StoreGate ID for the referenced object.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
TrackStateOnSurfaceDecorator(const std::string &t, const std::string &n, const IInterface *p)
bool is_valid() const
Check if id is in a valid state.
SG::ReadHandleKey< std::vector< unsigned int > > m_sctMapName
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
const AtlasDetectorID * m_idHelper
SG::WriteHandleKey< xAOD::TrackStateValidationContainer > m_sctMsosName
virtual const S & associatedSurface() const override final
Access to the Surface method.
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.
Class providing comparison function, or relational definition, for sorting MeasurementBase objects.
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
@ kTRTusedHits_noHT_divByLDecor
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
@ Hole
A hole on the track - this is defined in the following way.
virtual float drifttime(float radius) const =0
drifttime for given radius
::StatusCode StatusCode
StatusCode definition for legacy code.
Handle class for adding a decoration to an object.
Handle class for adding a decoration to an object.
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
virtual const Surface & surface() const =0
Return surface associated with this detector element.
Gaudi::Property< std::vector< float > > m_pixelLayerRadii
ToolHandle< ITRT_ToT_dEdx > m_TRTdEdxTool
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
std::vector< SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > > m_trackTRTFloatDecorKeys
ToolHandle< Trk::IUpdator > m_updator
virtual bool isValid() override final
Can the handle be successfully dereferenced?
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_SCTDetEleCollKey
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
ElementLink implementation for ROOT usage.
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_trackTSOSMOSLinkDecorKey
unsigned short objIndex() const
object index in collection
const Perigee * perigeeParameters() const
return Perigee.
void setBiasedPull(float biasedPullX, float biasedPullY)
Sets the biased pull.
void setBiasedResidual(float biasedResidualX, float biasedResidualY)
Sets the biased residual.
Helper class to provide type-safe access to aux data.
ToolHandle< Trk::ITrackHoleSearchTool > m_holeSearchTool
value_type push_back(value_type pElem)
Add an element to the end of the collection.
StatusCode initialize(bool used=true)
bool isValid() const
check that both fields are set
Eigen::Matrix< double, 3, 1 > Vector3D
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const IdentContIndex & getHashAndIndex() const
void setLocalAngles(float localTheta, float localPhi)
Sets the local angles.
void setLocalPosition(float localX, float localY)
Sets the local position.
Gaudi::Property< std::string > m_sgName
const Amg::Vector3D & momentum() const
Access method for the momentum.
SG::WriteHandleKey< xAOD::TrackStateValidationContainer > m_trtMsosName
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
@ Biased
RP with track state including the hit.
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
#define ATH_MSG_WARNING(x)
void setDetElementId(uint64_t detElementId)
Sets the detector element identifier.
std::vector< SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > > m_trackPixFloatDecorKeys
SG::WriteHandleKey< xAOD::TrackStateValidationContainer > m_pixelMsosName
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_pixelClustersName
bool toPersistent()
Dummy function provinding the offline interface.
void setType(int type)
Sets the type (measurement, outlier, hole)
std::vector< SG::WriteDecorHandleKey< xAOD::EventInfo > > m_trtPhaseDecorKey
void setTrackMeasurementValidationLink(ElementLink< xAOD::TrackMeasurementValidationContainer > trackMeasurementValidationLink)
sets the link to the TrackMeasurementValidationContainer
Helper class to provide constant type-safe access to aux data.
Handle class for reading from StoreGate.
virtual const Amg::Vector3D & globalPosition() const override final
return the global position of this RIO_OnTrack
unsigned int indexOfMaxAssignProb() const
Index of the ROT with the highest assignment probability.
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_trtDCName
unsigned short collHash() const
Accessor to hash, obj index and combined index.
bool isShared(const PrepRawData &prd) const
does this PRD belong to more than one track?
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_containerName
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
ParticleHypothesis particleHypothesis() const
Returns the particle hypothesis used for Track fitting.