|
ATLAS Offline Software
|
#include <TrigVrtSecInclusive.h>
|
| TrigVrtSecInclusive (const std::string &name, ISvcLocator *pSvcLocator) |
|
virtual | ~TrigVrtSecInclusive () |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | execute (const EventContext &ctx) const override |
|
virtual StatusCode | finalize () override |
|
virtual StatusCode | sysInitialize () override |
| Override sysInitialize. More...
|
|
virtual bool | isClonable () const override |
| Specify if the algorithm is clonable. More...
|
|
virtual unsigned int | cardinality () const override |
| Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant. More...
|
|
virtual StatusCode | sysExecute (const EventContext &ctx) override |
| Execute an algorithm. More...
|
|
virtual const DataObjIDColl & | extraOutputDeps () const override |
| Return the list of extra output dependencies. More...
|
|
virtual bool | filterPassed (const EventContext &ctx) const |
|
virtual void | setFilterPassed (bool state, const EventContext &ctx) const |
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
bool | selectTrack (const xAOD::TrackParticle *trk) const |
|
bool | selectTrack_hitPattern (const xAOD::TrackParticle *trk) const |
|
bool | selectTrack_d0Cut (const xAOD::TrackParticle *trk) const |
|
bool | selectTrack_z0Cut (const xAOD::TrackParticle *trk) const |
|
bool | selectTrack_pTCut (const xAOD::TrackParticle *trk) const |
|
bool | selectTrack_chi2Cut (const xAOD::TrackParticle *trk) const |
|
StatusCode | fillVtxContainer (xAODContainers &, const WrkVrtContainer &, std::vector< const xAOD::TrackParticle * > &) const |
|
size_t | nTrkCommon (WrkVrtContainer &, const std::pair< unsigned, unsigned > &) const |
|
StatusCode | cleanUp (WrkVrtContainer &) const |
|
StatusCode | trackSelection (const xAOD::TrackParticleContainer *, const xAOD::TrackParticleContainer *, std::vector< const xAOD::TrackParticle * > &) const |
|
StatusCode | findDiTrackVertex (WrkVrtContainer &, std::vector< std::pair< size_t, size_t >> &, std::vector< const xAOD::TrackParticle * > &, const EventContext &, const xAOD::Vertex *) const |
|
StatusCode | findDiTrackVertexVSI (WrkVrtContainer &, std::vector< std::pair< size_t, size_t >> &, std::vector< const xAOD::TrackParticle * > &, const EventContext &, const xAOD::Vertex *) const |
|
StatusCode | findNtrackVerticesVSI (WrkVrtContainer &, std::vector< std::pair< size_t, size_t >> &, std::vector< const xAOD::TrackParticle * > &, const EventContext &) const |
|
template<typename VrtType , typename Coord > |
StatusCode | findNTrackVertex (WrkVrtContainer &, TrigVSI::VtxMap< VrtType, Coord > &, const std::vector< const xAOD::TrackParticle * > &, const EventContext &) const |
|
StatusCode | fitVertexFromTracks (WrkVrt &, const std::vector< const xAOD::TrackParticle * > &, const EventContext &) const |
| Reconstruct vertex from given tracks. More...
|
|
StatusCode | mergeVertexFromDiTrkVrt (WrkVrtContainer &, const std::vector< std::pair< size_t, size_t >> &, const std::vector< size_t > &, const std::vector< const xAOD::TrackParticle * > &, const EventContext &) const |
| Reconstruct multi-track vertices from incompatible track pair lists. More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
Gaudi::Property< int > | m_vtxAlgorithm {this, "vtxAlgorithm", 0, "Vertexing algorithm. 0 : TrigVSI algorithm, 1 : Offline VSI like algorithm"} |
|
Gaudi::Property< bool > | m_recordTrkPair {this, "recordTrkPair", false, "Output EDM : Flag for record TrkPair vertices"} |
|
Gaudi::Property< int > | m_cutPixelHits {this, "CutPixelHits", 0, "Track selection : Hit requirements"} |
|
Gaudi::Property< int > | m_cutSctHits {this, "CutSctHits", 2, "Track selection : Hit requirements"} |
|
Gaudi::Property< int > | m_cutSharedHits {this, "CutSharedHits", 99, "Track selection : Hit requirements"} |
|
Gaudi::Property< int > | m_cutSiHits {this, "CutSiHits", 0, "Track selection : Hit requirements"} |
|
Gaudi::Property< int > | m_cutBLayHits {this, "CutBLayHits", 0, "Track selection : Hit requirements"} |
|
Gaudi::Property< double > | m_trkChi2Cut {this, "TrkChi2Cut", 50.0, "Track selection : Chi2 requirements"} |
|
Gaudi::Property< double > | m_trkPtCut {this, "TrkPtCut", (m_vtxAlgorithm == 0)? 2000. : 1000., "Track selection : pT requirements. 2 GeV in TrigVSI, 1 GeV in VSI"} |
|
Gaudi::Property< double > | m_d0TrkPVDstMinCut {this, "d0TrkPVDstMinCut", 2.0, "Track selection : Impact parameter requirements [mm]"} |
|
Gaudi::Property< double > | m_d0TrkPVDstMaxCut {this, "d0TrkPVDstMaxCut", 300.0, "Track selection : Impact parameter requirements [mm]"} |
|
Gaudi::Property< double > | m_z0TrkPVDstMinCut {this, "z0TrkPVDstMinCut", 0.0, "Track selection : Impact parameter requirements [mm]"} |
|
Gaudi::Property< double > | m_z0TrkPVDstMaxCut {this, "z0TrkPVDstMaxCut", 1500.0, "Track selection : Impact parameter requirements [mm]"} |
|
Gaudi::Property< double > | m_twoTrkVtxFormingD0Cut {this, "twoTrkVtxFormingD0Cut", 1., "Track selection : Impact parameter requirements [mm]"} |
|
Gaudi::Property< double > | m_maxR {this, "maxR", 563., "Track-pair selection : Max value for R of vertex position"} |
|
Gaudi::Property< bool > | m_doTwoCircRCut {this, "doTwoCircRCut", false, "Track-pair selection : Flag for R cut derived from two-circles-intersection-point"} |
|
Gaudi::Property< bool > | m_doFastRCut {this, "doFastRCut", false, "Track-pair selection : Flag for R cut derived from VKalVrtFitFast"} |
|
Gaudi::Property< double > | m_fastD0minCut {this, "fastD0minCut", 5., "Track-pair selection : Threshold for rough d0 cut"} |
|
Gaudi::Property< double > | m_fastD0deltaCut {this, "fastD0deltaCut", 4.2, "Track-pair selection : Threshold for rough d0 cut"} |
|
Gaudi::Property< double > | m_fastZ0minCut {this, "fastZ0minCut", 120., "Track-pair selection : Threshold for rough z0 cut"} |
|
Gaudi::Property< double > | m_fastZ0deltaCut {this, "fastZ0deltaCut", 8., "Track-pair selection : Threshold for rough z0 cut"} |
|
Gaudi::Property< double > | m_selVrtChi2Cut {this, "SelVrtChi2Cut", 4.5, "Track-pair selection : Threshold for the chi2 value of track pair fitting with VKalVrtFit"} |
|
Gaudi::Property< bool > | m_doPVCompatibilityCut {this, "doPVCompatibilityCut", false, "Track-pair selection : When set to true, require track pairs to be compatible with PV"} |
|
Gaudi::Property< double > | m_dphiPVCut {this, "dphiPVCut", -0.8, "Track-pair selection : Threshold for the cos of angle of the tracks and the momentum of the track pair"} |
|
Gaudi::Property< double > | m_pvCompatibilityCut {this, "PVcompatibilityCut", -20., "Track-pair selection : Threshold for the track pair position along the momentum vector"} |
|
Gaudi::Property< bool > | m_doMaterialMapVeto {this, "doMaterialMapVeto", false, "Track-pair selection : When set to true, perform material map veto on track pairs"} |
|
Gaudi::Property< bool > | m_skipLargeCluster {this, "skipLargeCluster", true, "Flag to skip vertexing on clusters with too many tracks"} |
|
Gaudi::Property< size_t > | m_maxTrks {this, "maxTrks", 100, "Max track number to run vertexing"} |
|
Gaudi::Property< size_t > | m_minTrkPairsMerge {this, "minTrkPairsMerge", 6, "Clusters with track pairs less than minTrkPairsMerge and tracks less than minTrksMerge will be merged into single vertex"} |
|
Gaudi::Property< size_t > | m_minTrksMerge {this, "minTrksMerge", 4, "Clusters with track pairs less than minTrkPairsMerge and tracks less than minTrksMerge will be merged into single vertex"} |
|
Gaudi::Property< bool > | m_truncateWrkVertices {this, "truncateWrkVertices", true, "Offline VSI option"} |
|
Gaudi::Property< size_t > | m_maxWrkVertices {this, "maxWrkVertices", 10000, "Offline VSI option"} |
|
Gaudi::Property< double > | m_improveChi2ProbThreshold {this, "improveChi2ProbThreshold", 4.5, "Offline VSI option"} |
|
TH3S * | m_materialMapInner =0 |
|
TH3S * | m_materialMapOuter =0 |
|
TMatrixT< double > * | m_materialMapMatrix =0 |
|
std::string | m_materialMapInnerFileName |
|
std::string | m_materialMapInnerHistName |
|
std::string | m_materialMapInnerMatrixName |
|
std::string | m_materialMapOuterFileName |
|
std::string | m_materialMapOuterHistName |
|
SG::ReadHandleKey< xAOD::TrackParticleContainer > | m_firstPassTracksName { this,"FirstPassTracksName","InDetTrackParticles","xAOD::TrackParticle Collection used in Vertexing" } |
|
SG::ReadHandleKey< xAOD::TrackParticleContainer > | m_secondPassTracksName { this,"SecondPassTracksName","InDetTrackParticles","xAOD::TrackParticle Collection used in Vertexing" } |
|
SG::WriteHandleKey< xAOD::VertexContainer > | m_vxCandidatesOutputName { this,"VxCandidatesOutputName","InclusiveSecVtx","Output Vertex Collection" } |
|
SG::WriteHandleKey< xAOD::VertexContainer > | m_trkPairOutputName { this,"TrkPairOutputName","InclusiveSecVtx","Track pair Collection" } |
|
SG::ReadHandleKey< xAOD::VertexContainer > | m_PrimaryVxInputName { this,"PrimaryVertexInputName","PrimaryVertices","Input Vertex Collection" } |
|
ToolHandle< Trk::TrkVKalVrtFitter > | m_fitSvc { this, "VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex" } |
|
ToolHandle< InDet::VertexPointEstimator > | m_vertexPointEstimator { this, "VertexPointEstimator", "", "tool to find starting point for the vertex fitter"} |
|
ToolHandle< GenericMonitoringTool > | m_monTool { this, "MonTool", "", "Monitoring tool" } |
|
DataObjIDColl | m_extendedExtraObjects |
| Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks. More...
|
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
◆ StoreGateSvc_t
◆ WrkVrtContainer
◆ xAODContainers
◆ TrkParameter
◆ TrkParameterUnc
◆ TrigVrtSecInclusive()
TrigVSI::TrigVrtSecInclusive::TrigVrtSecInclusive |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
pSvcLocator |
|
) |
| |
◆ ~TrigVrtSecInclusive()
TrigVSI::TrigVrtSecInclusive::~TrigVrtSecInclusive |
( |
| ) |
|
|
virtual |
◆ cardinality()
unsigned int AthReentrantAlgorithm::cardinality |
( |
| ) |
const |
|
overridevirtualinherited |
Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
Override this to return 0 for reentrant algorithms.
Override this to return 0 for reentrant algorithms.
Definition at line 55 of file AthReentrantAlgorithm.cxx.
◆ cleanUp()
StatusCode TrigVSI::TrigVrtSecInclusive::cleanUp |
( |
WrkVrtContainer & |
workVerticesContainer | ) |
const |
|
private |
Definition at line 1560 of file TrigVrtSecInclusive.cxx.
1564 ATH_MSG_VERBOSE(
" > " << __FUNCTION__ <<
": Remove vertices fully contained in other vertices .");
1565 size_t n_vtx = workVerticesContainer.size();
1567 for (
size_t iv = 0; iv < n_vtx; iv++) {
1568 for (
size_t jv = iv+1; jv < n_vtx; jv++) {
1570 if ( !workVerticesContainer.at(iv).isGood )
continue;
1571 if ( !workVerticesContainer.at(jv).isGood )
continue;
1573 const auto nTCom =
nTrkCommon( workVerticesContainer, {iv, jv} );
1575 if( nTCom == workVerticesContainer.at(iv).selectedTrackIndices().size() ) { workVerticesContainer.at(iv).isGood =
false;
continue; }
1576 else if( nTCom == workVerticesContainer.at(jv).selectedTrackIndices().size() ) { workVerticesContainer.at(jv).isGood =
false;
continue; }
1581 return StatusCode::SUCCESS;
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
StatusCode TrigVSI::TrigVrtSecInclusive::execute |
( |
const EventContext & |
ctx | ) |
const |
|
overridevirtual |
Definition at line 90 of file TrigVrtSecInclusive.cxx.
95 std::unique_ptr<xAOD::VertexContainer> theXAODContainer = std::make_unique<xAOD::VertexContainer>();
96 std::unique_ptr<xAOD::VertexAuxContainer> theXAODAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
97 theXAODContainer->setStore( theXAODAuxContainer.get() );
98 xAODContainers theXAODContainers = std::make_pair( std::move(theXAODContainer), std::move(theXAODAuxContainer) );
103 std::unique_ptr<xAOD::VertexContainer> theXAODTrkPairContainer = std::make_unique<xAOD::VertexContainer>();
104 std::unique_ptr<xAOD::VertexAuxContainer> theXAODTrkPairAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
105 theXAODTrkPairContainer->setStore( theXAODTrkPairAuxContainer.get() );
106 xAODContainers theXAODTrkPairContainers = std::make_pair( std::move(theXAODTrkPairContainer), std::move(theXAODTrkPairAuxContainer) );
112 if( vtxCont.isValid() ){
114 privtx = vertex_container->
at(0);
124 ATH_MSG_WARNING(
"couldn't retrieve primary vertex, keeping null privtx" );
131 bool isFirstTrackValid = firstPassTrackParticleCollection.isValid();
132 bool isSecondTrackValid = secondPassTrackParticleCollection.isValid();
147 auto monTime =
Monitored::Group(
m_monTool, timerTrackSel, timerTwoTrackVertex, timerMapClustering, timerNTrackVertex, timerNTrackVtxOffVSI, timerCleanUp, timerWriteVertices, timerOverall);
149 timerOverall.start();
153 std::vector<std::pair<size_t,size_t>> v_incomp;
154 std::vector<const xAOD::TrackParticle*> v_selectedTracks;
158 timerTrackSel.start();
160 if( isFirstTrackValid ) {
161 if( isSecondTrackValid ) {
162 ATH_CHECK(
trackSelection( firstPassTrackParticleCollection.cptr(), secondPassTrackParticleCollection.cptr(), v_selectedTracks ) );
168 timerTrackSel.stop();
177 v_diwrkvrt.reserve(5000);
181 timerTwoTrackVertex.start();
183 timerTwoTrackVertex.stop();
186 timerTwoTrackVertex.start();
188 timerTwoTrackVertex.stop();
198 TrigVSI::VtxMap<WrkVrt, TrigVSI::Coordinate::Pseudo> vtxmap( std::make_unique<TH3D>(
"TrigVrtSecInclusive_VtxMap",
"TrigVrtSecInclusive_VtxMap",
vsic::binNumR,
vsic::IDrInner,
vsic::IDrInner+
vsic::mapBinWid*
vsic::binNumR,
vsic::nEta, -
vsic::maxEta,
vsic::maxEta,
vsic::nPhi, -TMath::Pi(), TMath::Pi()) );
202 v_wrkvrt.reserve(1000);
209 timerMapClustering.start();
210 for (
auto wrkvrt_iter = v_diTrkVertices.begin(); wrkvrt_iter != v_diTrkVertices.end(); ++wrkvrt_iter ) {
211 if ( wrkvrt_iter->isGood && wrkvrt_iter->cuts.isFullPass() ) {
212 vtxmap.Fill( &(*wrkvrt_iter) );
217 ATH_MSG_DEBUG(
"filled vertex map with " << trkpair_cnt <<
" pairs" );
218 vtxmap.ClusterizeCells(1.,1);
219 timerMapClustering.stop();
220 ATH_MSG_DEBUG(
"vertex map clustering successfully completed : " << vtxmap.nClusters() <<
" clusters" );
223 timerNTrackVertex.start();
225 timerNTrackVertex.stop();
228 timerCleanUp.start();
229 size_t n_pre_clean = v_wrkvrt.size();
231 size_t n_post_clean = v_wrkvrt.size();
233 ATH_MSG_DEBUG(
"cleaned up " << n_pre_clean - n_post_clean <<
" out of " << n_pre_clean );
237 timerNTrackVtxOffVSI.start();
239 timerNTrackVtxOffVSI.stop();
244 timerWriteVertices.start();
253 ATH_CHECK(outputVertices.record(std::move(theXAODContainers.first), std::move(theXAODContainers.second)));
254 ATH_CHECK(outputTrkPairs.record(std::move(theXAODTrkPairContainers.first), std::move(theXAODTrkPairContainers.second)));
257 timerWriteVertices.stop();
262 return StatusCode::SUCCESS;
◆ extraDeps_update_handler()
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
◆ extraOutputDeps()
const DataObjIDColl & AthReentrantAlgorithm::extraOutputDeps |
( |
| ) |
const |
|
overridevirtualinherited |
Return the list of extra output dependencies.
This list is extended to include symlinks implied by inheritance relations.
Definition at line 79 of file AthReentrantAlgorithm.cxx.
86 return Algorithm::extraOutputDeps();
◆ fillVtxContainer()
Definition at line 288 of file TrigVrtSecInclusive.cxx.
292 for (
const auto& wrkvrt : workVerticesContainer) {
294 if ( !wrkvrt.isGood && !wrkvrt.isPair )
continue;
296 std::vector<const xAOD::TrackParticle*> baseTracks;
297 for (
auto i : wrkvrt.selectedTrackIndices() ) {
298 baseTracks.emplace_back( selectedTracks.at(
i) );
303 vertex->makePrivateStore();
306 for(
auto *trk: baseTracks ) {
310 vertex->addTrackAtVertex( trackElementLink, 1. );
314 vertex->setPosition( wrkvrt.vertex );
315 vertex->setFitQuality( wrkvrt.chi2, 1 );
321 vsi_massAcc(*
vertex) = wrkvrt.vertexMom.M();
322 vsi_pTAcc(*
vertex) = wrkvrt.vertexMom.Perp();
323 vsi_chargeAcc(*
vertex) = wrkvrt.charge;
324 vsi_isFakeAcc(*
vertex) = 0;
341 vsi_twoCirc_drAcc(*
vertex) = wrkvrt.param.twoCirc_dr;
342 vsi_twoCirc_dphiAcc(*
vertex) = wrkvrt.param.twoCirc_dphi;
343 vsi_twoCirc_int_rAcc(*
vertex) = wrkvrt.param.twoCirc_int_r;
344 vsi_vrtFast_rAcc(*
vertex) = wrkvrt.param.vrtFast_r;
345 vsi_vrtFast_etaAcc(*
vertex) = wrkvrt.param.vrtFast_eta;
346 vsi_vrtFast_phiAcc(*
vertex) = wrkvrt.param.vrtFast_phi;
347 vsi_vrtFast_trkd0Acc(*
vertex) = wrkvrt.param.vrtFast_trkd0;
348 vsi_vrtFast_trkz0Acc(*
vertex) = wrkvrt.param.vrtFast_trkz0;
349 vsi_vrtFit_rAcc(*
vertex) = wrkvrt.vertex.perp();
350 vsi_vrtFit_chi2Acc(*
vertex) = wrkvrt.chi2;
351 vsi_vPosAcc(*
vertex) = wrkvrt.param.vPos;
352 vsi_vPosMomAngTAcc(*
vertex) = wrkvrt.param.vPosMomAngT;
353 vsi_dphi1Acc(*
vertex) = wrkvrt.param.dphi1;
354 vsi_dphi2Acc(*
vertex) = wrkvrt.param.dphi2;
355 vsi_isPassMMVAcc(*
vertex) = wrkvrt.param.isPassMMV ? 1 : 0;
364 vsi_trkd0cutAcc(*
vertex) = wrkvrt.cuts.trkd0cut ? 1 : 0;
365 vsi_twoCircErrcutAcc(*
vertex) = wrkvrt.cuts.twoCircErrcut ? 1 : 0;
366 vsi_twoCircRcutAcc(*
vertex) = wrkvrt.cuts.twoCircRcut ? 1 : 0;
367 vsi_fastErrcutAcc(*
vertex) = wrkvrt.cuts.fastErrcut ? 1 : 0;
368 vsi_fastRcutAcc(*
vertex) = wrkvrt.cuts.fastRcut ? 1 : 0;
369 vsi_fitErrcutAcc(*
vertex) = wrkvrt.cuts.fitErrcut ? 1 : 0;
370 vsi_chi2cutAcc(*
vertex) = wrkvrt.cuts.chi2cut ? 1 : 0;
374 return StatusCode::SUCCESS;
◆ filterPassed()
virtual bool AthReentrantAlgorithm::filterPassed |
( |
const EventContext & |
ctx | ) |
const |
|
inlinevirtualinherited |
◆ finalize()
StatusCode TrigVSI::TrigVrtSecInclusive::finalize |
( |
| ) |
|
|
overridevirtual |
◆ findDiTrackVertex()
Definition at line 378 of file TrigVrtSecInclusive.cxx.
386 std::vector<float> mnt_pair_dphi;
387 std::vector<float> mnt_pair_dr;
388 std::vector<float> mnt_intersect_r;
389 std::vector<float> mnt_init_r;
390 std::vector<float> mnt_init_trkd0;
391 std::vector<float> mnt_init_trkz0;
392 std::vector<float> mnt_vtxfit_chi2;
393 std::vector<float> mnt_vtxfit_r;
394 std::vector<float> mnt_vtx_chi2;
395 std::vector<float> mnt_vtx_mass;
396 std::vector<float> mnt_vtx_mass_high;
397 std::vector<float> mnt_vtx_pt;
398 std::vector<float> mnt_vtx_charge;
399 std::vector<float> mnt_vtx_r;
414 auto monVertex =
Monitored::Group(
m_monTool, mon_pair_dphi, mon_pair_dr, mon_intersect_r, mon_init_r, mon_init_trkd0, mon_init_trkz0, mon_vtxfit_chi2, mon_vtxfit_r,
415 mon_vtx_chi2,mon_vtx_mass,mon_vtx_mass_high,mon_vtx_pt,mon_vtx_charge,mon_vtx_r);
418 unsigned int nPairsAll = 0;
419 unsigned int nPairsTrkd0 = 0;
420 unsigned int nPairsIntersect = 0;
421 unsigned int nPairsIntersectPos = 0;
422 unsigned int nPairsInitPos = 0;
423 unsigned int nPairsInitTrkd0z0 = 0;
424 unsigned int nPairsVtxFit = 0;
425 unsigned int nPairsVtxChi2 = 0;
426 unsigned int nPairsVtxComp = 0;
427 unsigned int nPairsVtxMatveto = 0;
429 for(
auto itrkIter = selectedTracks.begin(); itrkIter != selectedTracks.end(); ++itrkIter ) {
431 for(
auto jtrkIter =
std::next(itrkIter); jtrkIter != selectedTracks.end(); ++jtrkIter ) {
438 const int itrk_id =
std::distance(selectedTracks.begin(), itrkIter);
439 const int jtrk_id =
std::distance(selectedTracks.begin(), jtrkIter);
441 WrkVrt::AlgCuts wrkcuts;
442 WrkVrt::AlgParam wrkprm;
446 wrkvrt.selectedTrackIndices().clear();
447 wrkvrt.selectedTrackIndices().emplace_back(itrk_id);
448 wrkvrt.selectedTrackIndices().emplace_back(jtrk_id);
455 incomp.emplace_back( std::pair<size_t, size_t>(itrk_id, jtrk_id) );
463 timerTwoCircIntsect.start();
465 timerTwoCircIntsect.stop();
466 if (errorcode != 0) {
468 wrkcuts.twoCircErrcut =
true;
469 wrkvrt.param = wrkprm;
470 wrkvrt.cuts = wrkcuts;
471 wrkvrt.isPair =
true;
473 workVerticesContainer.push_back( std::move(wrkvrt) );
476 float dphi = std::abs(decors[
"deltaPhiTracks"]);
477 float dr = std::abs(decors[
"DR1R2"]);
478 float intersect_r = circIntersect.perp();
479 mnt_pair_dphi.push_back(dphi);
480 mnt_pair_dr.push_back(
dr);
481 mnt_intersect_r.push_back(intersect_r);
483 wrkprm.twoCirc_dphi = dphi;
484 wrkprm.twoCirc_dr =
dr;
485 wrkprm.twoCirc_int_r = intersect_r;
488 wrkcuts.twoCircRcut = intersect_r >
m_maxR;
490 nPairsIntersectPos++;
493 std::vector<const xAOD::TrackParticle*> baseTracks;
494 baseTracks.emplace_back( itrk );
495 baseTracks.emplace_back( jtrk );
498 timerVrtFitFast.start();
499 auto fitterState =
m_fitSvc->makeState(ctx);
500 m_fitSvc->setApproximateVertex( circIntersect.x(), circIntersect.y(), circIntersect.z(), *fitterState );
503 timerVrtFitFast.stop();
504 if(
sc.isFailure() ) {
506 wrkcuts.fastErrcut =
true;
507 wrkvrt.param = wrkprm;
508 wrkvrt.cuts = wrkcuts;
509 wrkvrt.isPair =
true;
511 workVerticesContainer.push_back( std::move(wrkvrt) );
516 mnt_init_r.push_back(initVertex.perp());
517 wrkprm.vrtFast_r = initVertex.perp();
518 wrkprm.vrtFast_eta = initVertex.eta();
519 wrkprm.vrtFast_phi = initVertex.phi();
521 wrkcuts.fastRcut = initVertex.perp() >
m_maxR;
526 std::vector<double> impactParameters;
527 std::vector<double> impactParErrors;
528 if( !
m_fitSvc->VKalGetImpact(itrk, initVertex,
static_cast<int>( itrk->
charge() ), impactParameters, impactParErrors) )
continue;
529 const auto roughD0_itrk = impactParameters.at(TrkParameter::k_d0);
530 const auto roughZ0_itrk = impactParameters.at(TrkParameter::k_z0);
531 mnt_init_trkd0.push_back(std::abs(roughD0_itrk));
532 mnt_init_trkz0.push_back(std::abs(roughZ0_itrk));
533 wrkprm.vrtFast_trkd0.push_back(std::abs(roughD0_itrk));
534 wrkprm.vrtFast_trkz0.push_back(std::abs(roughZ0_itrk));
536 if( !
m_fitSvc->VKalGetImpact(jtrk, initVertex,
static_cast<int>( jtrk->
charge() ), impactParameters, impactParErrors) )
continue;
537 const auto roughD0_jtrk = impactParameters.at(TrkParameter::k_d0);
538 const auto roughZ0_jtrk = impactParameters.at(TrkParameter::k_z0);
539 mnt_init_trkd0.push_back(std::abs(roughD0_jtrk));
540 mnt_init_trkz0.push_back(std::abs(roughZ0_jtrk));
541 wrkprm.vrtFast_trkd0.push_back(std::abs(roughD0_jtrk));
542 wrkprm.vrtFast_trkz0.push_back(std::abs(roughZ0_jtrk));
550 std::vector<const xAOD::NeutralParticle*> dummyNeutrals;
552 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
555 wrkvrt.vertex, wrkvrt.vertexMom, wrkvrt.charge,
556 wrkvrt.vertexCov, wrkvrt.chi2PerTrk,
557 wrkvrt.trkAtVrt, wrkvrt.chi2, *fitterState,
false );
559 if(
sc.isFailure() ) {
560 wrkcuts.fitErrcut =
true;
561 wrkvrt.param = wrkprm;
562 wrkvrt.cuts = wrkcuts;
563 wrkvrt.isPair =
true;
565 workVerticesContainer.push_back( std::move(wrkvrt) );
571 mnt_vtxfit_chi2.push_back(wrkvrt.chi2);
574 wrkcuts.chi2cut =
true;
575 wrkvrt.param = wrkprm;
576 wrkvrt.cuts = wrkcuts;
577 wrkvrt.isPair =
true;
579 workVerticesContainer.push_back( std::move(wrkvrt) );
583 mnt_vtxfit_r.push_back(wrkvrt.vertex.perp());
587 const double vPos = ( vDist.x()*wrkvrt.vertexMom.Px()+vDist.y()*wrkvrt.vertexMom.Py()+vDist.z()*wrkvrt.vertexMom.Pz() )/wrkvrt.vertexMom.Rho();
588 const double vPosMomAngT = ( vDist.x()*wrkvrt.vertexMom.Px()+vDist.y()*wrkvrt.vertexMom.Py() ) / vDist.perp() / wrkvrt.vertexMom.Pt();
590 double dphi1 = vDist.phi() - itrk->
phi();
while( dphi1 > TMath::Pi() ) { dphi1 -= TMath::TwoPi(); }
while( dphi1 < -TMath::Pi() ) { dphi1 += TMath::TwoPi(); }
591 double dphi2 = vDist.phi() - jtrk->
phi();
while( dphi2 > TMath::Pi() ) { dphi2 -= TMath::TwoPi(); }
while( dphi2 < -TMath::Pi() ) { dphi2 += TMath::TwoPi(); }
594 wrkprm.vPosMomAngT = vPosMomAngT;
595 wrkprm.dphi1 = dphi1;
596 wrkprm.dphi2 = dphi2;
601 ATH_MSG_DEBUG(
": failed to pass the vPos cut. (both tracks are opposite against the vertex pos)" );
605 ATH_MSG_DEBUG(
": failed to pass the vPos cut. (pos-mom directions are opposite)" );
618 wrkprm.isPassMMV =
true;
620 if (wrkvrt.vertex.perp() > 150) {
625 for (
int i=0;
i<5;
i++){
626 if (wrkvrt.vertex.perp() < mmm[
i][0]) {
627 float test_x = wrkvrt.vertex.x() + mmm[
i][1];
628 float test_y = wrkvrt.vertex.y() + mmm[
i][2];
629 double calc_phi = std::fmod(
TMath::ATan2(test_y,test_x),TMath::Pi()/mmm[
i][3] );
630 if (calc_phi <0) calc_phi = calc_phi + TMath::Pi()/mmm[
i][3];
635 if( ! wrkprm.isPassMMV )
continue;
641 if (wrkcuts.isFullPass()) incomp.pop_back();
643 wrkvrt.param = wrkprm;
644 wrkvrt.cuts = wrkcuts;
645 wrkvrt.isGood =
true;
646 wrkvrt.isPair =
true;
648 workVerticesContainer.push_back( std::move(wrkvrt) );
651 ATH_MSG_DEBUG(
"Of " << nPairsAll <<
" pairs : trkd0" <<
" / " <<
"intersect" <<
" / " <<
"intersectPos" <<
" / " <<
"initPos" <<
" / " <<
"initD0Z0" <<
" / " <<
"vtxFit" <<
" / " <<
"vtxChi2" <<
" / " <<
"vtxComp" <<
" / " <<
"matVeto = "
652 << nPairsTrkd0 <<
" / " << nPairsIntersect <<
" / " << nPairsIntersectPos <<
" / " << nPairsInitPos <<
" / " << nPairsInitTrkd0z0 <<
" / " << nPairsVtxFit <<
" / " << nPairsVtxChi2 <<
" / " << nPairsVtxComp <<
" / " << nPairsVtxMatveto);
654 return StatusCode::SUCCESS;
◆ findDiTrackVertexVSI()
Definition at line 658 of file TrigVrtSecInclusive.cxx.
666 std::vector<float> mnt_pair_dphi;
667 std::vector<float> mnt_pair_dr;
668 std::vector<float> mnt_intersect_r;
669 std::vector<float> mnt_init_r;
670 std::vector<float> mnt_init_trkd0;
671 std::vector<float> mnt_init_trkz0;
672 std::vector<float> mnt_vtxfit_chi2;
673 std::vector<float> mnt_vtxfit_r;
674 std::vector<float> mnt_vtx_chi2;
675 std::vector<float> mnt_vtx_mass;
676 std::vector<float> mnt_vtx_mass_high;
677 std::vector<float> mnt_vtx_pt;
678 std::vector<float> mnt_vtx_charge;
679 std::vector<float> mnt_vtx_r;
694 auto monVertex =
Monitored::Group(
m_monTool, mon_pair_dphi, mon_pair_dr, mon_intersect_r, mon_init_r, mon_init_trkd0, mon_init_trkz0, mon_vtxfit_chi2, mon_vtxfit_r,
695 mon_vtx_chi2,mon_vtx_mass,mon_vtx_mass_high,mon_vtx_pt,mon_vtx_charge,mon_vtx_r);
698 const double roughD0Cut{ 100. };
699 const double roughZ0Cut{ 50. };
701 unsigned int nPairsAll = 0;
702 unsigned int nPairsTrkd0 = 0;
703 unsigned int nPairsIntersect = 0;
704 unsigned int nPairsIntersectPos = 0;
705 unsigned int nPairsInitPos = 0;
706 unsigned int nPairsInitTrkd0z0 = 0;
707 unsigned int nPairsVtxFit = 0;
708 unsigned int nPairsVtxChi2 = 0;
709 unsigned int nPairsVtxComp = 0;
711 for(
auto itrkIter = selectedTracks.begin(); itrkIter != selectedTracks.end(); ++itrkIter ) {
713 for(
auto jtrkIter =
std::next(itrkIter); jtrkIter != selectedTracks.end(); ++jtrkIter ) {
720 const int itrk_id =
std::distance(selectedTracks.begin(), itrkIter);
721 const int jtrk_id =
std::distance(selectedTracks.begin(), jtrkIter);
723 WrkVrt::AlgCuts wrkcuts;
724 WrkVrt::AlgParam wrkprm;
728 wrkvrt.selectedTrackIndices().clear();
729 wrkvrt.selectedTrackIndices().emplace_back(itrk_id);
730 wrkvrt.selectedTrackIndices().emplace_back(jtrk_id);
737 incomp.emplace_back( std::pair<size_t, size_t>(itrk_id, jtrk_id) );
745 timerTwoCircIntsect.start();
747 timerTwoCircIntsect.stop();
748 if (errorcode != 0) {
750 wrkcuts.twoCircErrcut =
true;
751 wrkvrt.param = wrkprm;
752 wrkvrt.cuts = wrkcuts;
753 wrkvrt.isPair =
true;
755 workVerticesContainer.push_back( std::move(wrkvrt) );
758 float dphi = std::abs(decors[
"deltaPhiTracks"]);
759 float dr = std::abs(decors[
"DR1R2"]);
760 float intersect_r = circIntersect.perp();
761 mnt_pair_dphi.push_back(dphi);
762 mnt_pair_dr.push_back(
dr);
763 mnt_intersect_r.push_back(intersect_r);
765 wrkprm.twoCirc_dphi = dphi;
766 wrkprm.twoCirc_dr =
dr;
767 wrkprm.twoCirc_int_r = intersect_r;
770 wrkcuts.twoCircRcut = intersect_r >
m_maxR;
771 nPairsIntersectPos++;
774 std::vector<const xAOD::TrackParticle*> baseTracks;
775 baseTracks.emplace_back( itrk );
776 baseTracks.emplace_back( jtrk );
778 timerVrtFitFast.start();
779 auto fitterState =
m_fitSvc->makeState(ctx);
780 m_fitSvc->setApproximateVertex( 0., 0., 0., *fitterState );
782 timerVrtFitFast.stop();
783 if(
sc.isFailure() ) {
785 wrkcuts.fastErrcut =
true;
786 wrkvrt.param = wrkprm;
787 wrkvrt.cuts = wrkcuts;
788 wrkvrt.isPair =
true;
790 workVerticesContainer.push_back( std::move(wrkvrt) );
795 mnt_init_r.push_back(initVertex.perp());
796 wrkprm.vrtFast_r = initVertex.perp();
797 wrkprm.vrtFast_eta = initVertex.eta();
798 wrkprm.vrtFast_phi = initVertex.phi();
799 wrkcuts.fastRcut = initVertex.perp() >
m_maxR;
804 std::vector<double> impactParameters;
805 std::vector<double> impactParErrors;
806 if( !
m_fitSvc->VKalGetImpact(itrk, initVertex,
static_cast<int>( itrk->
charge() ), impactParameters, impactParErrors) )
continue;
807 const auto roughD0_itrk = impactParameters.at(TrkParameter::k_d0);
808 const auto roughZ0_itrk = impactParameters.at(TrkParameter::k_z0);
809 mnt_init_trkd0.push_back(std::abs(roughD0_itrk));
810 mnt_init_trkz0.push_back(std::abs(roughZ0_itrk));
811 wrkprm.vrtFast_trkd0.push_back(std::abs(roughD0_itrk));
812 wrkprm.vrtFast_trkz0.push_back(std::abs(roughZ0_itrk));
813 if( std::abs(roughD0_itrk) > roughD0Cut || std::abs(roughZ0_itrk) > roughZ0Cut )
continue;
815 if( !
m_fitSvc->VKalGetImpact(jtrk, initVertex,
static_cast<int>( jtrk->
charge() ), impactParameters, impactParErrors) )
continue;
816 const auto roughD0_jtrk = impactParameters.at(TrkParameter::k_d0);
817 const auto roughZ0_jtrk = impactParameters.at(TrkParameter::k_z0);
818 mnt_init_trkd0.push_back(std::abs(roughD0_jtrk));
819 mnt_init_trkz0.push_back(std::abs(roughZ0_jtrk));
820 wrkprm.vrtFast_trkd0.push_back(std::abs(roughD0_jtrk));
821 wrkprm.vrtFast_trkz0.push_back(std::abs(roughZ0_jtrk));
822 if( std::abs(roughD0_jtrk) > roughD0Cut || std::abs(roughZ0_jtrk) > roughZ0Cut )
continue;
827 std::vector<const xAOD::NeutralParticle*> dummyNeutrals;
829 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
832 wrkvrt.vertex, wrkvrt.vertexMom, wrkvrt.charge,
833 wrkvrt.vertexCov, wrkvrt.chi2PerTrk,
834 wrkvrt.trkAtVrt, wrkvrt.chi2, *fitterState,
false );
836 if(
sc.isFailure() ) {
837 wrkcuts.fitErrcut =
true;
838 wrkvrt.param = wrkprm;
839 wrkvrt.cuts = wrkcuts;
840 wrkvrt.isPair =
true;
842 workVerticesContainer.push_back( std::move(wrkvrt) );
849 mnt_vtxfit_chi2.push_back(wrkvrt.chi2);
852 wrkcuts.chi2cut =
true;
853 wrkvrt.param = wrkprm;
854 wrkvrt.cuts = wrkcuts;
855 wrkvrt.isPair =
true;
857 workVerticesContainer.push_back( std::move(wrkvrt) );
861 mnt_vtxfit_r.push_back(wrkvrt.vertex.perp());
865 const double vPos = ( vDist.x()*wrkvrt.vertexMom.Px()+vDist.y()*wrkvrt.vertexMom.Py()+vDist.z()*wrkvrt.vertexMom.Pz() )/wrkvrt.vertexMom.Rho();
866 const double vPosMomAngT = ( vDist.x()*wrkvrt.vertexMom.Px()+vDist.y()*wrkvrt.vertexMom.Py() ) / vDist.perp() / wrkvrt.vertexMom.Pt();
868 double dphi1 = vDist.phi() - itrk->
phi();
while( dphi1 > TMath::Pi() ) { dphi1 -= TMath::TwoPi(); }
while( dphi1 < -TMath::Pi() ) { dphi1 += TMath::TwoPi(); }
869 double dphi2 = vDist.phi() - jtrk->
phi();
while( dphi2 > TMath::Pi() ) { dphi2 -= TMath::TwoPi(); }
while( dphi2 < -TMath::Pi() ) { dphi2 += TMath::TwoPi(); }
872 wrkprm.vPosMomAngT = vPosMomAngT;
873 wrkprm.dphi1 = dphi1;
874 wrkprm.dphi2 = dphi2;
877 ATH_MSG_DEBUG(
": failed to pass the vPos cut. (both tracks are opposite against the vertex pos)" );
881 ATH_MSG_DEBUG(
": failed to pass the vPos cut. (pos-mom directions are opposite)" );
892 if (wrkcuts.isFullPass()) incomp.pop_back();
894 wrkvrt.param = wrkprm;
895 wrkvrt.cuts = wrkcuts;
896 wrkvrt.isGood =
true;
897 wrkvrt.isPair =
true;
899 workVerticesContainer.push_back( std::move(wrkvrt) );
902 ATH_MSG_DEBUG(
"Of " << nPairsAll <<
" pairs : trkd0" <<
" / " <<
"intersect" <<
" / " <<
"intersectPos" <<
" / " <<
"initPos" <<
" / " <<
"initD0Z0" <<
" / " <<
"vtxFit" <<
" / " <<
"vtxChi2" <<
" / " <<
"vtxComp = "
903 << nPairsTrkd0 <<
" / " << nPairsIntersect <<
" / " << nPairsIntersectPos <<
" / " << nPairsInitPos <<
" / " << nPairsInitTrkd0z0 <<
" / " << nPairsVtxFit <<
" / " << nPairsVtxChi2 <<
" / " << nPairsVtxComp );
905 return StatusCode::SUCCESS;
◆ findNTrackVertex()
template<typename VrtType , typename Coord >
Definition at line 1150 of file TrigVrtSecInclusive.cxx.
1161 size_t n_vtx_pargraph = 0;
1162 size_t n_vtx_simple = 0;
1164 for (
size_t i_clst = 0; i_clst < n_clst; i_clst++) {
1166 timerRetrvFromMap.start();
1168 ATH_MSG_DEBUG(
"Retrieve cluster, track indices and incompatible pairs" );
1171 auto selected_track_indices = clst.getSelectedTrackIndices();
1172 auto incomp = clst.getIncompIndices();
1176 std::vector<size_t> v_track_indices( selected_track_indices.begin(), selected_track_indices.end() );
1178 timerRetrvFromMap.stop();
1180 ATH_MSG_DEBUG(
"Cluster number : " << i_clst <<
" | " << incomp.size() <<
" incompatible pairs | " << v_track_indices.size() <<
" tracks" );
1181 ATH_MSG_DEBUG(
"Pos avr : ( R: " << clst.PosCoord().at(0) <<
", eta: " << clst.PosCoord().at(1) <<
", phi: " << clst.PosCoord().at(2) <<
" )" );
1184 if ( v_track_indices.size() >
m_maxTrks ) {
1191 timerMergeParGraph.start();
1193 timerMergeParGraph.stop();
1199 timerMergeSimple.start();
1202 wrkvrt.isGood =
true;
1203 wrkvrt.selectedTrackIndices().clear();
1205 for (
size_t i_trk = 0; i_trk < v_track_indices.size(); i_trk++) {
1206 wrkvrt.selectedTrackIndices().emplace_back( v_track_indices.at(i_trk) );
1210 workVerticesContainer.emplace_back( std::move(wrkvrt) );
1213 timerMergeSimple.stop();
1221 ATH_MSG_DEBUG(
"Partial graph method / Simple method / All vertex = " << n_vtx_pargraph <<
" / " << n_vtx_simple <<
" / " << n_vtx_pargraph+n_vtx_simple );
1222 return StatusCode::SUCCESS;
◆ findNtrackVerticesVSI()
StatusCode TrigVSI::TrigVrtSecInclusive::findNtrackVerticesVSI |
( |
WrkVrtContainer & |
workVerticesContainer, |
|
|
std::vector< std::pair< size_t, size_t >> & |
incomp, |
|
|
std::vector< const xAOD::TrackParticle * > & |
selectedTracks, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
private |
Definition at line 909 of file TrigVrtSecInclusive.cxx.
914 const auto compSize = selectedTracks.size()*(selectedTracks.size() - 1)/2 - incomp.size();
916 auto pgraph = std::make_unique<Trk::PGraph>();
918 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": compatible track pair size = " << compSize );
919 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": incompatible track pair size = " << incomp.size() );
921 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": incompatibility graph finder mode" );
924 workVerticesContainer.clear();
931 std::vector<long int>
weight;
933 for(
auto& pair : incomp ) {
934 weight.emplace_back( pair.first + 1 );
935 weight.emplace_back( pair.second + 1 );
940 std::vector<long int> solution( selectedTracks.size() );
943 long int nEdges = incomp.size();
946 long int nTracks =
static_cast<long int>( selectedTracks.size() );
954 long int solutionSize { 0 };
957 std::vector<const xAOD::TrackParticle*> baseTracks;
958 std::vector<const xAOD::NeutralParticle*> dummyNeutrals;
963 pgraph->pgraphm_(
weight.data(), nEdges, nTracks, solution.data(), &solutionSize, nth);
965 ATH_MSG_VERBOSE(
" > " << __FUNCTION__ <<
": Trk::pgraphm_() output: solutionSize = " << solutionSize );
967 if(solutionSize <= 0)
break;
968 if(solutionSize == 1)
continue;
972 std::string
msg =
"solution = [ ";
973 for(
int i=0;
i< solutionSize;
i++) {
974 msg += Form(
"%ld, ", solution[
i]-1 );
984 wrkvrt.isGood =
true;
985 wrkvrt.selectedTrackIndices().clear();
987 for(
long int i = 0;
i<solutionSize;
i++) {
988 wrkvrt.selectedTrackIndices().emplace_back(solution[
i]-1);
989 baseTracks.emplace_back( selectedTracks.at(solution[
i]-1) );
994 auto fitterState =
m_fitSvc->makeState(ctx);
997 if(
sc.isFailure())
ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": fast crude estimation fails ");
999 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
1001 sc =
m_fitSvc->VKalVrtFit(baseTracks, dummyNeutrals,
1009 *fitterState,
false);
1011 ATH_MSG_VERBOSE(
" > " << __FUNCTION__ <<
": FoundAppVrt=" << solutionSize <<
", (r, z) = " << wrkvrt.vertex.perp() <<
", " << wrkvrt.vertex.z() <<
", chi2/ndof = " << wrkvrt.fitQuality() );
1013 if(
sc.isFailure() ) {
1015 if( wrkvrt.selectedTrackIndices().size() <= 2 ) {
1016 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": VKalVrtFit failed in 2-trk solution ==> give up.");
1020 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": VKalVrtFit failed ==> retry...");
1026 for(
auto& itrk: wrkvrt.selectedTrackIndices() ) {
1027 for(
auto& jtrk: wrkvrt.selectedTrackIndices() ) {
1028 if( itrk == jtrk )
continue;
1029 if(
tmp.isGood )
break;
1031 tmp.selectedTrackIndices().clear();
1032 tmp.selectedTrackIndices().emplace_back( itrk );
1033 tmp.selectedTrackIndices().emplace_back( jtrk );
1036 baseTracks.emplace_back( selectedTracks.at( itrk ) );
1037 baseTracks.emplace_back( selectedTracks.at( jtrk ) );
1042 sc =
m_fitSvc->VKalVrtFitFast( baseTracks, initVertex, *fitterState );
1043 if(
sc.isFailure() )
ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": fast crude estimation fails ");
1045 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
1047 sc =
m_fitSvc->VKalVrtFit(baseTracks, dummyNeutrals,
1055 *fitterState,
false);
1057 if(
sc.isFailure() )
continue;
1065 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": Did not find any viable vertex in all 2-trk combinations. Give up.");
1070 for(
auto& itrk: wrkvrt.selectedTrackIndices() ) {
1072 if(
std::find(
tmp.selectedTrackIndices().begin(),
tmp.selectedTrackIndices().end(), itrk ) !=
tmp.selectedTrackIndices().end() )
continue;
1076 tmp.selectedTrackIndices().emplace_back( itrk );
1078 for(
auto& jtrk :
tmp.selectedTrackIndices() ) { baseTracks.emplace_back( selectedTracks.at(jtrk) ); }
1083 sc =
m_fitSvc->VKalVrtFitFast( baseTracks, initVertex, *fitterState );
1084 if(
sc.isFailure())
ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": fast crude estimation fails ");
1086 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
1087 sc =
m_fitSvc->VKalVrtFit(baseTracks, dummyNeutrals,
1095 *fitterState,
false);
1097 if(
sc.isFailure() ) {
1105 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": VKalVrtFit succeeded; register the vertex to the list.");
1106 wrkvrt.isGood =
true;
1109 workVerticesContainer.emplace_back( wrkvrt );
1113 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": VKalVrtFit succeeded; register the vertex to the list.");
1114 wrkvrt.isGood =
true;
1117 workVerticesContainer.emplace_back( wrkvrt );
1128 ATH_MSG_INFO(
"WrkVertex truncated. Too many vertices");
1136 ATH_MSG_VERBOSE(
" > " << __FUNCTION__ <<
": Identify remaining 2-track vertices with very bad Chi2 and mass (b-tagging).");
1137 for(
auto& wrkvrt : workVerticesContainer ) {
1140 if( wrkvrt.selectedTrackIndices().size() != 2 )
continue;
1143 return StatusCode::SUCCESS;
◆ fitVertexFromTracks()
Reconstruct vertex from given tracks.
- Parameters
-
[in,out] | wrkvrt | Base object to be fitted. This algorithm runs fitting using tracks in wrkvrt.selectedTrackIndices(). Information gained from fitting will be stored in this object. |
[in] | selectedTracks | Full list of tracks that passed the track selection. |
[in] | ctx | The event context. Needed for fitting vertex and extraporate tracks. |
- Returns
- Returns SUCCESS and set wrkvrt.isGood true when a vertex is successfully reconstructed from all of given tracks or some of them. In the case that even a seed di-track vertex can't be reconstructed, returns FAILURE and set wrkvrt.isGood false.
Definition at line 1350 of file TrigVrtSecInclusive.cxx.
1354 std::vector<const xAOD::TrackParticle*> baseTracks;
1355 std::vector<const xAOD::NeutralParticle*> dummyNeutrals;
1361 wrkvrt.isGood =
true;
1363 size_t n_trk = wrkvrt.selectedTrackIndices().size();
1365 for(
size_t i = 0;
i<n_trk;
i++) {
1366 baseTracks.emplace_back( selectedTracks.at( wrkvrt.selectedTrackIndices().at(
i) ) );
1371 auto fitterState =
m_fitSvc->makeState(ctx);
1374 if(
sc.isFailure())
ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": fast crude estimation fails ");
1376 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
1378 sc =
m_fitSvc->VKalVrtFit(baseTracks, dummyNeutrals,
1386 *fitterState,
false);
1388 ATH_MSG_VERBOSE(
" > " << __FUNCTION__ <<
": FoundAppVrt=" << n_trk <<
", (r, z) = " << wrkvrt.vertex.perp() <<
", " << wrkvrt.vertex.z() <<
", chi2/ndof = " << wrkvrt.fitQuality() );
1390 if(
sc.isFailure() ) {
1392 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": VKalVrtFit failed ==> retry...");
1398 for(
auto& itrk: wrkvrt.selectedTrackIndices() ) {
1399 for(
auto& jtrk: wrkvrt.selectedTrackIndices() ) {
1400 if( itrk == jtrk )
continue;
1401 if(
tmp.isGood )
break;
1403 tmp.selectedTrackIndices().clear();
1404 tmp.selectedTrackIndices().emplace_back( itrk );
1405 tmp.selectedTrackIndices().emplace_back( jtrk );
1408 baseTracks.emplace_back( selectedTracks.at( itrk ) );
1409 baseTracks.emplace_back( selectedTracks.at( jtrk ) );
1414 sc =
m_fitSvc->VKalVrtFitFast( baseTracks, initVertex, *fitterState );
1415 if(
sc.isFailure() )
ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": fast crude estimation fails ");
1417 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
1419 sc =
m_fitSvc->VKalVrtFit(baseTracks, dummyNeutrals,
1427 *fitterState,
false);
1429 if(
sc.isFailure() )
continue;
1438 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": Did not find any viable vertex in all 2-trk combinations. Give up.");
1439 wrkvrt = std::move(
tmp);
1440 return StatusCode::FAILURE;
1444 for(
auto& itrk: wrkvrt.selectedTrackIndices() ) {
1446 if(
std::find(
tmp.selectedTrackIndices().begin(),
tmp.selectedTrackIndices().end(), itrk ) !=
tmp.selectedTrackIndices().end() )
continue;
1450 tmp.selectedTrackIndices().emplace_back( itrk );
1452 for(
auto& jtrk :
tmp.selectedTrackIndices() ) { baseTracks.emplace_back( selectedTracks.at(jtrk) ); }
1457 sc =
m_fitSvc->VKalVrtFitFast( baseTracks, initVertex, *fitterState );
1458 if(
sc.isFailure())
ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": fast crude estimation fails ");
1460 m_fitSvc->setApproximateVertex( initVertex.x(), initVertex.y(), initVertex.z(), *fitterState );
1461 sc =
m_fitSvc->VKalVrtFit(baseTracks, dummyNeutrals,
1469 *fitterState,
false);
1471 if(
sc.isFailure() ) {
1478 wrkvrt = std::move(
tmp);
1482 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": VKalVrtFit succeeded; register the vertex to the list.");
1483 wrkvrt.isGood =
true;
1487 return StatusCode::SUCCESS;
◆ initialize()
StatusCode TrigVSI::TrigVrtSecInclusive::initialize |
( |
| ) |
|
|
overridevirtual |
Definition at line 38 of file TrigVrtSecInclusive.cxx.
46 return StatusCode::FAILURE;
48 std::unique_ptr<TFile> materialMapInnerFile = std::make_unique<TFile>(
inFileName.c_str(),
"READ");
49 if(materialMapInnerFile->IsOpen()){
54 materialMapInnerFile->Close();
59 return StatusCode::FAILURE;
61 std::unique_ptr<TFile> materialMapOuterFile = std::make_unique<TFile>(
outFileName.c_str(),
"READ");
62 if(materialMapOuterFile->IsOpen()){
66 materialMapOuterFile->Close();
87 return StatusCode::SUCCESS;
◆ inputHandles()
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.
◆ isClonable()
bool AthReentrantAlgorithm::isClonable |
( |
| ) |
const |
|
overridevirtualinherited |
Specify if the algorithm is clonable.
Reentrant algorithms are clonable.
Reimplemented in Simulation::BeamEffectsAlg, InDet::SiTrackerSpacePointFinder, InDet::SCT_Clusterization, InDet::SiSPSeededTrackFinder, SCTRawDataProvider, InDet::GNNSeedingTrackMaker, SCT_PrepDataToxAOD, RoIBResultToxAOD, SCT_CablingCondAlgFromCoraCool, SCT_ReadCalibDataTestAlg, SCT_CablingCondAlgFromText, InDet::SiSPGNNTrackMaker, SCT_ReadCalibChipDataTestAlg, SCT_TestCablingAlg, SCT_ConfigurationConditionsTestAlg, ITkPixelCablingAlg, ITkStripCablingAlg, SCTEventFlagWriter, SCT_ConditionsSummaryTestAlg, SCT_ModuleVetoTestAlg, SCT_MonitorConditionsTestAlg, SCT_LinkMaskingTestAlg, SCT_MajorityConditionsTestAlg, SCT_RODVetoTestAlg, SCT_SensorsTestAlg, SCT_TdaqEnabledTestAlg, SCT_SiliconConditionsTestAlg, SCTSiLorentzAngleTestAlg, SCT_ByteStreamErrorsTestAlg, SCT_ConditionsParameterTestAlg, SCT_FlaggedConditionTestAlg, SCT_StripVetoTestAlg, SCT_RawDataToxAOD, and SCTSiPropertiesTestAlg.
Definition at line 44 of file AthReentrantAlgorithm.cxx.
◆ mergeVertexFromDiTrkVrt()
Reconstruct multi-track vertices from incompatible track pair lists.
- Parameters
-
[out] | workVerticesContainer | Vertex container to add reconstructed vertices. |
[in] | incomp | Incompatible track pair lists. Tracks are written in indices in the full selected track lists. |
[in] | trkIdx | The partial list of indices of tracks to be used in reconstruction. |
[in] | selectedTracks | Full list of tracks that passed the track selection. |
[in] | ctx | The event context. Needed for fitting vertex and extraporate tracks. |
Definition at line 1243 of file TrigVrtSecInclusive.cxx.
1248 ATH_MSG_DEBUG(
"TrigVrtSecInclusive::mergeVertexFromDiTrkVrt : start");
1252 auto pgraph = std::make_unique<Trk::PGraph>();
1254 std::unordered_map<size_t,size_t> dict_trk_idx;
1255 size_t n_trk = trkIdx.size();
1257 for (
size_t i = 0;
i < n_trk;
i++) {
1258 dict_trk_idx.emplace( trkIdx.at(
i),
i );
1261 const auto compSize = (n_trk*(n_trk - 1))/2 - incomp.size();
1263 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": compatible track pair size = " << compSize );
1264 ATH_MSG_DEBUG(
" > " << __FUNCTION__ <<
": incompatible track pair size = " << incomp.size() );
1268 std::vector<long int>
weight;
1270 for(
auto& pair : incomp ) {
1271 weight.emplace_back( dict_trk_idx[pair.first] + 1 );
1272 weight.emplace_back( dict_trk_idx[pair.second] + 1 );
1277 std::vector<long int> solution( n_trk );
1280 long int nEdges = incomp.size();
1283 long int nTracks =
static_cast<long int>( n_trk );
1291 long int solutionSize { 0 };
1293 ATH_MSG_DEBUG(
"TrigVrtSecInclusive::mergeVertexFromDiTrkVrt : while loop start" );
1299 pgraph->pgraphm_(
weight.data(), nEdges, nTracks, solution.data(), &solutionSize, nth);
1301 ATH_MSG_VERBOSE(
" > " << __FUNCTION__ <<
": Trk::pgraphm_() output: solutionSize = " << solutionSize );
1302 ATH_MSG_DEBUG(
"TrigVrtSecInclusive::mergeVertexFromDiTrkVrt : Trk::pgraphm_() output: solutionSize = " << solutionSize );
1304 if(solutionSize <= 0)
break;
1305 if(solutionSize == 1)
continue;
1308 std::string
msg =
"solution = [ ";
1309 for(
int i=0;
i< solutionSize;
i++) {
1310 msg += Form(
"%ld, ", trkIdx[ solution[
i]-1 ] );
1320 wrkvrt.isGood =
true;
1321 wrkvrt.selectedTrackIndices().clear();
1323 for(
long int i = 0;
i<solutionSize;
i++) {
1324 wrkvrt.selectedTrackIndices().emplace_back( trkIdx[ solution[
i]-1 ] );
1328 workVerticesContainer.emplace_back( std::move(wrkvrt) );
1333 return StatusCode::SUCCESS;
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ nTrkCommon()
size_t TrigVSI::TrigVrtSecInclusive::nTrkCommon |
( |
WrkVrtContainer & |
workVerticesContainer, |
|
|
const std::pair< unsigned, unsigned > & |
pairIndex |
|
) |
| const |
|
private |
Definition at line 1538 of file TrigVrtSecInclusive.cxx.
1544 auto& trackIndices1 = workVerticesContainer.at( pairIndex.first ).selectedTrackIndices();
1545 auto& trackIndices2 = workVerticesContainer.at( pairIndex.second ).selectedTrackIndices();
1547 if( trackIndices1.size() < 2 )
return 0;
1548 if( trackIndices2.size() < 2 )
return 0;
1552 for(
auto&
index : trackIndices1 ) {
1553 if(
std::find(trackIndices2.begin(),trackIndices2.end(),
index) != trackIndices2.end()) nTrkCom++;
◆ outputHandles()
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.
◆ renounce()
◆ renounceArray()
◆ selectTrack()
◆ selectTrack_chi2Cut()
◆ selectTrack_d0Cut()
◆ selectTrack_hitPattern()
◆ selectTrack_pTCut()
◆ selectTrack_z0Cut()
◆ setFilterPassed()
virtual void AthReentrantAlgorithm::setFilterPassed |
( |
bool |
state, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
inlinevirtualinherited |
◆ sysExecute()
StatusCode AthReentrantAlgorithm::sysExecute |
( |
const EventContext & |
ctx | ) |
|
|
overridevirtualinherited |
Execute an algorithm.
We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.
Definition at line 67 of file AthReentrantAlgorithm.cxx.
69 return Gaudi::Algorithm::sysExecute (ctx);
◆ sysInitialize()
StatusCode AthReentrantAlgorithm::sysInitialize |
( |
| ) |
|
|
overridevirtualinherited |
Override sysInitialize.
Override sysInitialize from the base class.
Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc
Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc
Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.
Reimplemented in InputMakerBase, and HypoBase.
Definition at line 96 of file AthReentrantAlgorithm.cxx.
107 if ( cs.retrieve().isFailure() ) {
109 return StatusCode::SUCCESS;
111 if (cs->regHandle(
this,*
h).isFailure()) {
112 sc = StatusCode::FAILURE;
113 ATH_MSG_ERROR(
"unable to register WriteCondHandle " <<
h->fullKey()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ trackSelection()
Definition at line 266 of file TrigVrtSecInclusive.cxx.
269 std::vector<const xAOD::TrackParticleContainer*> v_containers;
270 if( firstPassTrackParticles !=
nullptr ) v_containers.push_back(firstPassTrackParticles);
271 if( secondPassTrackParticles !=
nullptr ) v_containers.push_back(secondPassTrackParticles);
275 for(
unsigned int i=0;
i<v_containers.size();
i++) {
278 for (TrackParticleDataVecIter itr = trackParticles->
begin(); itr != trackParticles->
end(); ++itr) {
279 if(
selectTrack(*itr) ) { selectedTracks.push_back(*itr); n_trk++; }
281 ATH_MSG_DEBUG(
"Of " << trackParticles->
size() <<
" tracks " << n_trk <<
" survived the preselection.");
283 ATH_MSG_DEBUG(selectedTracks.size() <<
" tracks in total passed the selection.");
284 return StatusCode::SUCCESS;
◆ updateVHKA()
◆ m_cutBLayHits
Gaudi::Property<int> TrigVSI::TrigVrtSecInclusive::m_cutBLayHits {this, "CutBLayHits", 0, "Track selection : Hit requirements"} |
|
private |
◆ m_cutPixelHits
Gaudi::Property<int> TrigVSI::TrigVrtSecInclusive::m_cutPixelHits {this, "CutPixelHits", 0, "Track selection : Hit requirements"} |
|
private |
◆ m_cutSctHits
Gaudi::Property<int> TrigVSI::TrigVrtSecInclusive::m_cutSctHits {this, "CutSctHits", 2, "Track selection : Hit requirements"} |
|
private |
◆ m_cutSharedHits
Gaudi::Property<int> TrigVSI::TrigVrtSecInclusive::m_cutSharedHits {this, "CutSharedHits", 99, "Track selection : Hit requirements"} |
|
private |
◆ m_cutSiHits
Gaudi::Property<int> TrigVSI::TrigVrtSecInclusive::m_cutSiHits {this, "CutSiHits", 0, "Track selection : Hit requirements"} |
|
private |
◆ m_d0TrkPVDstMaxCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_d0TrkPVDstMaxCut {this, "d0TrkPVDstMaxCut", 300.0, "Track selection : Impact parameter requirements [mm]"} |
|
private |
◆ m_d0TrkPVDstMinCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_d0TrkPVDstMinCut {this, "d0TrkPVDstMinCut", 2.0, "Track selection : Impact parameter requirements [mm]"} |
|
private |
◆ m_detStore
◆ m_doFastRCut
Gaudi::Property<bool> TrigVSI::TrigVrtSecInclusive::m_doFastRCut {this, "doFastRCut", false, "Track-pair selection : Flag for R cut derived from VKalVrtFitFast"} |
|
private |
◆ m_doMaterialMapVeto
Gaudi::Property<bool> TrigVSI::TrigVrtSecInclusive::m_doMaterialMapVeto {this, "doMaterialMapVeto", false, "Track-pair selection : When set to true, perform material map veto on track pairs"} |
|
private |
◆ m_doPVCompatibilityCut
Gaudi::Property<bool> TrigVSI::TrigVrtSecInclusive::m_doPVCompatibilityCut {this, "doPVCompatibilityCut", false, "Track-pair selection : When set to true, require track pairs to be compatible with PV"} |
|
private |
◆ m_doTwoCircRCut
Gaudi::Property<bool> TrigVSI::TrigVrtSecInclusive::m_doTwoCircRCut {this, "doTwoCircRCut", false, "Track-pair selection : Flag for R cut derived from two-circles-intersection-point"} |
|
private |
◆ m_dphiPVCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_dphiPVCut {this, "dphiPVCut", -0.8, "Track-pair selection : Threshold for the cos of angle of the tracks and the momentum of the track pair"} |
|
private |
◆ m_evtStore
◆ m_extendedExtraObjects
DataObjIDColl AthReentrantAlgorithm::m_extendedExtraObjects |
|
privateinherited |
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
Empty if no symlinks were found.
Definition at line 153 of file AthReentrantAlgorithm.h.
◆ m_fastD0deltaCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_fastD0deltaCut {this, "fastD0deltaCut", 4.2, "Track-pair selection : Threshold for rough d0 cut"} |
|
private |
◆ m_fastD0minCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_fastD0minCut {this, "fastD0minCut", 5., "Track-pair selection : Threshold for rough d0 cut"} |
|
private |
◆ m_fastZ0deltaCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_fastZ0deltaCut {this, "fastZ0deltaCut", 8., "Track-pair selection : Threshold for rough z0 cut"} |
|
private |
◆ m_fastZ0minCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_fastZ0minCut {this, "fastZ0minCut", 120., "Track-pair selection : Threshold for rough z0 cut"} |
|
private |
◆ m_firstPassTracksName
◆ m_fitSvc
ToolHandle<Trk::TrkVKalVrtFitter> TrigVSI::TrigVrtSecInclusive::m_fitSvc { this, "VertexFitter", "", "VKalVrtFitter tool to fit tracks into the common vertex" } |
|
private |
◆ m_improveChi2ProbThreshold
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_improveChi2ProbThreshold {this, "improveChi2ProbThreshold", 4.5, "Offline VSI option"} |
|
private |
◆ m_materialMapInner
TH3S* TrigVSI::TrigVrtSecInclusive::m_materialMapInner =0 |
|
private |
◆ m_materialMapInnerFileName
std::string TrigVSI::TrigVrtSecInclusive::m_materialMapInnerFileName |
|
private |
◆ m_materialMapInnerHistName
std::string TrigVSI::TrigVrtSecInclusive::m_materialMapInnerHistName |
|
private |
◆ m_materialMapInnerMatrixName
std::string TrigVSI::TrigVrtSecInclusive::m_materialMapInnerMatrixName |
|
private |
◆ m_materialMapMatrix
TMatrixT<double>* TrigVSI::TrigVrtSecInclusive::m_materialMapMatrix =0 |
|
private |
◆ m_materialMapOuter
TH3S* TrigVSI::TrigVrtSecInclusive::m_materialMapOuter =0 |
|
private |
◆ m_materialMapOuterFileName
std::string TrigVSI::TrigVrtSecInclusive::m_materialMapOuterFileName |
|
private |
◆ m_materialMapOuterHistName
std::string TrigVSI::TrigVrtSecInclusive::m_materialMapOuterHistName |
|
private |
◆ m_maxR
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_maxR {this, "maxR", 563., "Track-pair selection : Max value for R of vertex position"} |
|
private |
◆ m_maxTrks
Gaudi::Property<size_t> TrigVSI::TrigVrtSecInclusive::m_maxTrks {this, "maxTrks", 100, "Max track number to run vertexing"} |
|
private |
◆ m_maxWrkVertices
Gaudi::Property<size_t> TrigVSI::TrigVrtSecInclusive::m_maxWrkVertices {this, "maxWrkVertices", 10000, "Offline VSI option"} |
|
private |
◆ m_minTrkPairsMerge
Gaudi::Property<size_t> TrigVSI::TrigVrtSecInclusive::m_minTrkPairsMerge {this, "minTrkPairsMerge", 6, "Clusters with track pairs less than minTrkPairsMerge and tracks less than minTrksMerge will be merged into single vertex"} |
|
private |
◆ m_minTrksMerge
Gaudi::Property<size_t> TrigVSI::TrigVrtSecInclusive::m_minTrksMerge {this, "minTrksMerge", 4, "Clusters with track pairs less than minTrkPairsMerge and tracks less than minTrksMerge will be merged into single vertex"} |
|
private |
◆ m_monTool
◆ m_PrimaryVxInputName
◆ m_pvCompatibilityCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_pvCompatibilityCut {this, "PVcompatibilityCut", -20., "Track-pair selection : Threshold for the track pair position along the momentum vector"} |
|
private |
◆ m_recordTrkPair
Gaudi::Property<bool> TrigVSI::TrigVrtSecInclusive::m_recordTrkPair {this, "recordTrkPair", false, "Output EDM : Flag for record TrkPair vertices"} |
|
private |
◆ m_secondPassTracksName
◆ m_selVrtChi2Cut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_selVrtChi2Cut {this, "SelVrtChi2Cut", 4.5, "Track-pair selection : Threshold for the chi2 value of track pair fitting with VKalVrtFit"} |
|
private |
◆ m_skipLargeCluster
Gaudi::Property<bool> TrigVSI::TrigVrtSecInclusive::m_skipLargeCluster {this, "skipLargeCluster", true, "Flag to skip vertexing on clusters with too many tracks"} |
|
private |
◆ m_trkChi2Cut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_trkChi2Cut {this, "TrkChi2Cut", 50.0, "Track selection : Chi2 requirements"} |
|
private |
◆ m_trkPairOutputName
◆ m_trkPtCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_trkPtCut {this, "TrkPtCut", (m_vtxAlgorithm == 0)? 2000. : 1000., "Track selection : pT requirements. 2 GeV in TrigVSI, 1 GeV in VSI"} |
|
private |
◆ m_truncateWrkVertices
Gaudi::Property<bool> TrigVSI::TrigVrtSecInclusive::m_truncateWrkVertices {this, "truncateWrkVertices", true, "Offline VSI option"} |
|
private |
◆ m_twoTrkVtxFormingD0Cut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_twoTrkVtxFormingD0Cut {this, "twoTrkVtxFormingD0Cut", 1., "Track selection : Impact parameter requirements [mm]"} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vertexPointEstimator
ToolHandle<InDet::VertexPointEstimator> TrigVSI::TrigVrtSecInclusive::m_vertexPointEstimator { this, "VertexPointEstimator", "", "tool to find starting point for the vertex fitter"} |
|
private |
◆ m_vhka
◆ m_vtxAlgorithm
Gaudi::Property<int> TrigVSI::TrigVrtSecInclusive::m_vtxAlgorithm {this, "vtxAlgorithm", 0, "Vertexing algorithm. 0 : TrigVSI algorithm, 1 : Offline VSI like algorithm"} |
|
private |
◆ m_vxCandidatesOutputName
◆ m_z0TrkPVDstMaxCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_z0TrkPVDstMaxCut {this, "z0TrkPVDstMaxCut", 1500.0, "Track selection : Impact parameter requirements [mm]"} |
|
private |
◆ m_z0TrkPVDstMinCut
Gaudi::Property<double> TrigVSI::TrigVrtSecInclusive::m_z0TrkPVDstMinCut {this, "z0TrkPVDstMinCut", 0.0, "Track selection : Impact parameter requirements [mm]"} |
|
private |
The documentation for this class was generated from the following files:
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Gaudi::Property< bool > m_doMaterialMapVeto
StatusCode findDiTrackVertex(WrkVrtContainer &, std::vector< std::pair< size_t, size_t >> &, std::vector< const xAOD::TrackParticle * > &, const EventContext &, const xAOD::Vertex *) const
Const iterator class for DataVector/DataList.
StatusCode fillVtxContainer(xAODContainers &, const WrkVrtContainer &, std::vector< const xAOD::TrackParticle * > &) const
Group
Properties of a chain group.
StatusCode findDiTrackVertexVSI(WrkVrtContainer &, std::vector< std::pair< size_t, size_t >> &, std::vector< const xAOD::TrackParticle * > &, const EventContext &, const xAOD::Vertex *) const
size_t nTrackParticles() const
Get the number of tracks associated with this vertex.
TH3S * m_materialMapInner
std::string m_materialMapOuterFileName
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
Vertex_v1 Vertex
Define the latest version of the vertex class.
value_type emplace_back(value_type pElem)
Add an element to the end of the collection.
std::string find(const std::string &s)
return a remapped string
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
StatusCode fitVertexFromTracks(WrkVrt &, const std::vector< const xAOD::TrackParticle * > &, const EventContext &) const
Reconstruct vertex from given tracks.
Gaudi::Property< size_t > m_maxWrkVertices
Gaudi::Property< size_t > m_minTrksMerge
float charge() const
Returns the charge.
std::string m_materialMapInnerFileName
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
StatusCode findNTrackVertex(WrkVrtContainer &, TrigVSI::VtxMap< VrtType, Coord > &, const std::vector< const xAOD::TrackParticle * > &, const EventContext &) const
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
Gaudi::Property< double > m_trkPtCut
StatusCode mergeVertexFromDiTrkVrt(WrkVrtContainer &, const std::vector< std::pair< size_t, size_t >> &, const std::vector< size_t > &, const std::vector< const xAOD::TrackParticle * > &, const EventContext &) const
Reconstruct multi-track vertices from incompatible track pair lists.
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)
Gaudi::Property< bool > m_doTwoCircRCut
Gaudi::Property< size_t > m_minTrkPairsMerge
Gaudi::Property< double > m_z0TrkPVDstMaxCut
float z0() const
Returns the parameter.
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
float chiSquared() const
Returns the of the overall track fit.
std::vector< SG::VarHandleKeyArray * > m_vhka
const T * get(size_type n) const
Access an element, as an rvalue.
Gaudi::Property< bool > m_doPVCompatibilityCut
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
const Amg::Vector3D & position() const
Returns the 3-pos.
bool selectTrack_pTCut(const xAOD::TrackParticle *trk) const
#define ATH_MSG_VERBOSE(x)
Gaudi::Property< bool > m_doFastRCut
std::pair< std::unique_ptr< xAOD::VertexContainer >, std::unique_ptr< xAOD::VertexAuxContainer > > xAODContainers
Gaudi::Property< double > m_fastZ0deltaCut
VxType::VertexType vertexType() const
The type of the vertex.
constexpr int nPhi
Default bin number of phi for vertex map.
StatusCode trackSelection(const xAOD::TrackParticleContainer *, const xAOD::TrackParticleContainer *, std::vector< const xAOD::TrackParticle * > &) const
float d0() const
Returns the parameter.
ToolHandle< Trk::TrkVKalVrtFitter > m_fitSvc
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
ToolHandle< InDet::VertexPointEstimator > m_vertexPointEstimator
virtual void setOwner(IDataHandleHolder *o)=0
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_firstPassTracksName
SG::WriteHandleKey< xAOD::VertexContainer > m_trkPairOutputName
bool selectTrack_z0Cut(const xAOD::TrackParticle *trk) const
Gaudi::Property< int > m_vtxAlgorithm
std::map< std::string, float > Values_t
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
Gaudi::Property< double > m_trkChi2Cut
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
StatusCode findNtrackVerticesVSI(WrkVrtContainer &, std::vector< std::pair< size_t, size_t >> &, std::vector< const xAOD::TrackParticle * > &, const EventContext &) const
bool selectTrack_d0Cut(const xAOD::TrackParticle *trk) const
Gaudi::Property< double > m_z0TrkPVDstMinCut
AthReentrantAlgorithm()
Default constructor:
constexpr float mapBinWid
Default bin width for vertex map.
TMatrixT< double > * m_materialMapMatrix
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
Gaudi::Property< bool > m_truncateWrkVertices
::StatusCode StatusCode
StatusCode definition for legacy code.
@ SecVtx
Secondary vertex.
StatusCode cleanUp(WrkVrtContainer &) const
Gaudi::Property< int > m_cutSharedHits
Gaudi::Property< double > m_improveChi2ProbThreshold
size_t nClusters() const
Return the number of the clusters.
CellCluster getCluster(size_t)
Retrieve clustering result as CellCluster object.
Gaudi::Property< bool > m_recordTrkPair
std::string m_materialMapOuterHistName
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
bool selectTrack(const xAOD::TrackParticle *trk) const
DataObjIDColl m_extendedExtraObjects
Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
virtual void renounce()=0
bool selectTrack_hitPattern(const xAOD::TrackParticle *trk) const
SG::WriteHandleKey< xAOD::VertexContainer > m_vxCandidatesOutputName
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Gaudi::Property< double > m_d0TrkPVDstMaxCut
std::string m_materialMapInnerMatrixName
The vertex map class to be used to find multi-track vertices.
Gaudi::Property< int > m_cutSctHits
virtual StatusCode sysInitialize() override
Override sysInitialize.
ToolHandle< GenericMonitoringTool > m_monTool
std::string m_materialMapInnerHistName
Eigen::Matrix< double, 3, 1 > Vector3D
Gaudi::Property< int > m_cutPixelHits
Gaudi::Property< double > m_dphiPVCut
Gaudi::Property< double > m_fastD0deltaCut
Gaudi::Property< double > m_fastD0minCut
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
constexpr int binNumR
Default bin number of R for vertex map.
Gaudi::Property< size_t > m_maxTrks
Class describing a Vertex.
#define ATH_MSG_WARNING(x)
std::vector< WrkVrt > WrkVrtContainer
bool selectTrack_chi2Cut(const xAOD::TrackParticle *trk) const
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Gaudi::Property< int > m_cutBLayHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Gaudi::Property< double > m_selVrtChi2Cut
constexpr float IDrInner
Minimum R of ID volume.
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
Class describing a TrackParticle.
size_t nTrkCommon(WrkVrtContainer &, const std::pair< unsigned, unsigned > &) const
const T * at(size_type n) const
Access an element, as an rvalue.
constexpr int nEta
Default bin number of eta for vertex map.
SG::ReadHandleKey< xAOD::VertexContainer > m_PrimaryVxInputName
Gaudi::Property< double > m_twoTrkVtxFormingD0Cut
TH3S * m_materialMapOuter
Gaudi::Property< double > m_fastZ0minCut
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Gaudi::Property< double > m_pvCompatibilityCut
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Gaudi::Property< int > m_cutSiHits
Gaudi::Property< double > m_d0TrkPVDstMinCut
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_secondPassTracksName
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
GeoGenfun::FunctionNoop ATan2(GeoGenfun::GENFUNCTION y, GeoGenfun::GENFUNCTION x)
Gaudi::Property< double > m_maxR