ATLAS Offline Software
Loading...
Searching...
No Matches
Trk::BeamspotVertexPreProcessor Class Reference

#include <BeamspotVertexPreProcessor.h>

Inheritance diagram for Trk::BeamspotVertexPreProcessor:
Collaboration diagram for Trk::BeamspotVertexPreProcessor:

Public Member Functions

 BeamspotVertexPreProcessor (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~BeamspotVertexPreProcessor ()
virtual StatusCode initialize () override
virtual StatusCode finalize () override
virtual DataVector< Track > * processTrackCollection (const DataVector< Track > *trks) override
 Main processing of track collection.
void accumulateVTX (AlignTrack *alignTrack) override
 methods added for the full VTX fit:
void solveVTX () override
virtual void printSummary () override
 Print processing summary to logfile.
virtual void setLogStream (std::ostream *os)
 sets the output stream for the logfile
virtual void setNtuple (TFile *)
 Sets output ntuple file, to be implemented if needed for detector-specific implementation.
virtual StatusCode fillNtuple ()
 writes tree and histogrms to ntuple
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

std::ostream * m_logStream = nullptr
 logfile output stream

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void prepareAllTracksVector ()
bool isAssociatedToPV (const Track *track, const xAOD::VertexContainer *vertices)
bool isAssociatedToVertex (const Track *track, const xAOD::Vertex *vertex)
bool selectVertices (const xAOD::Vertex *vtx) const
bool selectUpdatedVertices (const xAOD::Vertex *updatedVtx) const
const xAOD::VertexfindVertexCandidate (const Track *track) const
const VertexOnTrackprovideVotFromVertex (const Track *track, const xAOD::Vertex *&vtx) const
const VertexOnTrackprovideVotFromBeamspot (const Track *track) const
void provideVtxBeamspot (const AlignVertex *b, AmgSymMatrix(3) *q, Amg::Vector3D *v) const
const TrackdoConstraintRefit (ToolHandle< IGlobalTrackFitter > &fitter, const Track *track, const VertexOnTrack *vot, const ParticleHypothesis &particleHypothesis) const
bool doBeamspotConstraintTrackSelection (const Track *track)
AlignTrackdoTrackRefit (const Track *track)
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ToolHandle< IGlobalTrackFitterm_trackFitter
ToolHandle< IGlobalTrackFitterm_SLTrackFitter
ToolHandle< IExtrapolatorm_extrapolator
ToolHandle< InDet::IInDetTrackSelectionToolm_trkSelector
ToolHandle< InDet::IInDetTrackSelectionToolm_BSTrackSelector
ToolHandle< ITrackToVertexIPEstimatorm_trackToVertexIPEstimatorTool
PublicToolHandle< IAlignModuleToolm_alignModuleTool
 Pointer to AlignModuleTool.
SG::ReadCondHandleKey< InDet::BeamSpotDatam_beamSpotKey
SG::ReadHandleKey< xAOD::VertexContainerm_PVContainerName
BooleanProperty m_runOutlierRemoval
IntegerProperty m_particleNumber
BooleanProperty m_doTrkSelection
BooleanProperty m_doBSTrackSelection
BooleanProperty m_doAssociatedToPVSelection
UnsignedIntegerProperty m_constraintMode {this, "ConstraintMode", 0}
std::vector< std::pair< const xAOD::Vertex *, std::vector< VxTrackAtVertex > > > m_allTracksVector
BooleanProperty m_doBeamspotConstraint
BooleanProperty m_doPrimaryVertexConstraint
BooleanProperty m_doFullVertexConstraint
BooleanProperty m_doNormalRefit
DoubleProperty m_maxPt
BooleanProperty m_refitTracks
BooleanProperty m_storeFitMatrices
BooleanProperty m_useSingleFitter
DoubleProperty m_BSScalingFactor
DoubleProperty m_PVScalingFactor
IntegerProperty m_minTrksInVtx
int m_nTracks = 0
std::vector< int > m_trackTypeCounter {}
int m_nFailedNormalRefits = 0
int m_nFailedBSRefits = 0
int m_nFailedPVRefits = 0
DataVector< AlignVertexm_AlignVertices
 collection of AlignVertices used in FullVertex constraint option
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 52 of file BeamspotVertexPreProcessor.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ BeamspotVertexPreProcessor()

Trk::BeamspotVertexPreProcessor::BeamspotVertexPreProcessor ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 35 of file BeamspotVertexPreProcessor.cxx.

38 : AthAlgTool(type,name,parent)
40{
41 declareInterface<IAlignTrackPreProcessor>(this);
42}
AthAlgTool()
Default constructor:
@ NTrackTypes
total number of track types
Definition AlignTrack.h:53

◆ ~BeamspotVertexPreProcessor()

Trk::BeamspotVertexPreProcessor::~BeamspotVertexPreProcessor ( )
virtualdefault

Member Function Documentation

◆ accumulateVTX()

void Trk::BeamspotVertexPreProcessor::accumulateVTX ( AlignTrack * alignTrack)
overridevirtual

methods added for the full VTX fit:

Reimplemented from Trk::IAlignTrackPreProcessor.

Definition at line 836 of file BeamspotVertexPreProcessor.cxx.

836 {
837
838 if( !m_doFullVertexConstraint ) return;
839
840 AlignVertex* alignVertex = alignTrack->getVtx();
841
842 ATH_MSG_DEBUG( " In accumulateVTX ");
843 if( !alignVertex ) {
844 ATH_MSG_DEBUG( "This alignTrack is not associated to any vertex -> return. ");
845 return;
846 }
847
848 // get pointers so we can reuse them if they're valid
849 const Amg::MatrixX * ptrWeights = alignTrack->weightMatrix();
850 const Amg::MatrixX * ptrWeightsFD = alignTrack->weightMatrixFirstDeriv();
851 const Amg::VectorX * ptrResiduals = alignTrack->residualVector();
852 const std::vector<AlignModuleDerivatives> * ptrDerivs = alignTrack->derivatives();
853
854 // check if pointers are valid
855 if (!ptrWeights || !ptrWeightsFD || !ptrResiduals || !ptrDerivs) {
856 ATH_MSG_ERROR("something missing from alignTrack!");
857 if (!ptrWeights) ATH_MSG_ERROR("no weights!");
858 if (!ptrWeightsFD) ATH_MSG_ERROR("no weights for first deriv!");
859 if (!ptrResiduals) ATH_MSG_ERROR("no residuals!");
860 if (!ptrDerivs) ATH_MSG_ERROR("no derivatives!");
861 return;
862 }
863
864 // get vectors
865 const Amg::VectorX& residuals = *ptrResiduals;
866 std::vector<AlignModuleDerivatives> derivatives = *ptrDerivs;
867
868 // get weight matrices
869 const Amg::MatrixX& weights = *ptrWeights;
870 const Amg::MatrixX& weightsFirstDeriv = *ptrWeightsFD;
871 ATH_MSG_VERBOSE("weights="<<weights);
872 ATH_MSG_VERBOSE("weightsFirstDeriv="<<weightsFirstDeriv);
873
874 // get all alignPars and all derivatives
875 ATH_MSG_DEBUG("accumulateVTX: The derivative vector size is " << derivatives.size() );
876
877 std::vector<const Amg::VectorX*> allDerivatives[3];
878 Amg::VectorX VTXDerivatives[3];
879 const int WSize(weights.cols());
880 Amg::MatrixX WF(3,WSize);
881 std::vector<AlignModuleVertexDerivatives> derivX;
882
883 for (const auto& deriv : derivatives) {
884 // get AlignModule
885 const AlignModule* module=deriv.first;
886
887 // get alignment parameters
888 if( module ) {
889 Amg::MatrixX F(3,WSize);
890 const std::vector<Amg::VectorX>& deriv_vec = deriv.second;
891 ATH_MSG_VERBOSE( "accumulateVTX: The deriv_vec size is " << deriv_vec.size() );
892 DataVector<AlignPar>* alignPars = m_alignModuleTool->getAlignPars(module);
893 int nModPars = alignPars->size();
894 if ((nModPars+3) != std::ssize(deriv_vec)) {
895 ATH_MSG_ERROR("accumulateVTX: Derivatives w.r.t. the vertex seem to be missing");
896 return;
897 }
898 for (int i=0;i<3;i++) {
899 allDerivatives[i].push_back(&deriv_vec[nModPars+i]);
900 for (int j=0;j<WSize;j++) {
901 F(i,j) = deriv_vec[nModPars+i][j];
902 }
903 }
904
905 // prepare the X object in the AlignVertex:
906 WF += F * weights;
907
908 } else {
909 ATH_MSG_ERROR("accumulateVTX: Derivatives do not have a valid pointer to the module.");
910 return;
911 }
912 }
913
914
915 // second loop to fill the X object:
916 for (const auto& deriv : derivatives) {
917 // get AlignModule
918 const AlignModule* module=deriv.first;
919
920 // get alignment parameters
921 if( module ) {
922 const std::vector<Amg::VectorX>& deriv_vec = deriv.second;
923 std::vector<Amg::VectorX> drdaWF;
924 ATH_MSG_DEBUG("accumulateVTX: The deriv_vec size is "
925 << deriv_vec.size());
926 DataVector<AlignPar>* alignPars = m_alignModuleTool->getAlignPars(module);
927 int nModPars = alignPars->size();
928 if ((nModPars + 3) != std::ssize(deriv_vec)) {
930 "accumulateVTX: Derivatives w.r.t. the vertex seem to be missing");
931 return;
932 }
933 drdaWF.reserve(nModPars);
934 for (int i = 0; i < nModPars; i++) {
935 drdaWF.emplace_back(2.0 * WF * deriv_vec[i]);
936 }
937 ATH_MSG_DEBUG("accumulateVTX: derivX incremented by: " << drdaWF);
938 // now add contribution from this track to the X object:
939 derivX.emplace_back(module,std::move(drdaWF));
940
941 } else {
942 ATH_MSG_ERROR("accumulateVTX: Derivatives do not have a valid pointer to the module.");
943 return;
944 }
945 }
946
947 // prepare derivatives w.r.t. the vertex position:
948 int nmodules = allDerivatives[0].size();
949 ATH_MSG_DEBUG("accumulateVTX: allDerivatives size is " << nmodules);
950 for( int ii=0; ii<3; ++ii ) {
951 VTXDerivatives[ii] = (*(allDerivatives[ii])[0]);
952 for( int jj=1; jj<nmodules; ++jj ) {
953 VTXDerivatives[ii] += (*(allDerivatives[ii])[jj]);
954 }
955 }
956
957 AmgVector(3) vtxV;
958 AmgSymMatrix(3) vtxM;
959
960 Amg::VectorX RHM= weightsFirstDeriv * residuals;
961 ATH_MSG_DEBUG("RHM: "<<RHM);
962
963 for (int ipar=0;ipar<3;ipar++) {
964
965 // calculate first derivative
966 Amg::MatrixX derivativesT = (VTXDerivatives[ipar]).transpose();
967 ATH_MSG_DEBUG("derivativesT (size "<<derivativesT.cols()<<"): "<<derivativesT);
968
969 Amg::MatrixX tempV = (2.* derivativesT * RHM);
970 vtxV[ipar] = tempV(0,0);
971
972 for (int jpar=ipar;jpar<3;jpar++) {
973
974 // calculate second derivatives
975 Amg::MatrixX RHM2 = weights * (VTXDerivatives[jpar]);
976
977 Amg::MatrixX tempM = (2.* derivativesT * RHM2);
978 vtxM(ipar,jpar) = tempM(0,0);
979
980 }
981
982 }
983
984 // increment the vtx algebra objects:
985
986 alignVertex->incrementVector(vtxV);
987 alignVertex->incrementMatrix(vtxM);
988 // ATH_MSG_DEBUG("accumulateVTX: derivX size = "<< derivX->size());
989 alignVertex->addDerivatives(&derivX);
990
991}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
#define AmgSymMatrix(dim)
#define AmgVector(rows)
#define F(x, y, z)
Definition MD5.cxx:112
size_type size() const noexcept
Returns the number of elements in the collection.
PublicToolHandle< IAlignModuleTool > m_alignModuleTool
Pointer to AlignModuleTool.
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, Eigen::Dynamic, 1 > VectorX
Dynamic Vector - dynamic allocation.
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ doBeamspotConstraintTrackSelection()

bool Trk::BeamspotVertexPreProcessor::doBeamspotConstraintTrackSelection ( const Track * track)
private

Definition at line 559 of file BeamspotVertexPreProcessor.cxx.

559 {
560
561 const xAOD::VertexContainer* vertices = nullptr;
562 const xAOD::Vertex* vertex = nullptr;
563 bool haveVertex = false;
564
565 // retrieve the primary vertex if needed
567
568 const EventContext& ctx = Gaudi::Hive::currentContext();
569 SG::ReadHandle<xAOD::VertexContainer> vtxReadHandle(m_PVContainerName, ctx);
570 if(!vtxReadHandle.isValid()){
571 ATH_MSG_ERROR("Cannot retrieve the \'"<<m_PVContainerName<<"\' vertex collection from StoreGate");
573 } else {
574 vertices = vtxReadHandle.cptr();
575 // if there is no vertex, we can't associate the tracks to it
576 if(vertices) {
577 ATH_MSG_DEBUG("Primary vertex collection for this event has "<<vertices->size()<<" vertices");
578 if (vertices->size()<2){
579 ATH_MSG_DEBUG("Only Dummy vertex present, no Primary vertices.");
580 } else {
581 vertex = (*vertices)[0];
582 haveVertex = true;
583 }
584 }
585 else
586 ATH_MSG_DEBUG("Could not retrieve primary vertex collection from the StoreGate");
587 }
588 }
589
590
591 if( ( m_doAssociatedToPVSelection && haveVertex && vertex && isAssociatedToPV(track,vertices) ) ||
592 ( m_doBSTrackSelection && m_BSTrackSelector->accept(*track) ) ){
593
594 if (m_maxPt > 0 )
595 {
596 const Trk::Perigee* perigee = track->perigeeParameters();
597 if (!perigee) {
598 ATH_MSG_DEBUG("NO perigee on this track");
599 return false;
600 }
601 const double qoverP = perigee->parameters()[Trk::qOverP] * 1000.;
602 double pt = 0.;
603 if (qoverP != 0 )
604 pt = std::abs(1.0/qoverP)*sin(perigee->parameters()[Trk::theta]);
605 ATH_MSG_DEBUG( " pt : "<< pt );
606 if (pt > m_maxPt)
607 return false;
608 } //maxPt selection
609
610 ATH_MSG_DEBUG("this track passes the beamspot track selection, will do beamspot constraint on it ");
611 return true;
612 }
613 else return false;
614}
SG::ReadHandleKey< xAOD::VertexContainer > m_PVContainerName
bool isAssociatedToPV(const Track *track, const xAOD::VertexContainer *vertices)
ToolHandle< InDet::IInDetTrackSelectionTool > m_BSTrackSelector
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
@ theta
Definition ParamDefs.h:66
@ qOverP
perigee
Definition ParamDefs.h:67
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
Vertex_v1 Vertex
Define the latest version of the vertex class.

◆ doConstraintRefit()

const Track * Trk::BeamspotVertexPreProcessor::doConstraintRefit ( ToolHandle< IGlobalTrackFitter > & fitter,
const Track * track,
const VertexOnTrack * vot,
const ParticleHypothesis & particleHypothesis ) const
private

Definition at line 521 of file BeamspotVertexPreProcessor.cxx.

526{
527 const EventContext& ctx = Gaudi::Hive::currentContext();
528 const Track* newTrack = nullptr;
529
530 if(vot){
531
532 std::vector<const MeasurementBase *> measurementCollection;
533 measurementCollection.push_back(vot);
534 // add all other measurements
535 const auto &measurements = *(track->measurementsOnTrack());
536 for(const MeasurementBase* meas : measurements)
537 measurementCollection.push_back(meas);
538
540 // get track parameters at the vertex:
541 const PerigeeSurface& surface=vot->associatedSurface();
542 ATH_MSG_DEBUG(" Track reference surface will be: " << surface);
543 const TrackParameters* parsATvertex=m_extrapolator->extrapolateTrack(ctx, *track, surface).release();
544
545 ATH_MSG_DEBUG(" Track will be refitted at this surface ");
546 newTrack = (fitter->fit(ctx, measurementCollection,
547 *parsATvertex, m_runOutlierRemoval, particleHypothesis)).release();
548 delete parsATvertex;
549 } else {
550 newTrack = (fitter->fit(ctx,
551 measurementCollection, *(track->trackParameters()->front()),
552 m_runOutlierRemoval, particleHypothesis)).release();
553 }
554 }
555
556 return newTrack;
557}
bool fit(const LArSamples::AbsShape &data, const AbsShape &reference, double &k, double &deltaT, double &chi2, const ScaledErrorData *sed=0) const
ToolHandle< IExtrapolator > m_extrapolator
const ShapeFitter * fitter
ParametersBase< TrackParametersDim, Charged > TrackParameters

