31 double baseScorePerHit = 17.;
43 double hitQualityScore;
47 hitQualityScore = (1.2 * (baseScorePerHit -
x2 * .5));
49 hitQualityScore = (baseScorePerHit -
x2);
50 if (hitQualityScore < 0.)
53 quality += hitQualityScore;
97 dump(MSG::DEBUG,
nullptr);
102 return StatusCode::SUCCESS;
115 if (!key.key().empty()) {
143 auto theVertexContainer = std::make_unique<xAOD::VertexContainer>();
144 auto theVertexAuxContainer = std::make_unique<xAOD::VertexAuxContainer>();
145 theVertexContainer->setStore( theVertexAuxContainer.get() );
149 std::vector<InDet::IZWindowRoISeedTool::ZWindow> listRoIs;
151 double ZBoundary[2] = {0.0, 0.0};
153 if ( listRoIs.empty() ) {
157 ZBoundary[0] = listRoIs[0].zWindow[0];
158 ZBoundary[1] = listRoIs[0].zWindow[1];
159 ATH_MSG_DEBUG(
"selectedRoIs " << ZBoundary[0] <<
" " << ZBoundary[1]);
163 static const SG::AuxElement::Accessor<float> vtxDecor_boundaryLow(
"boundaryLow");
164 static const SG::AuxElement::Accessor<float> vtxDecor_boundaryHigh(
"boundaryHigh");
165 static const SG::AuxElement::Accessor<float> vtxDecor_perigeeZ0Lead(
"perigeeZ0Lead");
166 static const SG::AuxElement::Accessor<float> vtxDecor_perigeeZ0Sublead(
"perigeeZ0Sublead");
167 static const SG::AuxElement::Accessor<float> vtxDecor_isHS(
"isHS");
169 for(
size_t r = 0;
r < listRoIs.size();
r++ ){
173 theVertexContainer->back()->setZ( listRoIs[
r].zReference );
174 vtxDecor_boundaryLow(*theVertexContainer->back()) = listRoIs[
r].zWindow[0];;
175 vtxDecor_boundaryHigh(*theVertexContainer->back()) = listRoIs[
r].zWindow[1];
176 vtxDecor_perigeeZ0Lead(*theVertexContainer->back()) = listRoIs[
r].zPerigeePos[0];
177 vtxDecor_perigeeZ0Sublead(*theVertexContainer->back()) = listRoIs[
r].zPerigeePos[1];
178 vtxDecor_isHS(*theVertexContainer->back()) = 1;
187 double RandZBoundary[2];
188 std::vector<InDet::IZWindowRoISeedTool::ZWindow> listRandRoIs;
193 while( std::abs( listRoIs[0].zReference - listRandRoIs[0].zReference ) < 5. || std::abs(listRandRoIs[0].zReference) > 250.0 ){
194 listRandRoIs.clear();
198 RandZBoundary[0] = listRandRoIs[0].zWindow[0];
199 RandZBoundary[1] = listRandRoIs[0].zWindow[1];
200 for(
size_t r = 0;
r < listRandRoIs.size();
r++ ){
204 theVertexContainer->back()->setZ( listRandRoIs[
r].zReference );
205 vtxDecor_boundaryLow(*theVertexContainer->back()) = listRoIs[
r].zWindow[0];;
206 vtxDecor_boundaryHigh(*theVertexContainer->back()) = listRoIs[
r].zWindow[1];
207 vtxDecor_perigeeZ0Lead(*theVertexContainer->back()) = listRoIs[
r].zPerigeePos[0];
208 vtxDecor_perigeeZ0Sublead(*theVertexContainer->back()) = listRoIs[
r].zPerigeePos[1];
209 vtxDecor_isHS(*theVertexContainer->back()) = 0;
215 CHECK( vxOut_h.
record ( std::move(theVertexContainer), std::move(theVertexAuxContainer) ) );
221 if (not listRoIs.empty()) {
222 std::list<Trk::Vertex> VZ;
237 bool doWriteNtuple =
m_seedsmaker->getWriteNtupleBoolProperty();
238 unsigned long EvNumber = 0;
242 EvNumber = !eventInfo.
isValid() ? 0 : eventInfo->eventNumber();
249 std::multimap<double,Trk::Track*> qualitySortedTrackCandidates;
252 while((seed =
m_seedsmaker->next(ctx, seedEventData))) {
254 const std::list<Trk::Track*> trackList =
m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
256 qualitySortedTrackCandidates.insert(std::make_pair( -trackQuality(t), t ));
261 if (seed->r3() > 200.) {
262 if (seed->r1() < 200.) {
268 m_seedsmaker->writeNtuple(seed, !trackList.empty() ? trackList.front() :
nullptr, seedType, EvNumber) ;
285 for (
const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
291 outputTracks->push_back(qualityAndTrack.second);
299 outputTracks->clear();
307 dump(MSG::DEBUG, &counter);
310 return StatusCode::SUCCESS;
320 dump(MSG::INFO, &m_counterTotal);
322 return StatusCode::SUCCESS;
331 msg(assign_level) <<std::endl;
332 MsgStream& out_msg=
msg();
333 if (counter)
dumpevent(out_msg ,*counter);
347 std::string s2;
for(
int i=0; i<n; ++i) s2.append(
" "); s2.append(
"|");
349 std::string s3;
for(
int i=0; i<n; ++i) s3.append(
" "); s3.append(
"|");
351 std::string s4;
for(
int i=0; i<n; ++i) s4.append(
" "); s4.append(
"|");
353 out<<
"|----------------------------------------------------------------"
354 <<
"----------------------------------------------------|"
356 out<<
"| Tool for space points seeds finding | "<<
m_seedsmaker.type()<<s2
358 out<<
"| Tool for space points seeded track finding | "<<
m_trackmaker.type()<<s3
362 out<<
"|----------------------------------------------------------------"
363 <<
"----------------------------------------------------|"
377 out<<
"|-------------------------------------------------------------------|" <<std::endl;
378 out<<
"| Investigated "
379 <<std::setw(9)<<ns<<
" space points seeds and found ";
380 out<<std::setw(9)<<nt<<
" tracks using RoI-z strategy |"<<std::endl;
382 out<<
"|-------------------------------------------------------------------|" <<std::endl;
390 out<<
"|-------------------------------------------------------------------|" <<std::endl;
400(std::multimap<double,Trk::Track*>& qualitySortedTracks)
const
402 std::set<const Trk::PrepRawData*> clusters;
404 std::vector<const Trk::PrepRawData*> freeClusters;
405 freeClusters.reserve(15);
407 std::multimap<double, Trk::Track*>::iterator it_qualityAndTrack = qualitySortedTracks.begin();
410 while (it_qualityAndTrack!=qualitySortedTracks.end()) {
411 freeClusters.clear();
413 std::set<const Trk::PrepRawData*>::iterator it_clustersEnd = clusters.end();
430 if (not pr)
continue;
434 if (clusters.find(pr)==it_clustersEnd) {
436 freeClusters.push_back(pr);
441 int nFreeClusters =
static_cast<int>(freeClusters.size());
442 if (nFreeClusters >=
m_nfreeCut || nFreeClusters==nClusters) {
445 clusters.insert(freeClusters.begin(), freeClusters.end());
448 ++it_qualityAndTrack;
451 int nFreeClusters =
static_cast<int>(freeClusters.size());
452 if(
passEtaDepCuts( (*it_qualityAndTrack).second, nClusters, nFreeClusters, nPixels) ){
454 ++it_qualityAndTrack;
457 delete (*it_qualityAndTrack).second;
458 qualitySortedTracks.erase(it_qualityAndTrack++);
463 delete (*it_qualityAndTrack).second;
464 qualitySortedTracks.erase(it_qualityAndTrack++);
491 if(!par)
return false;
493 double eta = std::abs(par->eta());
494 if(nClusters < m_etaDependentCutsSvc->getMinSiHitsAtEta(
eta))
return false;
495 if(nFreeClusters < m_etaDependentCutsSvc->getMinSiNotSharedAtEta(
eta))
return false;
497 if(nPixels < m_etaDependentCutsSvc->getMinPixelHitsAtEta(
eta))
return false;
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x,...)
#define CHECK(...)
Evaluate an expression and check for errors.
bool msgLvl(const MSG::Level lvl) const
An algorithm that can be simultaneously executed in multiple threads.
DataModel_detail::const_iterator< DataVector > const_iterator
ExtendedSiTrackMakerEventData_xk(const SG::ReadHandleKey< Trk::PRDtoTrackMap > &key)
SG::ReadHandle< Trk::PRDtoTrackMap > m_prdToTrackMap
std::atomic_int m_neventsTotal
Number events.
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
SG::WriteHandleKey< xAOD::VertexContainer > m_vxOutputKey
virtual StatusCode initialize() override
StringProperty m_fieldmode
void filterSharedTracks(std::multimap< double, Trk::Track * > &) const
cleans up the collection of quality filtered tracks.
std::atomic_int m_problemsTotal
Number events with number seeds > maxNumber.
MsgStream & dumpevent(MsgStream &out, const SiSPSeededTrackFinderRoI::Counter_t &counter) const
SG::ReadHandleKey< xAOD::EventInfo > m_evtKey
bool passEtaDepCuts(const Trk::Track *track, int nClusters, int nFreeClusters, int nPixels) const
apply eta-dependent selections
IntegerProperty m_maxNumberSeeds
BooleanProperty m_useRoIWidth
ToolHandle< ISiSpacePointsSeedMaker > m_seedsmaker
SiSPSeededTrackFinderRoI(const std::string &name, ISvcLocator *pSvcLocator)
MsgStream & dumptools(MsgStream &out) const
SG::WriteHandleKey< TrackCollection > m_outputTracksKey
ServiceHandle< IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc
BooleanProperty m_doRandomSpot
Trk::MagneticFieldProperties m_fieldprop
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
ToolHandle< ISiTrackMaker > m_trackmaker
virtual StatusCode execute(const EventContext &ctx) const override
MsgStream & dump(MSG::Level lvl, const SiSPSeededTrackFinderRoI::Counter_t *) const
ToolHandle< IZWindowRoISeedTool > m_RandomRoISeedTool
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
ToolHandle< IZWindowRoISeedTool > m_ZWindowRoISeedTool
IntegerProperty m_nfreeCut
virtual StatusCode finalize() override
InDet::SiSpacePointsSeedMakerEventData holds event dependent data used by ISiSpacePointsSeedMaker.
InDet::SiTrackMakerEventData_xk holds event dependent data used by ISiTrackMaker.
void setPRDtoTrackMap(const Trk::PRDtoTrackMap *prd_to_track_map)
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
double chiSquared() const
returns the of the overall track fit
magnetic field properties to steer the behavior of the extrapolation
This class is the pure abstract base class for all fittable tracking measurements.
Class describing the Line to which the Perigee refers to.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
bool trackProperties(const TrackProperties &property) const
Access methods for track properties.
@ BremFit
A brem fit was performed on this track.
represents the track state (measurement, material, fit parameters and quality) at a surface.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
@ FastField
call the fast field access method of the FieldSvc
@ NoField
Field is set to 0., 0., 0.,.
ParametersBase< TrackParametersDim, Charged > TrackParameters
Vertex_v1 Vertex
Define the latest version of the vertex class.