35 return StatusCode::SUCCESS;
66 double sigmaWidth = 0.0;
67 if(cent > 0) sigmaWidth = atan(sqrt(rad)/cent)*cosh(cl_eta);
68 sig_dec(*cl) = sigmaWidth;
79 if(!vxCont->empty()) pv0=(*vxCont)[0];
83 std::vector<ElementLink<xAOD::CaloClusterContainer>> > assoClustDecor(
m_assocClustersDecor, ctx);
89 unsigned int ntracks = 0;
93 std::vector< ElementLink< xAOD::CaloClusterContainer > > & caloClusterLinks = assoClustDecor(*tp);
95 if( tp->pt() <
m_ptCut )
continue;
99 ATH_MSG_DEBUG(
" Selected track " << tp->index() <<
" pt " << tp->pt() <<
" eta " << tp->eta() <<
" phi " << tp->phi() );
103 if (caloExtension ==
nullptr ) {
104 ATH_MSG_DEBUG(
" Selected track "<< tp->index() <<
" has no caloExtension ");
109 std::vector<const xAOD::CaloCluster*> assoClusters =
associatedClusters( *caloExtension, *clusterContainer, ctx);
113 caloClusterLinks.reserve( assoClusters.size() );
114 for(
const xAOD::CaloCluster* cluster : assoClusters) caloClusterLinks.emplace_back( *clusterContainer,cluster->index() );
125 if (caloExtension ==
nullptr ) trkParamDecor( *tp ) = nullptr ;
130 ATH_MSG_DEBUG(
" Total number of selected tracks: " << ntracks );
132 return StatusCode::SUCCESS;
136std::vector<const xAOD::CaloCluster* >
138 const EventContext& ctx)
const
140 std::vector<const xAOD::CaloCluster* > clusters;
144 ATH_MSG_WARNING(
" NO TrackParameters caloExtension.caloEntryLayerIntersection() ");
148 float eta = pars->position().eta();
149 float phi = pars->position().phi();
151 double uncertEta = 0.;
152 double uncertPhi = 0.;
153 if(pars->covariance()) {
154 uncertEta = -2.*sin(pars->position().theta()) / (cos(2.*pars->position().theta())-1.) * sqrt((*pars->covariance())(
Trk::theta,
Trk::theta));
157 double uncertExtrp = uncertEta*uncertEta + uncertPhi*uncertPhi;
171 cl_eta = detEta(*cl);
176 float dEta = cl_eta -
eta;
177 float dr2 = dPhi*dPhi+ dEta*dEta;
178 float dr2Cut = dr2Cut0;
182 double sigmaWidth = sig_acc(*cl);
183 double uncertClus = 2.*sigmaWidth*sigmaWidth;
184 if(uncertExtrp>uncertClus){
185 ATH_MSG_DEBUG(
"Extrapolation uncertainty larger than cluster width! Returning without association.");
189 dr2Cut = (sigmaWidth+uncertEta)*(sigmaWidth+uncertEta)+(sigmaWidth+uncertPhi)*(sigmaWidth+uncertPhi);
191 if( dr2 < dr2Cut ) clusters.push_back( cl );
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Base class for elements of a container that can have aux data.
Handle class for reading a decoration on an object.
Handle class for adding a decoration to an object.
SG::ConstAccessor< T, ALLOC > ConstAccessor
Handle class for reading a decoration on an object.
Handle class for adding a decoration to an object.
SG::ReadHandleKey< CaloExtensionCollection > m_caloExtKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_assocClustersDecor
Gaudi::Property< float > m_dr
virtual StatusCode execute(const EventContext &ctx) const override
ToolHandle< CP::ITrackVertexAssociationTool > m_trackvertexassoTool
SG::ReadHandleKey< xAOD::CaloClusterContainer > m_caloClusters
SG::ReadDecorHandleKey< xAOD::CaloClusterContainer > m_detectorEtaDecor
std::vector< const xAOD::CaloCluster * > associatedClusters(const Trk::CaloExtension &caloExtensions, const xAOD::CaloClusterContainer &allClusters, const EventContext &ctx) const
returns the clusters from allClusters which are close enough to caloExtensions
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleCollectionHandle
virtual StatusCode initialize() override
SG::ReadHandleKey< xAOD::VertexContainer > m_vertexContHandle
SG::WriteDecorHandleKey< xAOD::CaloClusterContainer > m_sigmaWidthKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_caloEntryParsDecor
Gaudi::Property< bool > m_useCovariance
Gaudi::Property< double > m_ptCut
Tracking class to hold the extrapolation through calorimeter Layers Both the caloEntryLayerIntersecti...
const TrackParameters * caloEntryLayerIntersection() const
access to intersection with the calorimeter entry layer return nullptr if the intersection failed
@ SECOND_R
Second Moment in .
@ CENTER_MAG
Cluster Centroid ( )
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
ParametersBase< TrackParametersDim, Charged > TrackParameters
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.