◆ doTrackRefit()

AlignTrack * Trk::BeamspotVertexPreProcessor::doTrackRefit ( const Track * track)
private

Definition at line 617 of file BeamspotVertexPreProcessor.cxx.

617 {
618
619 AlignTrack * alignTrack = nullptr;
620 const Track* newTrack = nullptr;
621 const VertexOnTrack* vot = nullptr;
622 const xAOD::Vertex* vtx = nullptr;
624 // configuration of the material effects needed for track fitter
626
627 const EventContext& ctx = Gaudi::Hive::currentContext();
628
629 // initialization the GX2 track fitter
630 ToolHandle<Trk::IGlobalTrackFitter> fitter = m_trackFitter;
633
634 IGlobalTrackFitter::AlignmentCache alignCache;
635
636 ATH_MSG_DEBUG( "doTrackRefit ** START ** ");
637
639 vot = provideVotFromVertex(track, vtx);
640 if( !vot ) ATH_MSG_INFO( "VoT not found for this track! ");
641 if( !vtx ) ATH_MSG_INFO( "VTX pointer not found for this track! ");
642 if(vot){
643 newTrack = doConstraintRefit(fitter, track, vot, particleHypothesis);
645 // this track failed the PV constraint reift
646 if (!newTrack) {
648 ATH_MSG_DEBUG("VertexConstraint track refit failed! ");
649 }
650 }
651 }
652
654 vot = provideVotFromBeamspot(track);
655 if(vot){
656 newTrack = doConstraintRefit(fitter, track, vot, particleHypothesis);
658 // this track failed the BS constraint refit
659 if (!newTrack) {
661 ATH_MSG_DEBUG("BSConstraint track refit failed! ");
662 }
663 }
664 }
665
666
667 //Refit to get full fitter covariance matrix
668 // @TODO This is a little inefficienct and should
669 // be addressed when the alignment code is made MT safe
670 if(newTrack){
671 Trk::Track* tmpTrk = fitter->alignmentFit(ctx,alignCache,*newTrack,m_runOutlierRemoval,particleHypothesis);
672 delete newTrack;
673 newTrack = tmpTrk;
674 if(!tmpTrk){
676 {
678 ATH_MSG_DEBUG("VertexConstraint track refit2 failed! ");
679 }else if(type == AlignTrack::BeamspotConstrained)
680 {
682 ATH_MSG_DEBUG("BSConstraint track refit2 failed! ");
683 }
684 }
685 }
686
687 if(!newTrack && m_doNormalRefit){
688 newTrack = fitter->alignmentFit(ctx,alignCache,*track,m_runOutlierRemoval,particleHypothesis);
690 // this track failed the normal refit
691 if (!newTrack) {
693 ATH_MSG_DEBUG("Normal track refit failed! ");
694 }
695 }
696
697
698
699
700
701 if(newTrack) {
702 alignTrack = new AlignTrack(*newTrack);
703 // set original track pointer
704 alignTrack->setOriginalTrack(track);
705 // set the refit type
706 alignTrack->setType(type);
707
708
709 if (msgLvl(MSG::DEBUG) || msgLvl(MSG::VERBOSE)) {
710 ATH_MSG_DEBUG("before refit: "<< *track);
711 if (msgLvl(MSG::VERBOSE)) AlignTrack::dumpLessTrackInfo(*track,msg(MSG::DEBUG));
712
713 ATH_MSG_DEBUG("after refit: "<< *newTrack);
714 if (msgLvl(MSG::VERBOSE)) AlignTrack::dumpLessTrackInfo(*newTrack,msg(MSG::DEBUG));
715 }
716
717 if(AlignTrack::VertexConstrained == type || AlignTrack::BeamspotConstrained == type) alignTrack->doFindPerigee();
718
719 if (m_storeFitMatrices) {
720 alignTrack->setFullCovarianceMatrix(alignCache.m_fullCovarianceMatrix.get());
721 alignTrack->setDerivativeMatrix(alignCache.m_derivMatrix.get());
722 }
723 delete newTrack;
724
725 if( m_doFullVertexConstraint && vtx!=nullptr && type == AlignTrack::VertexConstrained ){
726 // try to log the track-vertex association in the AlignVertex object:
727 bool ifound=false;
728 for (AlignVertex* ivtx : m_AlignVertices) {
729 if( (ivtx->originalVertex())==vtx ) {
730 ifound = true;
731 }
732 }
733 if( !ifound ) {
734 AlignVertex* avtx=new AlignVertex(vtx);
735 ATH_MSG_DEBUG(" New AlignVertex has ben created.");
736
737 // Beam Spot constraint on the vertex:
738 if( m_doBeamspotConstraint && (xAOD::VxType::PriVtx == vtx->vertexType() || xAOD::VxType::PileUp == vtx->vertexType()) && vtx->vxTrackAtVertex().size()>4 ) { // a beam line verex
739 ATH_MSG_DEBUG(" The Beam Spot constraint will be added to the vertex.." );
740 AmgSymMatrix(3) qtemp;
741 AmgVector(3) vtemp;
742 provideVtxBeamspot(avtx, &qtemp, &vtemp);
743 (qtemp)(2,2) = 1000000.0; // disable Z constraint
744 avtx->setConstraint( &qtemp, &vtemp);
745 }
746
747 m_AlignVertices.push_back(avtx);
748 }
749 }
750 // increment counters
751 ++m_trackTypeCounter[type];
752 ++m_nTracks;
753
754 }
755 // garbage collection:
756 if(vot) delete vot;
757
758 ATH_MSG_DEBUG( "doTrackRefit ** COMPLETED ** ");
759 return alignTrack;
760}
#define ATH_MSG_INFO(x)
if(pathvar)
bool msgLvl(const MSG::Level lvl) const
MsgStream & msg() const
@ NormalRefitted
normally refitted, without adding any pseudo-measurement
Definition AlignTrack.h:48
@ Unknown
default type
Definition AlignTrack.h:46
@ BeamspotConstrained
refitted with beamspot constraint
Definition AlignTrack.h:49
@ VertexConstrained
refitted with vertex constraint
Definition AlignTrack.h:50
static void dumpLessTrackInfo(const Track &track, MsgStream &msg)
dump less track information
bool isSLTrack() const
method to determine whether a straight line track or not
bool doBeamspotConstraintTrackSelection(const Track *track)
const VertexOnTrack * provideVotFromVertex(const Track *track, const xAOD::Vertex *&vtx) const
ToolHandle< IGlobalTrackFitter > m_trackFitter
void provideVtxBeamspot(const AlignVertex *b, AmgSymMatrix(3) *q, Amg::Vector3D *v) const
DataVector< AlignVertex > m_AlignVertices
collection of AlignVertices used in FullVertex constraint option
const Track * doConstraintRefit(ToolHandle< IGlobalTrackFitter > &fitter, const Track *track, const VertexOnTrack *vot, const ParticleHypothesis &particleHypothesis) const
ToolHandle< IGlobalTrackFitter > m_SLTrackFitter
const VertexOnTrack * provideVotFromBeamspot(const Track *track) const
VxType::VertexType vertexType() const
The type of the vertex.
std::vector< Trk::VxTrackAtVertex > & vxTrackAtVertex()
Non-const access to the VxTrackAtVertex vector.
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
@ PileUp
Pile-up vertex.
@ PriVtx
Primary vertex.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ fillNtuple()

virtual StatusCode Trk::IAlignTrackPreProcessor::fillNtuple ( )
inlinevirtualinherited

writes tree and histogrms to ntuple

Definition at line 54 of file IAlignTrackPreProcessor.h.

54{ return StatusCode::SUCCESS; }

◆ finalize()

StatusCode Trk::BeamspotVertexPreProcessor::finalize ( )
overridevirtual

Definition at line 1037 of file BeamspotVertexPreProcessor.cxx.

1038{
1039 ATH_MSG_INFO("BeamspotVertexPreProcessor::finalize()");
1040
1041 return StatusCode::SUCCESS;
1042}

◆ findVertexCandidate()

const xAOD::Vertex * Trk::BeamspotVertexPreProcessor::findVertexCandidate ( const Track * track) const
private

Definition at line 275 of file BeamspotVertexPreProcessor.cxx.

275 {
276
277 const xAOD::Vertex* findVxCandidate = nullptr;
278
279 for(const auto& thisPair : m_allTracksVector){
280 auto iVxTrackBegin = thisPair.second.begin();
281 auto iVxTrackEnd = thisPair.second.end();
282 Trk::CompareTwoTracks thisCompare(track, "compareAddress");
283
284 auto findResult = std::find_if(iVxTrackBegin, iVxTrackEnd, thisCompare);
285
286 if(findResult != iVxTrackEnd){
287 ATH_MSG_DEBUG("the found VxTrackAtVertex: "<<*findResult);
288 findVxCandidate = thisPair.first;
289 break;
290 }
291 }
292
293 return findVxCandidate;
294}
std::vector< std::pair< const xAOD::Vertex *, std::vector< VxTrackAtVertex > > > m_allTracksVector

◆ initialize()

StatusCode Trk::BeamspotVertexPreProcessor::initialize ( )
overridevirtual

Definition at line 49 of file BeamspotVertexPreProcessor.cxx.

50{
51 ATH_MSG_INFO("BeamspotVertexPreProcessor::initialize()");
52
53 // configure main track selector if requested
54 if (!m_trkSelector.empty()) {
55 if (m_trkSelector.retrieve().isFailure())
56 ATH_MSG_ERROR("Failed to retrieve tool "<<m_trkSelector<<". No Track Selection will be done.");
57 else
58 ATH_MSG_INFO("Retrieved " << m_trkSelector);
59 }
60
61 if (m_refitTracks) {
62 // configure main track fitter
63 if(m_trackFitter.retrieve().isFailure()) {
64 ATH_MSG_FATAL("Could not get " << m_trackFitter);
65 return StatusCode::FAILURE;
66 }
67 ATH_MSG_INFO("Retrieved " << m_trackFitter);
68
69 // configure straight-line track fitter if requested
70 if (!m_useSingleFitter) {
71 if (m_SLTrackFitter.retrieve().isFailure()) {
72 ATH_MSG_FATAL("Could not get " << m_SLTrackFitter);
73 return StatusCode::FAILURE;
74 }
75 ATH_MSG_INFO("Retrieved " << m_SLTrackFitter);
76 }
77
78 // TrackToVertexIPEstimator
79 if (m_trackToVertexIPEstimatorTool.retrieve().isFailure()) {
80 ATH_MSG_FATAL("Can not retrieve TrackToVertexIPEstimator of type " << m_trackToVertexIPEstimatorTool.typeAndName());
81 return StatusCode::FAILURE;
82 } else {
83 ATH_MSG_INFO ( "Retrieved TrackToVertexIPEstimator Tool " << m_trackToVertexIPEstimatorTool.typeAndName() );
84 }
85
86 // configure Atlas extrapolator
87 if (m_extrapolator.retrieve().isFailure()) {
88 ATH_MSG_FATAL("Failed to retrieve tool "<<m_extrapolator);
89 return StatusCode::FAILURE;
90 }
91 ATH_MSG_INFO("Retrieved " << m_extrapolator);
92
93 // configure beam-spot conditions service
94 ATH_CHECK(m_beamSpotKey.initialize());
95
96 ATH_CHECK(m_PVContainerName.initialize());
97
98 // configure beam-spot track selector if requested
100 if(m_BSTrackSelector.empty()) {
101 ATH_MSG_FATAL("Requested BeamSpot track selection but Track Selector not configured");
102 return StatusCode::FAILURE;
103 }
104 if (m_BSTrackSelector.retrieve().isFailure()) {
105 ATH_MSG_FATAL("Could not get " << m_BSTrackSelector);
106 return StatusCode::FAILURE;
107 }
108 ATH_MSG_INFO("Retrieved " << m_BSTrackSelector);
109 }
110
111 } // end of 'if (m_refitTracks)'
112
113 else if (m_doBeamspotConstraint) {
114 ATH_MSG_FATAL("Requested beam-spot constraint but RefitTracks is False.");
115 return StatusCode::FAILURE;
116 }
117
119 if ( m_alignModuleTool.retrieve().isFailure() ) {
120 ATH_MSG_FATAL("Failed to retrieve tool " << m_alignModuleTool);
121 return StatusCode::FAILURE;
122 }
123 else {
124 ATH_MSG_INFO("Retrieved tool " << m_alignModuleTool);
125
126 ATH_MSG_INFO("************************************************************************");
127 ATH_MSG_INFO("* *");
128 ATH_MSG_INFO("* You have requested the Full Vertex Constraint option. *");
129 ATH_MSG_INFO("* It is your duty to assure that all detector elements *");
130 ATH_MSG_INFO("* used for track fitting are also loaded in the alignment framework!!! *");
131 ATH_MSG_INFO("* *");
132 ATH_MSG_INFO("* Also make sure the accurate track covariance matrix *");
133 ATH_MSG_INFO("* is returned by the GlobalChi2Fitter! *");
134 ATH_MSG_INFO("* *");
135 ATH_MSG_INFO("************************************************************************");
136 }
137
138 }
139 return StatusCode::SUCCESS;
140}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
ToolHandle< InDet::IInDetTrackSelectionTool > m_trkSelector
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
ToolHandle< ITrackToVertexIPEstimator > m_trackToVertexIPEstimatorTool

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & IAlignTrackPreProcessor::interfaceID ( )
inlinestaticinherited

Definition at line 70 of file IAlignTrackPreProcessor.h.

71 {
73 }
static const InterfaceID IID_Trk_IAlignTrackPreProcessor("IAlignTrackPreProcessor", 1, 0)

◆ isAssociatedToPV()

bool Trk::BeamspotVertexPreProcessor::isAssociatedToPV ( const Track * track,
const xAOD::VertexContainer * vertices )
private

Definition at line 218 of file BeamspotVertexPreProcessor.cxx.

219{
220 if(!vertices) return false;
221
222 for (const xAOD::Vertex* vtx : *vertices) {
223 if (vtx->vertexType() != 1) break;
224 if (isAssociatedToVertex(track, vtx)) return true;
225 }
226
227 return false;
228}
bool isAssociatedToVertex(const Track *track, const xAOD::Vertex *vertex)

◆ isAssociatedToVertex()

bool Trk::BeamspotVertexPreProcessor::isAssociatedToVertex ( const Track * track,
const xAOD::Vertex * vertex )
private

Definition at line 232 of file BeamspotVertexPreProcessor.cxx.

233{
234 if(!vertex) return false;
235
236 std::vector<VxTrackAtVertex > vertexTracks = vertex->vxTrackAtVertex();
237 Trk::CompareTwoTracks thisCompare(track, "compareAddress");
238
239 std::vector<VxTrackAtVertex >::const_iterator iVxTrackBegin = vertexTracks.begin();
240 std::vector<VxTrackAtVertex >::const_iterator iVxTrackEnd = vertexTracks.end();
241
242 std::vector<VxTrackAtVertex>::const_iterator findResult = std::find_if(iVxTrackBegin, iVxTrackEnd, std::move(thisCompare));
243
244 return findResult != iVxTrackEnd;
245}

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ prepareAllTracksVector()

void Trk::BeamspotVertexPreProcessor::prepareAllTracksVector ( )
private

Definition at line 248 of file BeamspotVertexPreProcessor.cxx.

248 {
249
250 // do clean up firstly
251 m_allTracksVector.clear();
252
253 const EventContext& ctx = Gaudi::Hive::currentContext();
254 SG::ReadHandle<xAOD::VertexContainer> vtxReadHandle(m_PVContainerName, ctx);
255
256 for(const xAOD::Vertex* vtx : *vtxReadHandle){
257 if(!selectVertices(vtx)) {
258 ATH_MSG_DEBUG("this vertex did not pass the primary vertex selection...");
259 continue;
260 }
261 if (vtx->vxTrackAtVertexAvailable()){
262 std::vector<VxTrackAtVertex> vtxTracks = vtx->vxTrackAtVertex();
263 m_allTracksVector.emplace_back(vtx, vtxTracks);
264 }
265 else {
266 ATH_MSG_DEBUG("this vertex did not pass the vxTrackAtVertexAvailable() call...");
267 continue;
268 }
269 }
270
271 ATH_MSG_DEBUG("m_allTracksVector size: "<<m_allTracksVector.size());
272}
bool selectVertices(const xAOD::Vertex *vtx) const

◆ printSummary()

void Trk::BeamspotVertexPreProcessor::printSummary ( )
overridevirtual

Print processing summary to logfile.

Reimplemented from Trk::IAlignTrackPreProcessor.

Definition at line 1013 of file BeamspotVertexPreProcessor.cxx.

1014{
1015 if(m_logStream) {
1016
1017 *m_logStream<<"*************************************************************"<<std::endl;
1018 *m_logStream<<"****** BeamspotVertexPreProcessor summary ******"<<std::endl;
1019 *m_logStream<<"*"<<std::endl;
1020 *m_logStream<<"* number of created AlignTracks : "<<m_nTracks<<std::endl;
1021 if(m_nTracks>0) {
1022 *m_logStream<<"* --------------------------------------------"<<std::endl;
1023 for(int i=0; i<AlignTrack::NTrackTypes; ++i) {
1024 if(m_trackTypeCounter[i]>0)
1025 *m_logStream<<"* "<<(AlignTrack::AlignTrackType)i<<": "<<m_trackTypeCounter[i]<<std::endl;
1026 }
1027 }
1028 *m_logStream<<"*"<<std::endl;
1029 *m_logStream<<"* number of failed normal refits : " << m_nFailedNormalRefits << std::endl;
1030 *m_logStream<<"* number of failed refits with primary vertex : " << m_nFailedPVRefits << std::endl;
1031 *m_logStream<<"* number of failed refits with beam-spot : " << m_nFailedBSRefits << std::endl;
1032 *m_logStream<<"*"<<std::endl;
1033 }
1034}
std::ostream * m_logStream
logfile output stream

◆ processTrackCollection()

DataVector< Track > * Trk::BeamspotVertexPreProcessor::processTrackCollection ( const DataVector< Track > * trks)
overridevirtual

Main processing of track collection.

The method should create AlignTracks but fill them into a collection of Tracks. The reason is that AlignTracks are needed further in the alignment processing but we want to store the newly created TrackCollection into StoreGate.

Implements Trk::IAlignTrackPreProcessor.

Definition at line 766 of file BeamspotVertexPreProcessor.cxx.

767{
768 ATH_MSG_DEBUG("BeamspotVertexPreProcessor::processTrackCollection()");
769
770 if( !tracks || (tracks->empty()) )
771 return nullptr;
772
773 // Clear the AlignVertex container (will destruct the objects it owns as well!)
774 m_AlignVertices.clear();
775
778
779 // the output collection of AlignTracks
780 // we define it as collection of Tracks but fill AlignTracks inside
781 DataVector<Track> * newTrks = new DataVector<Track>;
782
783 int index(0);
784 // loop over tracks
785 ATH_MSG_DEBUG( "Starting loop on input track collection: "<<index);
786 for (const auto* track : *tracks){
787 ++index;
788 ATH_MSG_DEBUG("Processing track "<<index);
789 AlignTrack * alignTrack = nullptr;
790 if (not track) continue;
791
792 // check whether the track passes the basic selection
793 if (m_doTrkSelection) {
794 ATH_MSG_DEBUG( "Testing track selection on track: "<<index);
795 if ((not m_trkSelector.empty()) and (not m_trkSelector->accept(*track))) continue;
796 } // appliying track selection
797
798 if(m_refitTracks){
799 ATH_MSG_DEBUG( "Refitting track: "<<index );
800 alignTrack = doTrackRefit(track);
801
802 // 2nd track check after refit
803 if(alignTrack && !m_trkSelector.empty()) {
804 // refitted track loses the summary information, restoring it here
805 alignTrack->setTrackSummary( std::make_unique<Trk::TrackSummary> (*track->trackSummary()) );
806 // do not check for FullVertex tracks:
807 if( !(alignTrack->getVtx()) ) {
808 if( m_doTrkSelection && !m_trkSelector->accept(*alignTrack))
809 continue;
810 }
811 }
812 else {
813 ATH_MSG_DEBUG( "Refit of track " << index << " ended with no alignTrack" );
814 }
815 } else {
816 ATH_MSG_DEBUG( "No Track refit for track " << index << " --> building new aligntrack");
817 alignTrack = new AlignTrack(*track);
818 alignTrack->setOriginalTrack(track);
819 alignTrack->setType(AlignTrack::Original);
820 }
821 // add the new align track to the collection
822 if (alignTrack) newTrks->push_back(alignTrack);
823 } // end of loop over tracks
824
825 ATH_MSG_INFO( "Processing of input track collection completed (size: " << tracks->size() << "). Size of the alignTrack collection: " << newTrks->size() );
826 // delete the collection if it's empty
827 if (newTrks->empty()) {
828 delete newTrks;
829 return nullptr;
830 }
831
832 return newTrks;
833}
value_type push_back(value_type pElem)
Add an element to the end of the collection.
bool empty() const noexcept
Returns true if the collection is empty.
@ Original
not refitted, just copy constructed from original Track
Definition AlignTrack.h:47
AlignTrack * doTrackRefit(const Track *track)
str index
Definition DeMoScan.py:362

◆ provideVotFromBeamspot()

const VertexOnTrack * Trk::BeamspotVertexPreProcessor::provideVotFromBeamspot ( const Track * track) const
private

Definition at line 407 of file BeamspotVertexPreProcessor.cxx.

407 {
408
409 const EventContext& ctx = Gaudi::Hive::currentContext();
410 const VertexOnTrack * vot = nullptr;
411 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
412 Amg::Vector3D bpos = beamSpotHandle->beamPos();
413 ATH_MSG_DEBUG("beam spot: "<<bpos);
414 float beamSpotX = bpos.x();
415 float beamSpotY = bpos.y();
416 float beamSpotZ = bpos.z();
417 float beamTiltX = beamSpotHandle->beamTilt(0);
418 float beamTiltY = beamSpotHandle->beamTilt(1);
419 float beamSigmaX = m_BSScalingFactor * beamSpotHandle->beamSigma(0);
420 float beamSigmaY = m_BSScalingFactor * beamSpotHandle->beamSigma(1);
421
422 ATH_MSG_DEBUG("running refit with beam-spot");
423
424 float z0 = track->perigeeParameters()->parameters()[Trk::z0];
425 float beamX = beamSpotX + std::tan(beamTiltX) * (z0-beamSpotZ);
426 float beamY = beamSpotY + std::tan(beamTiltY) * (z0-beamSpotZ);
427 Amg::Vector3D BSC(beamX, beamY, z0);
428 ATH_MSG_DEBUG("constructing beam point (x,y,z) = ( "<<beamX<<" , "<<beamY<<" , "<<z0<<" )");
429 std::optional<PerigeeSurface> surface = std::nullopt;
430 Amg::MatrixX errorMatrix;
431 LocalParameters beamSpotParameters;
432
433 // covariance matrix of the beam-spot
434 AmgSymMatrix(2) beamSpotCov;
435 beamSpotCov.setZero();
436 beamSpotCov(0,0) = beamSigmaX * beamSigmaX;
437 beamSpotCov(1,1) = beamSigmaY * beamSigmaY;
438
439 if(m_constraintMode == 0u) {
440
441 const Amg::Vector3D& globPos(BSC);
442 surface.emplace(globPos);
443
444 // create a measurement for the beamspot
445 DefinedParameter Par0(0.,Trk::d0);
446 beamSpotParameters = LocalParameters(Par0);
447
448 // calculate perigee parameters wrt. beam-spot
449 const Perigee* perigee = nullptr;
450 std::unique_ptr<const Trk::TrackParameters> tmp =
451 m_extrapolator->extrapolateTrack(ctx, *track, *surface);
452 // pass ownership only if of correct type
453 if (tmp && tmp->associatedSurface().type() == Trk::SurfaceType::Perigee) {
454 perigee = static_cast<const Perigee*>(tmp.release());
455 }
456
457 if (!perigee) {
458 const Perigee * trackPerigee = track->perigeeParameters();
459 if ( trackPerigee && trackPerigee->associatedSurface() == *surface )
460 perigee = trackPerigee->clone();
461 }
462 if (not perigee){
463 ATH_MSG_WARNING("Perigee is nullptr in "<<__FILE__<<":"<<__LINE__);
464 return vot;
465 }
466
467 Eigen::Matrix<double,1,2> jacobian;
468 jacobian.setZero();
469 //perigee is dereferenced here, must not be nullptr
470 double ptInv = 1./perigee->momentum().perp();
471 jacobian(0,0) = -ptInv * perigee->momentum().y();
472 jacobian(0,1) = ptInv * perigee->momentum().x();
473
474 errorMatrix = Amg::MatrixX( jacobian*(beamSpotCov*jacobian.transpose()));
475 if( errorMatrix.cols() != 1 )
476 ATH_MSG_FATAL("Similarity transpose done incorrectly");
477 delete perigee;
478 }
479 if (surface){
480 vot = new VertexOnTrack(std::move(beamSpotParameters),
481 std::move(errorMatrix),
482 *surface);
483 } else {
484 ATH_MSG_WARNING("surface is nullptr in "<<__FILE__<<":"<<__LINE__);
485 }
486 if (vot){
487 ATH_MSG_DEBUG(" the VertexOnTrack objects created from BeamSpot are " << *vot);
488 }
489
490 return vot;
491}
#define ATH_MSG_WARNING(x)
Eigen::Matrix< double, 3, 1 > Vector3D
@ u
Enums for curvilinear frames.
Definition ParamDefs.h:77
@ d0
Definition ParamDefs.h:63
@ z0
Definition ParamDefs.h:64
std::pair< double, ParamDefs > DefinedParameter
Typedef to of a std::pair<double, ParamDefs> to identify a passed-through double as a specific type o...

◆ provideVotFromVertex()

const VertexOnTrack * Trk::BeamspotVertexPreProcessor::provideVotFromVertex ( const Track * track,
const xAOD::Vertex *& vtx ) const
private

vertex as perigeeSurface

Definition at line 297 of file BeamspotVertexPreProcessor.cxx.

297 {
298
299 const EventContext& ctx = Gaudi::Hive::currentContext();
300 const VertexOnTrack * vot = nullptr;
301 const xAOD::Vertex* tmpVtx = nullptr;
302 const xAOD::Vertex* updatedVtx = nullptr;
303
304 const xAOD::Vertex* findVtx = findVertexCandidate(track);
305
306 ATH_MSG_DEBUG("findVtx in provideVotFromVertex: "<<findVtx);
307
308 if (!( nullptr==findVtx) ) {
309 vtx = findVtx;
310
312 updatedVtx = new xAOD::Vertex(*vtx);
313 } else {
314 tmpVtx = new xAOD::Vertex(*vtx);
315 updatedVtx = m_trackToVertexIPEstimatorTool->getUnbiasedVertex(track->perigeeParameters(), vtx );
316 }
317
318
319 if(updatedVtx){
320
321 if(!selectUpdatedVertices(updatedVtx)){
322 delete tmpVtx;
323 if ( tmpVtx!= updatedVtx) delete updatedVtx;
324 return vot;
325 }
326
328 ATH_MSG_DEBUG(" updated Vertex by KalmanVertexUpdator: "<<updatedVtx);
329
331 Amg::Vector3D globPos(updatedVtx->position()); //look
332 const PerigeeSurface surface(globPos);
333 const Perigee* perigee = nullptr;
334 std::unique_ptr<const Trk::TrackParameters> tmp =
335 m_extrapolator->extrapolateTrack(ctx, *track, surface);
336 //pass ownership only if of correct type
337 if (tmp && tmp->associatedSurface().type() == Trk::SurfaceType::Perigee) {
338 perigee = static_cast<const Perigee*> (tmp.release());
339 }
340 if (!perigee) {
341 const Perigee * trackPerigee = track->perigeeParameters();
342 if ( trackPerigee && trackPerigee->associatedSurface() == surface )
343 perigee = trackPerigee->clone();
344 }
345 //if the perigee is still nonsense ...
346 if (not perigee){
347 //clean up
348 if (updatedVtx!= tmpVtx) delete updatedVtx;
349 delete tmpVtx;
350 //WARNING
351 ATH_MSG_WARNING("Perigee is nullptr in "<<__FILE__<<":"<<__LINE__);
352 //exit
353 return vot;
354 }
355
356 // create the Jacobian matrix from Cartisian to Perigee
357 AmgMatrix(2,3) Jacobian;
358 Jacobian.setZero();
359 //perigee is dereferenced here, must not be nullptr!
360 double ptInv = 1./perigee->momentum().perp();
361 Jacobian(0,0) = -ptInv*perigee->momentum().y();
362 Jacobian(0,1) = ptInv*perigee->momentum().x();
363 Jacobian(1,2) = 1.0;
364
365 ATH_MSG_DEBUG(" Jacobian matrix from Cartesian to Perigee: "<< Jacobian);
366
367 AmgSymMatrix(3) vtxCov = updatedVtx->covariancePosition();
369
370 Amg::MatrixX errorMatrix;
372 AmgSymMatrix(3) tmpCov;
373 tmpCov.setZero();
374 tmpCov(0,0) = 1.e-10 ;
375 tmpCov(1,1) = 1.e-10;
376 tmpCov(2,2) = 1.e-10;
377 errorMatrix = Amg::MatrixX( tmpCov.similarity(Jacobian) );
378 } else {
379 errorMatrix = Amg::MatrixX( vtxCov.similarity(Jacobian) );
380 }
381 delete perigee;
382 perigee = nullptr;
383
384 // in fact, in most of the normal situation, pointer tmpVtx and updatedVtx are the same. You can check the source code.
385 if (tmpVtx != updatedVtx){
386 delete updatedVtx;
387 }
388 delete tmpVtx;
389 tmpVtx=nullptr;
390 updatedVtx=nullptr;
391
392 LocalParameters localParams = Trk::LocalParameters(Amg::Vector2D(0,0));
393
394 // VertexOnTrack Object
395 vot = new VertexOnTrack(std::move(localParams), std::move(errorMatrix), surface);
396 ATH_MSG_DEBUG("the VertexOnTrack created from vertex: "<<*vot);
397 }
398 }
399 //belt and braces approach
400 delete tmpVtx;
401 if ( tmpVtx!= updatedVtx) delete updatedVtx;
402 return vot;
403
404}
Scalar perp() const
perp method - perpendicular length
Matrix< Scalar, OtherDerived::RowsAtCompileTime, OtherDerived::RowsAtCompileTime > similarity(const MatrixBase< OtherDerived > &m) const
similarity method : yields ms = m*s*m^T
#define AmgMatrix(rows, cols)
const xAOD::Vertex * findVertexCandidate(const Track *track) const
bool selectUpdatedVertices(const xAOD::Vertex *updatedVtx) const
const Amg::Vector3D & position() const
Returns the 3-pos.
Eigen::Matrix< double, 2, 1 > Vector2D
@ x
Definition ParamDefs.h:55
@ y
Definition ParamDefs.h:56

◆ provideVtxBeamspot()

void Trk::BeamspotVertexPreProcessor::provideVtxBeamspot ( const AlignVertex * b,
AmgSymMatrix(3) * q,
Amg::Vector3D * v ) const
private

Definition at line 494 of file BeamspotVertexPreProcessor.cxx.

494 {
495
496 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey };
497 Amg::Vector3D bpos = beamSpotHandle->beamPos();
498 ATH_MSG_DEBUG("beam spot: "<<bpos);
499 float beamSpotX = bpos.x();
500 float beamSpotY = bpos.y();
501 float beamSpotZ = bpos.z();
502 float beamTiltX = beamSpotHandle->beamTilt(0);
503 float beamTiltY = beamSpotHandle->beamTilt(1);
504 float beamSigmaX = m_BSScalingFactor * beamSpotHandle->beamSigma(0);
505 float beamSigmaY = m_BSScalingFactor * beamSpotHandle->beamSigma(1);
506 float beamSigmaZ = m_BSScalingFactor * beamSpotHandle->beamSigma(2);
507
508 float z0 = b->originalPosition()->z();
509 (*v)(0) = beamSpotX + std::tan(beamTiltX) * (z0-beamSpotZ);
510 (*v)(1) = beamSpotY + std::tan(beamTiltY) * (z0-beamSpotZ);
511 (*v)(2) = beamSpotZ;
512 (*q)(0,0) = beamSigmaX*beamSigmaX;
513 (*q)(1,1) = beamSigmaY*beamSigmaY;
514 (*q)(2,2) = beamSigmaZ*beamSigmaZ;
515
516 ATH_MSG_DEBUG("VTX constraint point (x,y,z) = ( "<< (*v)[0] <<" , "<< (*v)[1] <<" , "<< (*v)[2] <<" )");
517 ATH_MSG_DEBUG("VTX constraint size (x,y,z) = ( "<< beamSigmaX <<" , "<< beamSigmaY <<" , "<< beamSigmaZ <<" )");
518}
@ v
Definition ParamDefs.h:78

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ selectUpdatedVertices()

bool Trk::BeamspotVertexPreProcessor::selectUpdatedVertices ( const xAOD::Vertex * updatedVtx) const
private

Definition at line 196 of file BeamspotVertexPreProcessor.cxx.

196 {
197
198 if (vtx->numberDoF() <= 0){
199 ATH_MSG_WARNING(" VERY STRANGE!!! , the updated vertex has been rejected as non-positive DoF: "<< vtx->numberDoF() <<" the type of this vertex:"<< vtx->vertexType() );
200 return false;
201 }
202
203 if (static_cast<int>(vtx->vxTrackAtVertex().size()) < m_minTrksInVtx){
204 ATH_MSG_DEBUG(" the updated vertex has been rejected as vxTrackAtVertex size: "<< vtx->vxTrackAtVertex().size() );
205 return false;
206 }
207
208 if ((vtx->covariancePosition())(0,0)<=0 ||
209 (vtx->covariancePosition())(1,1)<=0 ||
210 (vtx->covariancePosition())(2,2)<=0){
211 ATH_MSG_WARNING(" VERY STRANGE!!! , this updated vertex has been rejected as negative diagonal error matrix ");
212 return false;
213 }
214 return true;
215}

◆ selectVertices()

bool Trk::BeamspotVertexPreProcessor::selectVertices ( const xAOD::Vertex * vtx) const
private

Definition at line 178 of file BeamspotVertexPreProcessor.cxx.

178 {
179
180 if(0 == vtx->vertexType()) {
181 ATH_MSG_DEBUG("this primary vertex has been rejected as type dummy");
182 return false;
183 }
184 if (vtx->numberDoF() <= 0){
185 ATH_MSG_WARNING(" VERY STRANGE!!!, this primary vertex has been rejected as non-positive DoF "<< vtx->numberDoF() <<" the type of this vertex: "<< vtx->vertexType() );
186 return false;
187 }
188 if (static_cast<int>(vtx->vxTrackAtVertex().size()) < m_minTrksInVtx){
189 ATH_MSG_DEBUG(" this primary vertex vxTrackAtVertex size: "<< vtx->vxTrackAtVertex().size() );
190 return false;
191 }
192 return true;
193}
float numberDoF() const
Returns the number of degrees of freedom of the vertex fit as float.

◆ setLogStream()

virtual void Trk::IAlignTrackPreProcessor::setLogStream ( std::ostream * os)
inlinevirtualinherited

sets the output stream for the logfile

Definition at line 48 of file IAlignTrackPreProcessor.h.

◆ setNtuple()

virtual void Trk::IAlignTrackPreProcessor::setNtuple ( TFile * )
inlinevirtualinherited

Sets output ntuple file, to be implemented if needed for detector-specific implementation.

Definition at line 51 of file IAlignTrackPreProcessor.h.

51{}

◆ solveVTX()

void Trk::BeamspotVertexPreProcessor::solveVTX ( )
overridevirtual

Reimplemented from Trk::IAlignTrackPreProcessor.

Definition at line 995 of file BeamspotVertexPreProcessor.cxx.

995 {
996
998 ATH_MSG_DEBUG("In solveVTX. Number of vertices = " << m_AlignVertices.size() );
999 for (AlignVertex* ivtx : m_AlignVertices) {
1000 if( ivtx->Ntracks()>1 ) {
1001 ivtx->fitVertex();
1002 } else {
1003 ATH_MSG_WARNING("This vertex contains " << ivtx->Ntracks() << " tracks. No solution possible.");
1004 }
1005
1006 ATH_MSG_DEBUG( "This vertex contains " << ivtx->Ntracks() << " tracks.");
1007 if( msgLvl(MSG::DEBUG) ) ivtx->dump(msg(MSG::DEBUG));
1008 }
1009 }
1010}

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, and AthCheckedComponent<::AthAlgTool >.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_alignModuleTool

PublicToolHandle<IAlignModuleTool> Trk::BeamspotVertexPreProcessor::m_alignModuleTool
private
Initial value:
{
this, "AlignModuleTool", "InDet::InDetAlignModuleTool/InDetAlignModuleTool"}

Pointer to AlignModuleTool.

Definition at line 111 of file BeamspotVertexPreProcessor.h.

111 {
112 this, "AlignModuleTool", "InDet::InDetAlignModuleTool/InDetAlignModuleTool"};

◆ m_AlignVertices

DataVector<AlignVertex> Trk::BeamspotVertexPreProcessor::m_AlignVertices
private

collection of AlignVertices used in FullVertex constraint option

Definition at line 168 of file BeamspotVertexPreProcessor.h.

◆ m_allTracksVector

std::vector< std::pair< const xAOD::Vertex*, std::vector<VxTrackAtVertex> > > Trk::BeamspotVertexPreProcessor::m_allTracksVector
private

Definition at line 134 of file BeamspotVertexPreProcessor.h.

◆ m_beamSpotKey

SG::ReadCondHandleKey<InDet::BeamSpotData> Trk::BeamspotVertexPreProcessor::m_beamSpotKey
private
Initial value:
{
this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" }

Definition at line 114 of file BeamspotVertexPreProcessor.h.

114 {
115 this, "BeamSpotKey", "BeamSpotData", "SG key for beam spot" };

◆ m_BSScalingFactor

DoubleProperty Trk::BeamspotVertexPreProcessor::m_BSScalingFactor
private
Initial value:
{this, "BeamspotScalingFactor", 1.,
"scaling factor on beasmpot width"}

Definition at line 154 of file BeamspotVertexPreProcessor.h.

154 {this, "BeamspotScalingFactor", 1.,
155 "scaling factor on beasmpot width"};

◆ m_BSTrackSelector

ToolHandle<InDet::IInDetTrackSelectionTool> Trk::BeamspotVertexPreProcessor::m_BSTrackSelector
private
Initial value:
{
this, "BSConstraintTrackSelector", "",
"new track selector tool for tracks to be used with beam-spot constraint"}

Definition at line 104 of file BeamspotVertexPreProcessor.h.

104 {
105 this, "BSConstraintTrackSelector", "",
106 "new track selector tool for tracks to be used with beam-spot constraint"};

◆ m_constraintMode

UnsignedIntegerProperty Trk::BeamspotVertexPreProcessor::m_constraintMode {this, "ConstraintMode", 0}
private

Definition at line 132 of file BeamspotVertexPreProcessor.h.

132{this, "ConstraintMode", 0};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doAssociatedToPVSelection

BooleanProperty Trk::BeamspotVertexPreProcessor::m_doAssociatedToPVSelection
private
Initial value:
{
this, "DoAssociatedToPVSelection", true,
"the selection mechanism that only use the tracks associated to PV"}

Definition at line 128 of file BeamspotVertexPreProcessor.h.

128 {
129 this, "DoAssociatedToPVSelection", true,
130 "the selection mechanism that only use the tracks associated to PV"};

◆ m_doBeamspotConstraint

BooleanProperty Trk::BeamspotVertexPreProcessor::m_doBeamspotConstraint
private
Initial value:
{this, "DoBSConstraint", true,
"Constrain tracks to the beamspot (x,y) position"}

Definition at line 136 of file BeamspotVertexPreProcessor.h.

136 {this, "DoBSConstraint", true,
137 "Constrain tracks to the beamspot (x,y) position"};

◆ m_doBSTrackSelection

BooleanProperty Trk::BeamspotVertexPreProcessor::m_doBSTrackSelection
private
Initial value:
{this, "DoBSTrackSelection", false,
"the selection mechanism which is based on cutting the perigee parameters, pt, etc."}

Definition at line 126 of file BeamspotVertexPreProcessor.h.

126 {this, "DoBSTrackSelection", false,
127 "the selection mechanism which is based on cutting the perigee parameters, pt, etc."};

◆ m_doFullVertexConstraint

BooleanProperty Trk::BeamspotVertexPreProcessor::m_doFullVertexConstraint
private
Initial value:
{this, "DoFullVertex", false,
"Full 3D vertex constraint. Note DoPVConstraint needs to be set to true to use this option. If DoBSConstraint vertex position will be constrained to the BS"}

Definition at line 140 of file BeamspotVertexPreProcessor.h.

140 {this, "DoFullVertex", false,
141 "Full 3D vertex constraint. Note DoPVConstraint needs to be set to true to use this option. If DoBSConstraint vertex position will be constrained to the BS"};

◆ m_doNormalRefit

BooleanProperty Trk::BeamspotVertexPreProcessor::m_doNormalRefit
private
Initial value:
{this, "doNormalRefit", true,
"provide tracks in the case failed BS, PV and FullVertex constraints."}

Definition at line 142 of file BeamspotVertexPreProcessor.h.

142 {this, "doNormalRefit", true,
143 "provide tracks in the case failed BS, PV and FullVertex constraints."};

◆ m_doPrimaryVertexConstraint

BooleanProperty Trk::BeamspotVertexPreProcessor::m_doPrimaryVertexConstraint
private
Initial value:
{this, "DoPVConstraint", false,
"Constrain tracks to the associated primary vertex (x,y,z) position"}

Definition at line 138 of file BeamspotVertexPreProcessor.h.

138 {this, "DoPVConstraint", false,
139 "Constrain tracks to the associated primary vertex (x,y,z) position"};

◆ m_doTrkSelection

BooleanProperty Trk::BeamspotVertexPreProcessor::m_doTrkSelection
private
Initial value:
{this, "DoTrackSelection", true,
"to activate the preprocessor track selection"}

Definition at line 124 of file BeamspotVertexPreProcessor.h.

124 {this, "DoTrackSelection", true,
125 "to activate the preprocessor track selection"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extrapolator

ToolHandle<IExtrapolator> Trk::BeamspotVertexPreProcessor::m_extrapolator
private
Initial value:
{
this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator"}

Definition at line 100 of file BeamspotVertexPreProcessor.h.

100 {
101 this, "Extrapolator", "Trk::Extrapolator/AtlasExtrapolator"};

◆ m_logStream

std::ostream* Trk::IAlignTrackPreProcessor::m_logStream = nullptr
protectedinherited

logfile output stream

Definition at line 66 of file IAlignTrackPreProcessor.h.

◆ m_maxPt

DoubleProperty Trk::BeamspotVertexPreProcessor::m_maxPt
private
Initial value:
{this, "maxPt", 0.,
"Max pT range for refitting tracks"}

Definition at line 145 of file BeamspotVertexPreProcessor.h.

145 {this, "maxPt", 0.,
146 "Max pT range for refitting tracks"};

◆ m_minTrksInVtx

IntegerProperty Trk::BeamspotVertexPreProcessor::m_minTrksInVtx
private
Initial value:
{this, "MinTrksInVtx", 3,
"requirement to the minimal number of tracks in the vertex"}

Definition at line 159 of file BeamspotVertexPreProcessor.h.

159 {this, "MinTrksInVtx", 3,
160 "requirement to the minimal number of tracks in the vertex"};

◆ m_nFailedBSRefits

int Trk::BeamspotVertexPreProcessor::m_nFailedBSRefits = 0
private

Definition at line 165 of file BeamspotVertexPreProcessor.h.

◆ m_nFailedNormalRefits

int Trk::BeamspotVertexPreProcessor::m_nFailedNormalRefits = 0
private

Definition at line 164 of file BeamspotVertexPreProcessor.h.

◆ m_nFailedPVRefits

int Trk::BeamspotVertexPreProcessor::m_nFailedPVRefits = 0
private

Definition at line 166 of file BeamspotVertexPreProcessor.h.

◆ m_nTracks

int Trk::BeamspotVertexPreProcessor::m_nTracks = 0
private

Definition at line 162 of file BeamspotVertexPreProcessor.h.

◆ m_particleNumber

IntegerProperty Trk::BeamspotVertexPreProcessor::m_particleNumber
private
Initial value:
{this, "ParticleNumber", 3,
"type of material interaction in extrapolation, 3=pion, 0=non-interacting"}

Definition at line 122 of file BeamspotVertexPreProcessor.h.

122 {this, "ParticleNumber", 3,
123 "type of material interaction in extrapolation, 3=pion, 0=non-interacting"};

◆ m_PVContainerName

SG::ReadHandleKey<xAOD::VertexContainer> Trk::BeamspotVertexPreProcessor::m_PVContainerName
private
Initial value:
{
this, "PVContainerName", "PrimaryVertices"}

Definition at line 117 of file BeamspotVertexPreProcessor.h.

117 {
118 this, "PVContainerName", "PrimaryVertices"};

◆ m_PVScalingFactor

DoubleProperty Trk::BeamspotVertexPreProcessor::m_PVScalingFactor
private
Initial value:
{this, "PrimaryVertexScalingFactor", 1.,
"scaling factor on primary vertex position error"}

Definition at line 156 of file BeamspotVertexPreProcessor.h.

156 {this, "PrimaryVertexScalingFactor", 1.,
157 "scaling factor on primary vertex position error"};

◆ m_refitTracks

BooleanProperty Trk::BeamspotVertexPreProcessor::m_refitTracks
private
Initial value:
{this, "RefitTracks", true,
"flag to refit tracks"}

Definition at line 148 of file BeamspotVertexPreProcessor.h.

148 {this, "RefitTracks", true,
149 "flag to refit tracks"};

◆ m_runOutlierRemoval

BooleanProperty Trk::BeamspotVertexPreProcessor::m_runOutlierRemoval
private
Initial value:
{this, "RunOutlierRemoval", false,
"switch whether to run outlier logics or not"}

Definition at line 120 of file BeamspotVertexPreProcessor.h.

120 {this, "RunOutlierRemoval", false,
121 "switch whether to run outlier logics or not"};

◆ m_SLTrackFitter

ToolHandle<IGlobalTrackFitter> Trk::BeamspotVertexPreProcessor::m_SLTrackFitter
private
Initial value:
{
this, "SLTrackFitter", "", "straight line track fitter"}

Definition at line 98 of file BeamspotVertexPreProcessor.h.

98 {
99 this, "SLTrackFitter", "", "straight line track fitter"};

◆ m_storeFitMatrices

BooleanProperty Trk::BeamspotVertexPreProcessor::m_storeFitMatrices
private
Initial value:
{this, "StoreFitMatrices", true,
"flag to store derivative and covariance matrices after refit"}

Definition at line 150 of file BeamspotVertexPreProcessor.h.

150 {this, "StoreFitMatrices", true,
151 "flag to store derivative and covariance matrices after refit"};

◆ m_trackFitter

ToolHandle<IGlobalTrackFitter> Trk::BeamspotVertexPreProcessor::m_trackFitter
private
Initial value:
{
this, "TrackFitter", "Trk::GlobalChi2Fitter/InDetTrackFitter",
"normal track fitter"}

Definition at line 95 of file BeamspotVertexPreProcessor.h.

95 {
96 this, "TrackFitter", "Trk::GlobalChi2Fitter/InDetTrackFitter",
97 "normal track fitter"};

◆ m_trackToVertexIPEstimatorTool

ToolHandle<ITrackToVertexIPEstimator> Trk::BeamspotVertexPreProcessor::m_trackToVertexIPEstimatorTool
private
Initial value:
{
this, "TrackToVertexIPEstimatorTool", ""}

Definition at line 107 of file BeamspotVertexPreProcessor.h.

107 {
108 this, "TrackToVertexIPEstimatorTool", ""};

◆ m_trackTypeCounter

std::vector<int> Trk::BeamspotVertexPreProcessor::m_trackTypeCounter {}
private

Definition at line 163 of file BeamspotVertexPreProcessor.h.

163{};

◆ m_trkSelector

ToolHandle<InDet::IInDetTrackSelectionTool> Trk::BeamspotVertexPreProcessor::m_trkSelector
private
Initial value:
{
this, "TrackSelector", "", "new track selector tool"}

Definition at line 102 of file BeamspotVertexPreProcessor.h.

102 {
103 this, "TrackSelector", "", "new track selector tool"};

◆ m_useSingleFitter

BooleanProperty Trk::BeamspotVertexPreProcessor::m_useSingleFitter
private
Initial value:
{this, "UseSingleFitter", false,
"only use 1 fitter for refitting track"}

Definition at line 152 of file BeamspotVertexPreProcessor.h.

152 {this, "UseSingleFitter", false,
153 "only use 1 fitter for refitting track"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: