16#include "Identifier/Identifier.h"
34 double baseScorePerHit = 17.;
46 double hitQualityScore;
50 hitQualityScore = (1.2 * (baseScorePerHit -
x2 * .5));
52 hitQualityScore = (baseScorePerHit -
x2);
53 if (hitQualityScore < 0.)
56 quality += hitQualityScore;
134 dump(MSG::DEBUG,
nullptr);
140 return StatusCode::SUCCESS;
170 if (!key.key().empty()) {
187 return StatusCode::SUCCESS;
193 std::list<Trk::Vertex> vertices =
m_zvertexmaker->newEvent(ctx, seedEventData);
194 if (not vertices.empty()) ZVE =
true;
198 std::list<Trk::Vertex> vertexList;
202 const bool PIX =
true;
203 const bool SCT =
true;
212 std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
215 while ((seed =
m_seedsmaker->next(ctx, seedEventData))) {
217 std::list<Trk::Track*> trackList =
m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
219 qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
235 for (
const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
241 outputTracks->push_back(qualityAndTrack.second);
250 outputTracks->clear();
258 dump(MSG::DEBUG, &counter);
261 return StatusCode::SUCCESS;
274 return StatusCode::SUCCESS;
299 std::list<Trk::Vertex> vertexList;
303 const bool PIX = true ;
304 const bool SCT = true ;
312 std::vector<int> numberHistogram(
m_histsize, 0);
313 std::vector<double> zWeightedHistogram(
m_histsize, 0.);
314 std::vector<double> ptWeightedHistogram(
m_histsize, 0.);
321 std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
324 bool doWriteNtuple =
m_seedsmaker->getWriteNtupleBoolProperty();
329 if(!eventInfo.
isValid()) {EvNumber = -1.0;}
else {EvNumber = eventInfo->eventNumber();}
333 while ((seed =
m_seedsmaker->next(ctx, seedEventData))) {
337 bool firstTrack{
true};
340 std::list<Trk::Track*> trackList =
m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
344 qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
352 fillZHistogram(ctx, t, beamPosPerigee, numberHistogram, zWeightedHistogram, ptWeightedHistogram);
375 std::pair<double,double> zBoundaries;
378 findZvertex(vertexList, zBoundaries, numberHistogram, zWeightedHistogram, ptWeightedHistogram);
381 m_seedsmaker->find3Sp(ctx, seedEventData, vertexList, &(zBoundaries.first));
387 while ((seed =
m_seedsmaker->next(ctx, seedEventData))) {
391 std::list<Trk::Track*> trackList =
m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
394 qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
406 ATH_MSG_WARNING(
"SpacePointsPixelKey is empty. Skipping the second seeding pass that uses pixel seeds.");
415 for (
const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
433 outputTracks->push_back(qualityAndTrack.second);
444 outputTracks->clear();
452 dump(MSG::DEBUG, &counter);
454 return StatusCode::SUCCESS;
468 const bool PIX = true ;
469 const bool STRIP = true ;
474 m_trackmaker->newTrigEvent(ctx, trackEventData, PIX, STRIP);
489 std::list<Trk::Vertex> vertexList;
498 std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
501 bool doWriteNtuple =
m_seedsmaker->getWriteNtupleBoolProperty();
506 if(!eventInfo.
isValid()) {EvNumber = -1.0;}
else {EvNumber = eventInfo->eventNumber();}
510 while ((seed =
m_seedsmaker->next(ctx, seedEventData))) {
515 std::list<Trk::Track*> trackList =
m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
519 qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
538 for (
const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
555 outputTracks->push_back(qualityAndTrack.second);
563 outputTracks->clear();
571 dump(MSG::DEBUG, &counter);
573 return StatusCode::SUCCESS;
583 ATH_MSG_DEBUG(
"Executing " << name() <<
"::itkConvStrategy");
589 return StatusCode::SUCCESS;
595 std::unique_ptr<RoiDescriptor> roiComp = std::make_unique<RoiDescriptor>(
true);
600 double beamZ = beamSpotHandle->beamVtx().position().z();
602 roiComp->setComposite();
605 for (
const ROIPhiRZ &calo_roi : calo_rois_ref) {
606 double phi = calo_roi.phi();
608 double eta = calo_roi.eta();
616 roi =
new RoiDescriptor(
eta, roiEtaMin, roiEtaMax,
phi, roiPhiMin ,roiPhiMax,
z,roiZMin,roiZMax);
617 roiComp->push_back(roi);
622 return StatusCode::FAILURE;
625 std::vector<IdentifierHash> listOfStripIds;
626 std::vector<IdentifierHash> listOfPixIds;
628 m_regsel_strip->lookup(ctx)->HashIDList( *roiComp, listOfStripIds );
631 m_seedsmaker->newRegion(ctx, seedEventData, listOfPixIds, listOfStripIds);
632 std::list<Trk::Vertex> vertexList;
636 const bool PIX = true ;
637 const bool STRIP = true ;
642 m_trackmaker->newEvent(ctx, trackEventData, PIX, STRIP);
649 std::multimap<double, Trk::Track*> qualitySortedTrackCandidates;
652 bool doWriteNtuple =
m_seedsmaker->getWriteNtupleBoolProperty();
657 if(!eventInfo.
isValid()) {EvNumber = -1.0;}
else {EvNumber = eventInfo->eventNumber();}
661 while ((seed =
m_seedsmaker->next(ctx, seedEventData))) {
666 std::list<Trk::Track*> trackList =
m_trackmaker->getTracks(ctx, trackEventData, seed->spacePoints());
669 qualitySortedTrackCandidates.insert(std::make_pair(-trackQuality(t), t));
688 for (
const std::pair<const double, Trk::Track*> & qualityAndTrack: qualitySortedTrackCandidates) {
706 outputTracks->push_back(qualityAndTrack.second);
714 outputTracks->clear();
722 dump(MSG::DEBUG, &counter);
724 return StatusCode::SUCCESS;
736 dump(MSG::INFO, &m_counterTotal);
741 return StatusCode::SUCCESS;
750 msg(assign_level) <<std::endl;
751 MsgStream& out_msg=
msg();
752 if (counter)
dumpevent(out_msg ,*counter);
765 std::string s1;
for (
int i=0; i<n; ++i) s1.append(
" "); s1.append(
"|");
767 std::string s2;
for (
int i=0; i<n; ++i) s2.append(
" "); s2.append(
"|");
769 std::string s3;
for (
int i=0; i<n; ++i) s3.append(
" "); s3.append(
"|");
771 std::string s4;
for (
int i=0; i<n; ++i) s4.append(
" "); s4.append(
"|");
775 n = 65-s5.size();
for (
int i=0; i<n; ++i) s5.append(
" "); s5.append(
"|");
777 out<<
"|----------------------------------------------------------------"
778 <<
"----------------------------------------------------|"
780 out<<
"| Use primary vertices z-coordinates finding?| "<<s5
783 out<<
"| Tool for primary vertices z-coordinates finding | "<<
m_zvertexmaker.type()<<s1
786 out<<
"| Tool for space points seeds finding | "<<
m_seedsmaker.type()<<s2
788 out<<
"| Tool for space points seeded track finding | "<<
m_trackmaker.type()<<s3
792 out<<
"|----------------------------------------------------------------"
793 <<
"----------------------------------------------------|"
804 out<<
"|-------------------------------------------------------------------";
805 out<<
"---------------------------------|"
807 out<<
"| Investigated "
808 <<std::setw(9)<<counter[
kNSeeds]<<
" space points seeds and found ";
809 out<<std::setw(9)<<counter[
kNTracks];
810 if (
m_ITKGeometry ) out<<
" tracks using new strategy for ITK |"<<std::endl;
813 else out<<
" tracks using old strategy |"<<std::endl;
815 out<<
"|-------------------------------------------------------------------";
816 out<<
"---------------------------------|"
827 out<<
"|-------------------------------------------------------------------";
828 out<<
"-----------------------------|"
853 unsigned int nsp = 0;
856 if (spacePointsPixel.
isValid()) {
871 if (spacePointsSCT.
isValid()) {
891 std::set<const Trk::PrepRawData*> clusters;
893 std::vector<const Trk::PrepRawData*> freeClusters;
894 freeClusters.reserve(15);
896 std::multimap<double, Trk::Track*>::iterator it_qualityAndTrack = qualitySortedTracks.begin();
899 while (it_qualityAndTrack!=qualitySortedTracks.end()) {
900 freeClusters.clear();
902 std::set<const Trk::PrepRawData*>::iterator it_clustersEnd = clusters.end();
914 if (clusters.find(pr)==it_clustersEnd) {
916 freeClusters.push_back(pr);
922 int nFreeClusters =
static_cast<int>(freeClusters.size());
923 if (nFreeClusters >=
m_nfreeCut || nFreeClusters==nClusters) {
926 clusters.insert(freeClusters.begin(), freeClusters.end());
927 ++it_qualityAndTrack;
930 delete (*it_qualityAndTrack).second;
931 qualitySortedTracks.erase(it_qualityAndTrack++);
939 std::set<const Trk::PrepRawData*> clusters;
941 std::vector<const Trk::PrepRawData*> freeClusters;
942 freeClusters.reserve(15);
944 std::multimap<double, Trk::Track*>::iterator it_qualityAndTrack = qualitySortedTracks.begin();
947 while (it_qualityAndTrack!=qualitySortedTracks.end()) {
948 freeClusters.clear();
950 std::set<const Trk::PrepRawData*>::iterator it_clustersEnd = clusters.end();
971 if (clusters.find(pr)==it_clustersEnd) {
973 freeClusters.push_back(pr);
979 clusters.insert(freeClusters.begin(), freeClusters.end());
981 int nFreeClusters =
static_cast<int>(freeClusters.size());
982 if(
passEtaDepCuts( (*it_qualityAndTrack).second, nClusters, nFreeClusters, nPixels) ){
984 ++it_qualityAndTrack;
987 delete (*it_qualityAndTrack).second;
988 qualitySortedTracks.erase(it_qualityAndTrack++);
1000 std::vector<int>& numberHistogram,
1001 std::vector<double>& zWeightedHistogram,
1002 std::vector<double>& ptWeightedHistogram)
const
1012 constexpr double rSquare_max_forZHisto = 60.*60.;
1013 if (position.x()*position.x()+position.y()*position.y() >= rSquare_max_forZHisto)
return;
1015 double pT = sqrt(momentum.x()*momentum.x()+momentum.y()*momentum.y());
1019 if (not TP.
production(paramsAtFirstSurface))
return;
1026 const AmgVector(5)& parsAtBeamSpot = TP.parameters();
1027 if (std::abs(parsAtBeamSpot[0]) >
m_imcut)
return;
1033 ++numberHistogram[
z];
1035 zWeightedHistogram[
z] += parsAtBeamSpot[1];
1037 ptWeightedHistogram[
z] += pT;
1047 std::pair<double, double> & zBoundaries,
1048 const std::vector<int>& numberHistogram,
1049 const std::vector<double>& zWeightedHistogram,
1050 const std::vector<double>& ptWeightedHistogram)
const
1052 zBoundaries = {1000., -1000};
1054 std::multimap<int ,double> vertexZ_sortedByNtracks;
1055 std::multimap<double,double> vertexZ_sortedBySumPt;
1058 int minBinContentSum = 3;
1061 for (
int binIndex=1; binIndex<lastBin; ++binIndex) {
1064 int vertexNtracks = numberHistogram.at(binIndex-1)+numberHistogram.at(binIndex)+numberHistogram.at(binIndex+1);
1068 if (vertexNtracks>=minBinContentSum and (numberHistogram.at(binIndex) >= numberHistogram.at(binIndex-1) and numberHistogram.at(binIndex) >= numberHistogram.at(binIndex+1))) {
1070 double vertexZestimate = (zWeightedHistogram.at(binIndex-1)+zWeightedHistogram.at(binIndex)+zWeightedHistogram.at(binIndex+1))/
static_cast<double>(vertexNtracks);
1074 if (vertexZestimate < zBoundaries.first) zBoundaries.first = vertexZestimate;
1075 if (vertexZestimate > zBoundaries.second) zBoundaries.second = vertexZestimate;
1079 double vertexSumPt = ptWeightedHistogram.at(binIndex-1)+ptWeightedHistogram.at(binIndex)+ptWeightedHistogram.at(binIndex+1);
1080 vertexZ_sortedByNtracks.insert(std::make_pair(-vertexNtracks, vertexZestimate));
1081 vertexZ_sortedBySumPt.insert(std::make_pair(-vertexSumPt, vertexZestimate));
1088 std::set<double> leadingVertices;
1090 std::multimap<double, double>::iterator vertex_pt_and_z = vertexZ_sortedBySumPt.begin();
1091 for (std::pair<int, double> nTrackAndZ: vertexZ_sortedByNtracks) {
1096 leadingVertices.insert(nTrackAndZ.second);
1097 leadingVertices.insert((*vertex_pt_and_z++).second);
1100 for (
double v: leadingVertices) {
1105 if (zBoundaries.first > zBoundaries.second) {
1106 zBoundaries.first = -1000.;
1107 zBoundaries.second = +1000.;
1110 zBoundaries.first -= 20.;
1111 zBoundaries.second += 20.;
1143 if(!par)
return false;
1145 double eta = std::abs(par->eta());
1146 if(nClusters < m_etaDependentCutsSvc->getMinSiHitsAtEta(
eta))
return false;
1147 if(nFreeClusters < m_etaDependentCutsSvc->getMinSiNotSharedAtEta(
eta))
return false;
1149 if(nPixels < m_etaDependentCutsSvc->getMinPixelHitsAtEta(
eta))
return false;
1160 int vol_id, lay_id, mod_id;
1161 float m_x, m_y, m_z;
1167 if (
detStore()->retrieve(IDp,
"PixelID").isFailure()) {
1171 if (
detStore()->retrieve(IDs,
"SCT_ID").isFailure()) {
1175 if (!IDs && !IDp)
return;
1179 std::vector<VLM_Data> vlm;
1181 for (
const auto* s : *track->trackStateOnSurfaces()) {
1196 const Amg::Vector3D& pos = s->trackParameters()->position();
1206 if (bec == -2) vol_id = 7;
1207 if (bec == 2) vol_id = 9;
1209 if (bec < -2 || bec > 2)
continue;
1219 int new_vol = 0, new_lay = 0;
1221 if (vol_id == 7 || vol_id == 9) {
1222 new_vol = 10 * vol_id + lay_id;
1224 }
else if (vol_id == 8) {
1226 new_vol = 10 * vol_id + lay_id;
1229 vlm.emplace_back(new_vol, new_lay, mod_id, pos.x(), pos.y(), pos.z());
1240 if (bec < 0) vol_id = 12;
1241 if (bec > 0) vol_id = 14;
1246 int side = IDs->
side(
id);
1252 vlm.emplace_back(vol_id, lay_id, mod_id, pos.x(), pos.y(), pos.z());
1258 std::vector<VLM_Data> vlm2;
1260 for (std::size_t it1 = 0; it1 < vlm.size() - 1; it1++) {
1261 if (vlm.at(it1).vol_id > 14) {
1262 vlm2.push_back(vlm.at(it1));
1266 std::size_t it2 = it1 + 1;
1268 int src = vlm.at(it1).vol_id * 1000 + vlm.at(it1).lay_id;
1269 int dst = vlm.at(it2).vol_id * 1000 + vlm.at(it2).lay_id;
1272 vlm2.push_back(vlm.at(it1));
1273 vlm2.push_back(vlm.at(it2));
1282 constexpr float minDist = 20.0;
1284 for (
auto it = std::next(vlm2.begin()); it != vlm2.end(); ) {
1285 auto jt = std::prev(it);
1286 float dx = it->m_x - jt->m_x;
1287 float dy = it->m_y - jt->m_y;
1288 float dz = it->m_z - jt->m_z;
1290 float dist = std::sqrt(dx*dx + dy*dy + dz*dz);
1292 if (dist < minDist) it = vlm2.erase(it);
1299 for (std::size_t it1 = 0; it1 < vlm2.size() - 1; ++it1) {
1300 std::size_t it2 = it1 + 1;
1302 int src = vlm2.at(it1).vol_id * 1000 + vlm2.at(it1).lay_id;
1303 int dst = vlm2.at(it2).vol_id * 1000 + vlm2.at(it2).lay_id;
1306 auto [im1, new1] = m_GBTSTrainingData.insert({src, {}});
1307 auto [im2, new2] = im1->second.insert({dst, 1ul});
1308 if (!new2) im2->second++;
1315 tableFile <<
"from,to,probability,flow\n";
1317 unsigned long nTotal = 0;
1318 for (
const auto& [src, conns] : m_GBTSTrainingData) {
1319 unsigned long nTotalDst = 0;
1320 for (
const auto& [dst, n] : conns) {
1323 nTotal += nTotalDst;
1325 throw std::runtime_error(
"InDet::SiSPSeededTrackFinder::dumpGBTSTrainingData: nTotalDst divisor is zero");
1327 for (
const auto& [dst, n] : conns) {
1328 double prob = double(n) / double(nTotalDst);
1329 tableFile << src <<
", " << dst <<
", " << std::fixed << std::setprecision(6) << prob <<
", " << prob <<
'\n';
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
This is an Identifier helper class for the Pixel subdetector.
This is an Identifier helper class for the SCT subdetector.
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
An algorithm that can be simultaneously executed in multiple threads.
DataModel_detail::const_iterator< DataVector > const_iterator
const T * front() const
Access the first element in the collection as an rvalue.
ExtendedSiTrackMakerEventData_xk(const SG::ReadHandleKey< Trk::PRDtoTrackMap > &key)
SG::ReadHandle< Trk::PRDtoTrackMap > m_prdToTrackMap
bool findPatternHoleSearchOutcome(Trk::Track *theTrack, InDet::PatternHoleSearchOutcome &outcome) const
Methods used to associate the hole search outcome to tracks without having to modify the EDM.
IntegerProperty m_histsize
StringProperty m_GBTSTrainingDataFileName
bool passEtaDepCuts(const Trk::Track *track, int nClusters, int nFreeClusters, int nPixels) const
BooleanProperty m_removeShortSegments
void dumpGBTSTrainingData() const
BooleanProperty m_useNewStrategy
MsgStream & dumptools(MsgStream &out) const
StatusCode itkFastTrackingStrategy(const EventContext &ctx) const
EventContext is used to specify which event.
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsSCTKey
SG::ReadHandleKey< ROIPhiRZContainer > m_caloClusterROIKey
BooleanProperty m_alwaysProtectAgainstBusyEvent
void filterSharedTracks(std::multimap< double, Trk::Track * > &scoredTracks) const
cleans up the collection of quality filtered tracks.
virtual StatusCode execute(const EventContext &ctx) const override
Execute.
IntegerProperty m_nfreeCut
MsgStream & dump(MSG::Level lvl, const SiSPSeededTrackFinder::Counter_t *) const
std::atomic_ulong m_numGBTSTrainingData
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
BooleanProperty m_writeHolesFromPattern
ToolHandle< ISiTrackMaker > m_trackmaker
DoubleProperty m_deltaEta
StringProperty m_fieldmode
std::atomic_int m_problemsTotal
Number events with number seeds > maxNumber.
std::atomic_int m_problemsTotalV
Number events with number seeds > maxNumber.
PublicToolHandle< Trk::IPatternParametersPropagator > m_proptool
IntegerProperty m_maxSCTsp
DoubleProperty m_deltaPhi
BooleanProperty m_doFastTracking
SG::WriteHandleKey< TrackCollection > m_outputTracksKey
std::atomic_int m_neventsTotalV
Number events.
BooleanProperty m_doDumpGBTSTrainingDataLRT
Trk::MagneticFieldProperties m_fieldprop
BooleanProperty m_ITKGeometry
StatusCode itkConvStrategy(const EventContext &ctx) const
EventContext is used to specify which event.
IntegerProperty m_maxPIXsp
IntegerProperty m_maxNumberSeeds
void filterSharedTracksFast(std::multimap< double, Trk::Track * > &scoredTracks) const
SiSPSeededTrackFinder(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
StatusCode newStrategy(const EventContext &ctx) const
this method performs the track finding using the new strategy
IntegerProperty m_nvertex
BooleanProperty m_useITkConvSeeded
SG::ReadDecorHandleKey< xAOD::EventInfo > m_mbtsKey
virtual StatusCode finalize() override
ToolHandle< IRegSelTool > m_regsel_strip
void collectGBTSTrainingData(const Trk::Track *) const
bool isGoodEvent(const EventContext &ctx) const
EventContext is used to specify which event.
std::mutex m_GBTSTrainingDataMutex
SG::ReadHandleKey< Trk::PRDtoTrackMap > m_prdToTrackMap
void fillZHistogram(const EventContext &ctx, const Trk::Track *Tr, const Trk::PerigeeSurface &beamlinePerigee, std::vector< int > &numberWeightedhistogram, std::vector< double > &zWeightedHistogram, std::vector< double > &ptWeightedHistogram) const
fills three z0 histograms (non-weighted, weighted by z, and weighted by pt) with the track z at the b...
void findZvertex(std::list< Trk::Vertex > &vertexList, std::pair< double, double > &zBoundaries, const std::vector< int > &numberWeightedhistogram, const std::vector< double > &zWeightedHistogram, const std::vector< double > &ptWeightedHistogram) const
estimates a set of vertex positions and a z interval for the second track finding pass using the inpu...
ToolHandle< ISiZvertexMaker > m_zvertexmaker
SG::ReadHandleKey< xAOD::EventInfo > m_evtKey
virtual StatusCode initialize() override
Initialisation.
MsgStream & dumpevent(MsgStream &out, const SiSPSeededTrackFinder::Counter_t &counter) const
std::atomic_int m_neventsTotal
Number events.
BooleanProperty m_doDumpGBTSTrainingData
StatusCode oldStrategy(const EventContext &ctx) const
this method performs the track finding using the old strategy
SG::ReadHandleKey< SpacePointContainer > m_SpacePointsPixelKey
ToolHandle< ISiSpacePointsSeedMaker > m_seedsmaker
BooleanProperty m_useZBoundaryFinding
BooleanProperty m_useZvertexTool
ToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
ServiceHandle< IInDetEtaDependentCutsSvc > m_etaDependentCutsSvc
service to get cut values depending on different variable
BooleanProperty m_useMBTS
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)
SiCombinatorialTrackFinderData_xk & combinatorialData()
This is an Identifier helper class for the Pixel subdetector.
int layer_disk(const Identifier &id) const
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0).
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
int eta_module(const Identifier &id) const
int phi_module(const Identifier &id) const
container for phi sorted ROIs defined by phi, r and z.
Describes the Region of Ineterest geometry It has basically 9 parameters.
This is an Identifier helper class for the SCT subdetector.
int layer_disk(const Identifier &id) const
int side(const Identifier &id) const
IdentifierHash wafer_hash(const Identifier &wafer_id) const
wafer hash from id - optimized
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module, int side) const
For a single side of module.
int phi_module(const Identifier &id) const
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0).
int eta_module(const Identifier &id) const
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.
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Amg::Vector3D & position() const
Access method for the position.
bool production(const TrackParameters *)
Class describing the Line to which the Perigee refers to.
Identifier identify() const
return the identifier
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.
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
@ 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 DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
const TrackInfo & info() const
Returns a const ref to info of a const tracks.
@ Background
The beam background detectors.
Eigen::Matrix< double, 3, 1 > Vector3D
@ FastField
call the fast field access method of the FieldSvc
@ NoField
Field is set to 0., 0., 0.,.
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ numberOfSCTHoles
number of Holes in both sides of a SCT module
@ numberOfSCTDeadSensors
number of TRT hits
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.
@ numberOfPixelDeadSensors
number of pixel hits with broad errors (width/sqrt(12))
Helper struct for hole search results from the pattern recognition.