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 50 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 * )
overridevirtual

methods added for the full VTX fit:

Reimplemented from Trk::IAlignTrackPreProcessor.

Definition at line 833 of file BeamspotVertexPreProcessor.cxx.

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

556 {
557
558 const xAOD::VertexContainer* vertices = nullptr;
559 const xAOD::Vertex* vertex = nullptr;
560 bool haveVertex = false;
561
562 // retrieve the primary vertex if needed
564
565 const EventContext& ctx = Gaudi::Hive::currentContext();
566 SG::ReadHandle<xAOD::VertexContainer> vtxReadHandle(m_PVContainerName, ctx);
567 if(!vtxReadHandle.isValid()){
568 ATH_MSG_ERROR("Cannot retrieve the \'"<<m_PVContainerName<<"\' vertex collection from StoreGate");
570 } else {
571 vertices = vtxReadHandle.cptr();
572 // if there is no vertex, we can't associate the tracks to it
573 if(vertices) {
574 ATH_MSG_DEBUG("Primary vertex collection for this event has "<<vertices->size()<<" vertices");
575 if (vertices->size()<2){
576 ATH_MSG_DEBUG("Only Dummy vertex present, no Primary vertices.");
577 } else {
578 vertex = (*vertices)[0];
579 haveVertex = true;
580 }
581 }
582 else
583 ATH_MSG_DEBUG("Could not retrieve primary vertex collection from the StoreGate");
584 }
585 }
586
587
588 if( ( m_doAssociatedToPVSelection && haveVertex && vertex && isAssociatedToPV(track,vertices) ) ||
589 ( m_doBSTrackSelection && m_BSTrackSelector->accept(*track) ) ){
590
591 if (m_maxPt > 0 )
592 {
593 const Trk::Perigee* perigee = track->perigeeParameters();
594 if (!perigee) {
595 ATH_MSG_DEBUG("NO perigee on this track");
596 return false;
597 }
598 const double qoverP = perigee->parameters()[Trk::qOverP] * 1000.;
599 double pt = 0.;
600 if (qoverP != 0 )
601 pt = std::abs(1.0/qoverP)*sin(perigee->parameters()[Trk::theta]);
602 ATH_MSG_DEBUG( " pt : "<< pt );
603 if (pt > m_maxPt)
604 return false;
605 } //maxPt selection
606
607 ATH_MSG_DEBUG("this track passes the beamspot track selection, will do beamspot constraint on it ");
608 return true;
609 }
610 else return false;
611}
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 518 of file BeamspotVertexPreProcessor.cxx.

523{
524 const EventContext& ctx = Gaudi::Hive::currentContext();
525 const Track* newTrack = nullptr;
526
527 if(vot){
528
529 std::vector<const MeasurementBase *> measurementCollection;
530 measurementCollection.push_back(vot);
531 // add all other measurements
532 const auto &measurements = *(track->measurementsOnTrack());
533 for(const MeasurementBase* meas : measurements)
534 measurementCollection.push_back(meas);
535
537 // get track parameters at the vertex:
538 const PerigeeSurface& surface=vot->associatedSurface();
539 ATH_MSG_DEBUG(" Track reference surface will be: " << surface);
540 const TrackParameters* parsATvertex=m_extrapolator->extrapolateTrack(ctx, *track, surface).release();
541
542 ATH_MSG_DEBUG(" Track will be refitted at this surface ");
543 newTrack = (fitter->fit(ctx, measurementCollection,
544 *parsATvertex, m_runOutlierRemoval, particleHypothesis)).release();
545 delete parsATvertex;
546 } else {
547 newTrack = (fitter->fit(ctx,
548 measurementCollection, *(track->trackParameters()->front()),
549 m_runOutlierRemoval, particleHypothesis)).release();
550 }
551 }
552
553 return newTrack;
554}
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 614 of file BeamspotVertexPreProcessor.cxx.

614 {
615
616 AlignTrack * alignTrack = nullptr;
617 const Track* newTrack = nullptr;
618 const VertexOnTrack* vot = nullptr;
619 const xAOD::Vertex* vtx = nullptr;
621 // configuration of the material effects needed for track fitter
623
624 const EventContext& ctx = Gaudi::Hive::currentContext();
625
626 // initialization the GX2 track fitter
627 ToolHandle<Trk::IGlobalTrackFitter> fitter = m_trackFitter;
630
631 IGlobalTrackFitter::AlignmentCache alignCache;
632
633 ATH_MSG_DEBUG( "doTrackRefit ** START ** ");
634
636 vot = provideVotFromVertex(track, vtx);
637 if( !vot ) ATH_MSG_INFO( "VoT not found for this track! ");
638 if( !vtx ) ATH_MSG_INFO( "VTX pointer not found for this track! ");
639 if(vot){
640 newTrack = doConstraintRefit(fitter, track, vot, particleHypothesis);
642 // this track failed the PV constraint reift
643 if (!newTrack) {
645 ATH_MSG_DEBUG("VertexConstraint track refit failed! ");
646 }
647 }
648 }
649
651 vot = provideVotFromBeamspot(track);
652 if(vot){
653 newTrack = doConstraintRefit(fitter, track, vot, particleHypothesis);
655 // this track failed the BS constraint refit
656 if (!newTrack) {
658 ATH_MSG_DEBUG("BSConstraint track refit failed! ");
659 }
660 }
661 }
662
663
664 //Refit to get full fitter covariance matrix
665 // @TODO This is a little inefficienct and should
666 // be addressed when the alignment code is made MT safe
667 if(newTrack){
668 Trk::Track* tmpTrk = fitter->alignmentFit(ctx,alignCache,*newTrack,m_runOutlierRemoval,particleHypothesis);
669 delete newTrack;
670 newTrack = tmpTrk;
671 if(!tmpTrk){
673 {
675 ATH_MSG_DEBUG("VertexConstraint track refit2 failed! ");
676 }else if(type == AlignTrack::BeamspotConstrained)
677 {
679 ATH_MSG_DEBUG("BSConstraint track refit2 failed! ");
680 }
681 }
682 }
683
684 if(!newTrack && m_doNormalRefit){
685 newTrack = fitter->alignmentFit(ctx,alignCache,*track,m_runOutlierRemoval,particleHypothesis);
687 // this track failed the normal refit
688 if (!newTrack) {
690 ATH_MSG_DEBUG("Normal track refit failed! ");
691 }
692 }
693
694
695
696
697
698 if(newTrack) {
699 alignTrack = new AlignTrack(*newTrack);
700 // set original track pointer
701 alignTrack->setOriginalTrack(track);
702 // set the refit type
703 alignTrack->setType(type);
704
705
706 if (msgLvl(MSG::DEBUG) || msgLvl(MSG::VERBOSE)) {
707 ATH_MSG_DEBUG("before refit: "<< *track);
708 if (msgLvl(MSG::VERBOSE)) AlignTrack::dumpLessTrackInfo(*track,msg(MSG::DEBUG));
709
710 ATH_MSG_DEBUG("after refit: "<< *newTrack);
711 if (msgLvl(MSG::VERBOSE)) AlignTrack::dumpLessTrackInfo(*newTrack,msg(MSG::DEBUG));
712 }
713
714 if(AlignTrack::VertexConstrained == type || AlignTrack::BeamspotConstrained == type) alignTrack->doFindPerigee();
715
716 if (m_storeFitMatrices) {
717 alignTrack->setFullCovarianceMatrix(alignCache.m_fullCovarianceMatrix.get());
718 alignTrack->setDerivativeMatrix(alignCache.m_derivMatrix.get());
719 }
720 delete newTrack;
721
722 if( m_doFullVertexConstraint && vtx!=nullptr && type == AlignTrack::VertexConstrained ){
723 // try to log the track-vertex association in the AlignVertex object:
724 bool ifound=false;
725 for (AlignVertex* ivtx : m_AlignVertices) {
726 if( (ivtx->originalVertex())==vtx ) {
727 ifound = true;
728 }
729 }
730 if( !ifound ) {
731 AlignVertex* avtx=new AlignVertex(vtx);
732 ATH_MSG_DEBUG(" New AlignVertex has ben created.");
733
734 // Beam Spot constraint on the vertex:
735 if( m_doBeamspotConstraint && (xAOD::VxType::PriVtx == vtx->vertexType() || xAOD::VxType::PileUp == vtx->vertexType()) && vtx->vxTrackAtVertex().size()>4 ) { // a beam line verex
736 ATH_MSG_DEBUG(" The Beam Spot constraint will be added to the vertex.." );
737 AmgSymMatrix(3) qtemp;
738 AmgVector(3) vtemp;
739 provideVtxBeamspot(avtx, &qtemp, &vtemp);
740 (qtemp)(2,2) = 1000000.0; // disable Z constraint
741 avtx->setConstraint( &qtemp, &vtemp);
742 }
743
744 m_AlignVertices.push_back(avtx);
745 }
746 }
747 // increment counters
748 ++m_trackTypeCounter[type];
749 ++m_nTracks;
750
751 }
752 // garbage collection:
753 if(vot) delete vot;
754
755 ATH_MSG_DEBUG( "doTrackRefit ** COMPLETED ** ");
756 return alignTrack;
757}
#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 1034 of file BeamspotVertexPreProcessor.cxx.

1035{
1036 ATH_MSG_INFO("BeamspotVertexPreProcessor::finalize()");
1037
1038 return StatusCode::SUCCESS;
1039}

◆ 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, 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 1010 of file BeamspotVertexPreProcessor.cxx.

1011{
1012 if(m_logStream) {
1013
1014 *m_logStream<<"*************************************************************"<<std::endl;
1015 *m_logStream<<"****** BeamspotVertexPreProcessor summary ******"<<std::endl;
1016 *m_logStream<<"*"<<std::endl;
1017 *m_logStream<<"* number of created AlignTracks : "<<m_nTracks<<std::endl;
1018 if(m_nTracks>0) {
1019 *m_logStream<<"* --------------------------------------------"<<std::endl;
1020 for(int i=0; i<AlignTrack::NTrackTypes; ++i) {
1021 if(m_trackTypeCounter[i]>0)
1022 *m_logStream<<"* "<<(AlignTrack::AlignTrackType)i<<": "<<m_trackTypeCounter[i]<<std::endl;
1023 }
1024 }
1025 *m_logStream<<"*"<<std::endl;
1026 *m_logStream<<"* number of failed normal refits : " << m_nFailedNormalRefits << std::endl;
1027 *m_logStream<<"* number of failed refits with primary vertex : " << m_nFailedPVRefits << std::endl;
1028 *m_logStream<<"* number of failed refits with beam-spot : " << m_nFailedBSRefits << std::endl;
1029 *m_logStream<<"*"<<std::endl;
1030 }
1031}
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 763 of file BeamspotVertexPreProcessor.cxx.

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

404 {
405
406 const EventContext& ctx = Gaudi::Hive::currentContext();
407 const VertexOnTrack * vot = nullptr;
408 SG::ReadCondHandle<InDet::BeamSpotData> beamSpotHandle { m_beamSpotKey, ctx };
409 Amg::Vector3D bpos = beamSpotHandle->beamPos();
410 ATH_MSG_DEBUG("beam spot: "<<bpos);
411 float beamSpotX = bpos.x();
412 float beamSpotY = bpos.y();
413 float beamSpotZ = bpos.z();
414 float beamTiltX = beamSpotHandle->beamTilt(0);
415 float beamTiltY = beamSpotHandle->beamTilt(1);
416 float beamSigmaX = m_BSScalingFactor * beamSpotHandle->beamSigma(0);
417 float beamSigmaY = m_BSScalingFactor * beamSpotHandle->beamSigma(1);
418
419 ATH_MSG_DEBUG("running refit with beam-spot");
420
421 float z0 = track->perigeeParameters()->parameters()[Trk::z0];
422 float beamX = beamSpotX + std::tan(beamTiltX) * (z0-beamSpotZ);
423 float beamY = beamSpotY + std::tan(beamTiltY) * (z0-beamSpotZ);
424 Amg::Vector3D BSC(beamX, beamY, z0);
425 ATH_MSG_DEBUG("constructing beam point (x,y,z) = ( "<<beamX<<" , "<<beamY<<" , "<<z0<<" )");
426 std::optional<PerigeeSurface> surface = std::nullopt;
427 Amg::MatrixX errorMatrix;
428 LocalParameters beamSpotParameters;
429
430 // covariance matrix of the beam-spot
431 AmgSymMatrix(2) beamSpotCov;
432 beamSpotCov.setZero();
433 beamSpotCov(0,0) = beamSigmaX * beamSigmaX;
434 beamSpotCov(1,1) = beamSigmaY * beamSigmaY;
435
436 if(m_constraintMode == 0u) {
437
438 const Amg::Vector3D& globPos(BSC);
439 surface.emplace(globPos);
440
441 // create a measurement for the beamspot
442 DefinedParameter Par0(0.,Trk::d0);
443 beamSpotParameters = LocalParameters(Par0);
444
445 // calculate perigee parameters wrt. beam-spot
446 const Perigee* perigee = nullptr;
447 std::unique_ptr<const Trk::TrackParameters> tmp =
448 m_extrapolator->extrapolateTrack(ctx, *track, *surface);
449 // pass ownership only if of correct type
450 if (tmp && tmp->associatedSurface().type() == Trk::SurfaceType::Perigee) {
451 perigee = static_cast<const Perigee*>(tmp.release());
452 }
453
454 if (!perigee) {
455 const Perigee * trackPerigee = track->perigeeParameters();
456 if ( trackPerigee && trackPerigee->associatedSurface() == *surface )
457 perigee = trackPerigee->clone();
458 }
459 if (not perigee){
460 ATH_MSG_WARNING("Perigee is nullptr in "<<__FILE__<<":"<<__LINE__);
461 return vot;
462 }
463
464 Eigen::Matrix<double,1,2> jacobian;
465 jacobian.setZero();
466 //perigee is dereferenced here, must not be nullptr
467 double ptInv = 1./perigee->momentum().perp();
468 jacobian(0,0) = -ptInv * perigee->momentum().y();
469 jacobian(0,1) = ptInv * perigee->momentum().x();
470
471 errorMatrix = Amg::MatrixX( jacobian*(beamSpotCov*jacobian.transpose()));
472 if( errorMatrix.cols() != 1 )
473 ATH_MSG_FATAL("Similarity transpose done incorrectly");
474 delete perigee;
475 }
476 if (surface){
477 vot = new VertexOnTrack(std::move(beamSpotParameters),
478 std::move(errorMatrix),
479 *surface);
480 } else {
481 ATH_MSG_WARNING("surface is nullptr in "<<__FILE__<<":"<<__LINE__);
482 }
483 if (vot){
484 ATH_MSG_DEBUG(" the VertexOnTrack objects created from BeamSpot are " << *vot);
485 }
486
487 return vot;
488}
#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 return vot;
323
325 ATH_MSG_DEBUG(" updated Vertex by KalmanVertexUpdator: "<<updatedVtx);
326
328 Amg::Vector3D globPos(updatedVtx->position()); //look
329 const PerigeeSurface surface(globPos);
330 const Perigee* perigee = nullptr;
331 std::unique_ptr<const Trk::TrackParameters> tmp =
332 m_extrapolator->extrapolateTrack(ctx, *track, surface);
333 //pass ownership only if of correct type
334 if (tmp && tmp->associatedSurface().type() == Trk::SurfaceType::Perigee) {
335 perigee = static_cast<const Perigee*> (tmp.release());
336 }
337 if (!perigee) {
338 const Perigee * trackPerigee = track->perigeeParameters();
339 if ( trackPerigee && trackPerigee->associatedSurface() == surface )
340 perigee = trackPerigee->clone();
341 }
342 //if the perigee is still nonsense ...
343 if (not perigee){
344 //clean up
345 if (updatedVtx!= tmpVtx) delete updatedVtx;
346 delete tmpVtx;
347 //WARNING
348 ATH_MSG_WARNING("Perigee is nullptr in "<<__FILE__<<":"<<__LINE__);
349 //exit
350 return vot;
351 }
352
353 // create the Jacobian matrix from Cartisian to Perigee
354 AmgMatrix(2,3) Jacobian;
355 Jacobian.setZero();
356 //perigee is dereferenced here, must not be nullptr!
357 double ptInv = 1./perigee->momentum().perp();
358 Jacobian(0,0) = -ptInv*perigee->momentum().y();
359 Jacobian(0,1) = ptInv*perigee->momentum().x();
360 Jacobian(1,2) = 1.0;
361
362 ATH_MSG_DEBUG(" Jacobian matrix from Cartesian to Perigee: "<< Jacobian);
363
364 AmgSymMatrix(3) vtxCov = updatedVtx->covariancePosition();
366
367 Amg::MatrixX errorMatrix;
369 AmgSymMatrix(3) tmpCov;
370 tmpCov.setZero();
371 tmpCov(0,0) = 1.e-10 ;
372 tmpCov(1,1) = 1.e-10;
373 tmpCov(2,2) = 1.e-10;
374 errorMatrix = Amg::MatrixX( tmpCov.similarity(Jacobian) );
375 } else {
376 errorMatrix = Amg::MatrixX( vtxCov.similarity(Jacobian) );
377 }
378 delete perigee;
379
380 // in fact, in most of the normal situation, pointer tmpVtx and updatedVtx are the same. You can check the source code
381 // But for safety, I would like to delete them seperately
382 // sroe(2016.09.23): This would result in an illegal double delete, if they really point to the same thing!
383 // http://stackoverflow.com/questions/9169774/what-happens-in-a-double-delete
384 if (tmpVtx != updatedVtx){
385 delete updatedVtx;
386 }
387 delete tmpVtx;
388 tmpVtx=nullptr;
389 updatedVtx=nullptr;
390
391 LocalParameters localParams = Trk::LocalParameters(Amg::Vector2D(0,0));
392
393 // VertexOnTrack Object
394 vot = new VertexOnTrack(std::move(localParams), std::move(errorMatrix), surface);
395 ATH_MSG_DEBUG("the VertexOnTrack created from vertex: "<<*vot);
396 }
397 }
398
399 return vot;
400
401}
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 491 of file BeamspotVertexPreProcessor.cxx.

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

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

◆ 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 >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ 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 109 of file BeamspotVertexPreProcessor.h.

109 {
110 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 166 of file BeamspotVertexPreProcessor.h.

◆ m_allTracksVector

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

Definition at line 132 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 112 of file BeamspotVertexPreProcessor.h.

112 {
113 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 152 of file BeamspotVertexPreProcessor.h.

152 {this, "BeamspotScalingFactor", 1.,
153 "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 102 of file BeamspotVertexPreProcessor.h.

102 {
103 this, "BSConstraintTrackSelector", "",
104 "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 130 of file BeamspotVertexPreProcessor.h.

130{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 126 of file BeamspotVertexPreProcessor.h.

126 {
127 this, "DoAssociatedToPVSelection", true,
128 "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 134 of file BeamspotVertexPreProcessor.h.

134 {this, "DoBSConstraint", true,
135 "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 124 of file BeamspotVertexPreProcessor.h.

124 {this, "DoBSTrackSelection", false,
125 "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 138 of file BeamspotVertexPreProcessor.h.

138 {this, "DoFullVertex", false,
139 "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 140 of file BeamspotVertexPreProcessor.h.

140 {this, "doNormalRefit", true,
141 "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 136 of file BeamspotVertexPreProcessor.h.

136 {this, "DoPVConstraint", false,
137 "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 122 of file BeamspotVertexPreProcessor.h.

122 {this, "DoTrackSelection", true,
123 "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 98 of file BeamspotVertexPreProcessor.h.

98 {
99 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 143 of file BeamspotVertexPreProcessor.h.

143 {this, "maxPt", 0.,
144 "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 157 of file BeamspotVertexPreProcessor.h.

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

◆ m_nFailedBSRefits

int Trk::BeamspotVertexPreProcessor::m_nFailedBSRefits = 0
private

Definition at line 163 of file BeamspotVertexPreProcessor.h.

◆ m_nFailedNormalRefits

int Trk::BeamspotVertexPreProcessor::m_nFailedNormalRefits = 0
private

Definition at line 162 of file BeamspotVertexPreProcessor.h.

◆ m_nFailedPVRefits

int Trk::BeamspotVertexPreProcessor::m_nFailedPVRefits = 0
private

Definition at line 164 of file BeamspotVertexPreProcessor.h.

◆ m_nTracks

int Trk::BeamspotVertexPreProcessor::m_nTracks = 0
private

Definition at line 160 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 120 of file BeamspotVertexPreProcessor.h.

120 {this, "ParticleNumber", 3,
121 "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 115 of file BeamspotVertexPreProcessor.h.

115 {
116 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 154 of file BeamspotVertexPreProcessor.h.

154 {this, "PrimaryVertexScalingFactor", 1.,
155 "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 146 of file BeamspotVertexPreProcessor.h.

146 {this, "RefitTracks", true,
147 "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 118 of file BeamspotVertexPreProcessor.h.

118 {this, "RunOutlierRemoval", false,
119 "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 96 of file BeamspotVertexPreProcessor.h.

96 {
97 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 148 of file BeamspotVertexPreProcessor.h.

148 {this, "StoreFitMatrices", true,
149 "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 93 of file BeamspotVertexPreProcessor.h.

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

◆ m_trackToVertexIPEstimatorTool

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

Definition at line 105 of file BeamspotVertexPreProcessor.h.

105 {
106 this, "TrackToVertexIPEstimatorTool", ""};

◆ m_trackTypeCounter

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

Definition at line 161 of file BeamspotVertexPreProcessor.h.

161{};

◆ m_trkSelector

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

Definition at line 100 of file BeamspotVertexPreProcessor.h.

100 {
101 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 150 of file BeamspotVertexPreProcessor.h.

150 {this, "UseSingleFitter", false,
151 "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: