17#include "GaudiKernel/MsgStream.h"
29#include "GaudiKernel/ThreadLocalContext.h"
83 m_trkfitter(
"Trk::GlobalChi2Fitter/InDetTrackFitter")
86 declareInterface<IInDetTrackSplitterTool>(
this);
101 msg(MSG::DEBUG) <<
"In initialize()" <<
endmsg;
106 msg(MSG::WARNING) <<
"Problem retrieving TRTID helper" <<
endmsg;
107 return StatusCode::SUCCESS;
113 msg(MSG::WARNING) <<
"Problem retrieving SCT ID helper" <<
endmsg;
114 return StatusCode::SUCCESS;
121 return StatusCode::SUCCESS;
127 msg(MSG::DEBUG) <<
"InDetTrackSplitterTool initialized" <<
endmsg;
128 return StatusCode::SUCCESS;
135 msg(MSG::DEBUG) <<
"In finalize() "<<
endmsg;
136 return StatusCode::SUCCESS;
143 bool siliconHitsOnly)
const {
145 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" In splitInUpperLowerTrack" <<
endmsg;
152 Trk::Perigee const* originalPerigee = input.perigeeParameters();
158 auto uppertraj = std::make_unique<Trk::TrackStates>();
159 auto lowertraj = std::make_unique<Trk::TrackStates>();
161 unsigned int totalNumberHits = 0;
163 unsigned int totalNumberPixelHits = 0;
164 unsigned int totalNumberSCTHits = 0;
165 unsigned int totalNumberTRTHits = 0;
167 unsigned int numberUpperPixelHits = 0;
168 unsigned int numberUpperSCTHits = 0;
169 unsigned int numberUpperTRTHits = 0;
170 unsigned int numberUpperPseudoMeas = 0;
172 unsigned int numberLowerPixelHits = 0;
173 unsigned int numberLowerSCTHits = 0;
174 unsigned int numberLowerTRTHits = 0;
175 unsigned int numberLowerPseudoMeas = 0;
183 bool perigeeseen=
false;
184 for(;tsosit != tsosEnd; ++tsosit){
186 if (originalPerigee==(**tsosit).trackParameters()){
188 uppertraj->push_back((**tsosit).clone());
189 lowertraj->push_back((**tsosit).clone());
198 uppertraj->push_back((**tsosit).clone());
200 lowertraj->push_back((**tsosit).clone());
214 if (
m_trtid->is_pixel(surfaceid))
215 ++totalNumberPixelHits;
216 if (
m_trtid->is_sct(surfaceid))
217 ++totalNumberSCTHits;
218 if (
m_trtid->is_trt(surfaceid))
219 ++totalNumberTRTHits;
224 if (
m_trtid->is_pixel(surfaceid))
225 ++numberUpperPixelHits;
226 if (
m_trtid->is_sct(surfaceid))
227 ++numberUpperSCTHits;
228 if (
m_trtid->is_trt(surfaceid))
229 ++numberUpperTRTHits;
231 if (!siliconHitsOnly ||
m_trtid->is_sct(surfaceid) ||
233 uppertraj->push_back((**tsosit).clone());
239 if (
m_trtid->is_pixel(surfaceid))
240 ++numberLowerPixelHits;
241 if (
m_trtid->is_sct(surfaceid))
242 ++numberLowerSCTHits;
243 if (
m_trtid->is_trt(surfaceid))
244 ++numberLowerTRTHits;
246 if (!siliconHitsOnly ||
m_trtid->is_sct(surfaceid) ||
249 lowertraj->push_back((**tsosit).clone());
253 msg(MSG::VERBOSE) <<
"Not an rio" <<
endmsg;
260 if (!perigeeseen || totalNumberHits == totalNumberTRTHits) {
262 msg(MSG::DEBUG) <<
"Adding an upper pseudoMeasurement" <<
endmsg;
263 ++numberUpperPseudoMeas;
264 uppertraj->push_back((**tsosit).clone());
266 if (perigeeseen || totalNumberHits == totalNumberTRTHits) {
268 msg(MSG::DEBUG) <<
"Adding a lower pseudoMeasurement" <<
endmsg;
269 ++numberLowerPseudoMeas;
270 lowertraj->push_back((**tsosit).clone());
278 uppertraj->push_back((**tsosit).clone());
280 lowertraj->push_back((**tsosit).clone());
285 Trk::Track upperorigtrack(input.info(),std::move(uppertraj),
nullptr);
286 Trk::Track lowerorigtrack(input.info(),std::move(lowertraj),
nullptr);
289 if(
isConstrained(numberUpperPixelHits,numberUpperSCTHits,numberUpperTRTHits,numberUpperPseudoMeas)){
291 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"before calling upper fit" <<
endmsg;
293 upperTrack = (
m_trkfitter->fit(Gaudi::Hive::currentContext(),upperorigtrack,
false, hypo)).release();
294 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"after calling upper fit" <<
endmsg;
297 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Upper Fit Failed!" <<
endmsg ;
298 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
299 << numberUpperPixelHits <<
" upper Pixel hits, "
300 << numberUpperSCTHits <<
" upper SCT hits, "
301 << numberUpperTRTHits <<
"upper TRT hits"
302 << numberUpperPseudoMeas <<
"upper Pseudomeasurements"
305 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
306 << totalNumberPixelHits <<
" total Pixel hits, "
307 << totalNumberSCTHits <<
" total SCT hits, "
308 << totalNumberTRTHits <<
"total TRT hits"
314 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Not enough measurements on upper track. Fit fails." <<
endmsg ;
315 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
316 << numberUpperPixelHits <<
" upper Pixel hits, "
317 << numberUpperSCTHits <<
" upper SCT hits, "
318 << numberUpperTRTHits <<
"upper TRT hits"
319 << numberUpperPseudoMeas <<
"upper Pseudomeasurements"
324 if(
isConstrained(numberLowerPixelHits,numberLowerSCTHits,numberLowerTRTHits,numberLowerPseudoMeas)){
326 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"before calling lower fit" <<
endmsg;
327 lowerTrack = (
m_trkfitter->fit(Gaudi::Hive::currentContext(),lowerorigtrack,
false, hypo)).release();
328 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"after calling lower fit" <<
endmsg;
331 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Lower Fit Failed!" <<
endmsg ;
332 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
333 << numberLowerPixelHits <<
" upper Pixel hits, "
334 << numberLowerSCTHits <<
" upper SCT hits, "
335 << numberLowerTRTHits <<
"upper TRT hits"
336 << numberLowerPseudoMeas <<
"upper Pseudomeasurements"
339 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
340 << totalNumberPixelHits <<
" total Pixel hits, "
341 << totalNumberSCTHits <<
" total SCT hits, "
342 << totalNumberTRTHits <<
"total TRT hits"
347 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Not enough measurements on lower track. Fit fails." <<
endmsg ;
348 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
349 << numberLowerPixelHits <<
" upper Pixel hits, "
350 << numberLowerSCTHits <<
" upper SCT hits, "
351 << numberLowerTRTHits <<
"upper TRT hits"
352 << numberLowerPseudoMeas <<
"upper Pseudomeasurements"
356 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" Leaving splitInUpperLowerTrack" <<
endmsg;
357 return std::make_pair(upperTrack, lowerTrack);
363 bool removeSilicon,
bool applyConstraint )
const {
378 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" Leaving stripTrack" <<
endmsg;
385 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"In stripSiFromTrack" <<
endmsg;
394 Trk::Perigee const* originalPerigee = input.perigeeParameters();
403 TRTHits.push_back(constraint);
405 unsigned int totalNumberTRTHits = 0;
409 for(;meas != measEnd; ++meas){
413 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"No ROT skipping measurement." <<
endmsg;
419 if(!
m_trtid->is_trt(surfaceid)){
420 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"Removing Non-TRT hit." <<
endmsg;
424 ++totalNumberTRTHits;
425 TRTHits.push_back(*meas);
433 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"before calling fit" <<
endmsg;
434 outputTrack = (
m_trkfitter->fit(Gaudi::Hive::currentContext(),TRTHits, *originalPerigee,
true, hypo)).release();
435 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"after calling fit" <<
endmsg;
439 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There were: "
440 << totalNumberTRTHits <<
"TRT hits"
444 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Leaving stripSiFromTrack" <<
endmsg;
452 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"In stripTRTFromTrack" <<
endmsg;
461 Trk::Perigee const* originalPerigee = input.perigeeParameters();
467 bool addedConstraint =
false;
469 unsigned int totalNumberSiHits = 0;
473 for(;meas != measEnd; ++meas){
477 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"No ROT skipping measurement." <<
endmsg;
483 if(applyConstraint && !addedConstraint &&
m_trtid->is_trt(surfaceid)){
491 ATH_MSG_DEBUG(
"Cast of rio associated surface to StraightLineSurface failed.");
498 SiHits.push_back(constraint);
501 addedConstraint =
true;
505 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"Removing Non-Si hit." <<
endmsg;
510 SiHits.push_back(*meas);
518 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"before calling fit" <<
endmsg;
519 outputTrack = (
m_trkfitter->fit(Gaudi::Hive::currentContext(),SiHits, *originalPerigee,
false, hypo)).release();
520 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"after calling fit" <<
endmsg;
524 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There were: " << totalNumberSiHits <<
"TRT hits" <<
endmsg;
527 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Leaving stripTRTFromTrack" <<
endmsg;
535 if( !perigee->covariance() )
return nullptr;
540 std::array<Trk::DefinedParameter,1> constraints = {inputPMeasurement};
548 std::move(constraintErrMatrix) ,*trtSurf);
556 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"In makeThetaZ0Constraint" <<
endmsg;
558 if( !perigee->covariance() )
return nullptr;
564 std::array<Trk::DefinedParameter,2> constraints = {inputZ0Measurement, inputTheta0Measurement};
569 constraintErrMatrix(0,0) = (*perigee->covariance())(
Trk::z0,
Trk::z0);
582 std::move(constraintErrMatrix) ,
587 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Leaving makeThetaZ0Constraint" <<
endmsg;
596 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" In splitInOddEvenHitsTrack" <<
endmsg;
603 Trk::Perigee const* originalPerigee = input.perigeeParameters();
612 unsigned int totalNumberPixelHits = 0;
613 unsigned int totalNumberSCTHits = 0;
614 unsigned int totalNumberTRTHits = 0;
615 unsigned int totalNumberHits = 0;
617 unsigned int numberOddSCTHits = 0;
618 unsigned int numberOddPixelHits = 0;
619 unsigned int numberOddTRTHits = 0;
620 unsigned int numberOddPseudoMeas = 0;
622 unsigned int numberEvenPixelHits = 0;
623 unsigned int numberEvenSCTHits = 0;
624 unsigned int numberEvenTRTHits = 0;
625 unsigned int numberEvenPseudoMeas = 0;
628 std::vector<Trk::MeasurementBase const*> unusedSCTHits =
getSCTHits(input);
632 for(;meas != measEnd; ++meas){
636 if(
m_trtid->is_pixel(surfaceid)) ++totalNumberPixelHits;
637 if(
m_trtid->is_sct(surfaceid)) ++totalNumberSCTHits;
638 if(
m_trtid->is_trt(surfaceid)) ++totalNumberTRTHits;
641 if( totalNumberHits % 2 == 1){
643 if(
m_trtid->is_pixel(surfaceid)) ++numberOddPixelHits;
644 if(
m_trtid->is_sct(surfaceid)) ++numberOddSCTHits;
645 if(
m_trtid->is_trt(surfaceid)) ++numberOddTRTHits;
647 if(!
m_trtid->is_sct(surfaceid)){
649 oddHits.push_back( *meas);
655 std::vector<Trk::MeasurementBase const* >::iterator
result =
find(unusedSCTHits.begin(), unusedSCTHits.end(), *meas);
658 if(
result != unusedSCTHits.end()){
660 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"add the (odd) SCT hit" <<
endmsg;
661 oddHits.push_back( *meas);
665 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"removing the SCT hit from unused list" <<
endmsg;
666 unusedSCTHits.erase(
result);
670 if(
result != unusedSCTHits.end()){
671 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"adding the other (odd) SCT hit in the spacepoint" <<
endmsg;
672 oddHits.push_back( *
result);
673 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"removing the SCT hit from unused list" <<
endmsg;
674 unusedSCTHits.erase(
result);
679 if(
m_trtid->is_pixel(surfaceid))
680 ++numberEvenPixelHits;
686 if(!
m_trtid->is_sct(surfaceid)){
687 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"add the (even) hit" <<
endmsg;
688 evenHits.push_back( *meas);
693 std::vector<Trk::MeasurementBase const* >::iterator
result =
find(unusedSCTHits.begin(), unusedSCTHits.end(), *meas);
696 if(
result != unusedSCTHits.end()){
698 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"add the (even) SCT hit" <<
endmsg;
699 evenHits.push_back( *meas);
703 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"removing the SCT hit from unused list" <<
endmsg;
704 unusedSCTHits.erase(
result);
708 if(
result != unusedSCTHits.end()){
709 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"adding the other (even) SCT hit in the spacepoint" <<
endmsg;
710 evenHits.push_back( *
result);
711 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"removing the SCT hit from unused list" <<
endmsg;
712 unusedSCTHits.erase(
result);
721 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Adding an odd pseudoMeasurement" <<
endmsg;
722 ++numberOddPseudoMeas;
723 oddHits.push_back( ps);
725 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Adding an even pseudoMeasurement" <<
endmsg;
726 ++numberEvenPseudoMeas;
727 evenHits.push_back( ps);
738 if(
isConstrained(numberOddPixelHits,numberOddSCTHits,numberOddTRTHits,numberOddPseudoMeas)){
740 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"before calling odd fit" <<
endmsg;
741 oddTrack = (
m_trkfitter->fit(Gaudi::Hive::currentContext(),oddHits, *originalPerigee,
false, hypo)).release();
742 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"after calling odd fit" <<
endmsg;
745 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Odd Fit Failed!" <<
endmsg ;
746 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
747 << numberOddPixelHits <<
" odd Pixel hits, "
748 << numberOddSCTHits <<
" odd SCT hits, "
749 << numberOddTRTHits <<
" odd TRT hits"
750 << numberOddPseudoMeas <<
"odd Pseudomeasurements"
753 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: "
754 << totalNumberPixelHits <<
" total Pixel hits, "
755 << totalNumberSCTHits <<
" total SCT hits, "
756 << totalNumberTRTHits <<
"total TRT hits"
761 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Not enough measurements on odd track. Fit fails." <<
endmsg ;
764 if(
isConstrained(numberEvenPixelHits,numberEvenSCTHits,numberEvenTRTHits,numberEvenPseudoMeas)){
766 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"before calling even fit" <<
endmsg;
767 evenTrack = (
m_trkfitter->fit(Gaudi::Hive::currentContext(),evenHits, *originalPerigee,
false, hypo)).release();
768 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"after calling even fit" <<
endmsg;
771 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Even Fit Failed!" <<
endmsg ;
772 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There was: " << numberEvenSCTHits <<
" even si hits and "
773 << numberEvenTRTHits <<
"even TRT hits"<<
endmsg;
775 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"There were: " << totalNumberSCTHits <<
" total Si hits and "
776 << totalNumberTRTHits <<
"total TRT hits"<<
endmsg;
780 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Not enough measurements on even track. Fit fails." <<
endmsg ;
782 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" Leaving splitInOddEvenHitsTrack" <<
endmsg;
783 return std::make_pair(oddTrack, evenTrack);
799 if ( upperTracks.
record( std::make_unique<TrackCollection>() ).isFailure() ) {
804 if ( lowerTracks.
record( std::make_unique<TrackCollection>() ).isFailure() ) {
808 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"There are: " << inputTracks->
size() <<
" input tracks."<<
endmsg;
812 for (; it != itE; ++it){
816 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"Track is a candidate."<<
endmsg;
824 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"Upper track fit suceeded"<<
endmsg;
825 upperTracks->push_back( upperTrack);
827 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Upper track fit failed!"<<
endmsg;
831 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"Lower track fit suceeded"<<
endmsg;
832 lowerTracks->push_back( lowerTrack);
834 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Lower track fit failed!"<<
endmsg;
837 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"Track is NOT a candidate."<<
endmsg;
840 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
" Leaving splitTracks" <<
endmsg;
848 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"In trackIsCandidate."<<
endmsg;
853 msg(MSG::WARNING) <<
"Found track with invalid perigee parameters. Not splitting." <<
endmsg;
858 double const d0 = trackPerigee->parameters()[
Trk::d0];
860 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"do is: "<< d0 <<
endmsg;
866 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"is a candidate" <<
endmsg;
870 if(
msgLvl(MSG::VERBOSE))
msg(MSG::VERBOSE) <<
"is NOT a candidate" <<
endmsg;
879 std::vector<Trk::MeasurementBase const*> SCTHits;
883 for(;meas != measEnd; ++meas){
889 if(
m_trtid->is_sct(surfaceid)){
890 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"we've found an SCT hit " <<
endmsg;
891 SCTHits.push_back(*meas);
900 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Leaving getSCTHits " <<
endmsg;
909 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"in findSCTHitsFromSameSpacePoint " <<
endmsg;
910 std::vector<Trk::MeasurementBase const*>::iterator
result = listOfSCTHits.end();
916 int targetEta =
m_sctid->eta_module(surfaceid);
917 int targetPhi =
m_sctid->phi_module(surfaceid);
919 std::vector<Trk::MeasurementBase const*>::const_iterator meas = listOfSCTHits.begin();
920 std::vector<Trk::MeasurementBase const*>::const_iterator measEnd = listOfSCTHits.end();
921 for(;meas != measEnd; ++meas){
925 if(
m_sctid->eta_module(candidateSurfaceid) == targetEta &&
m_sctid->phi_module(candidateSurfaceid) == targetPhi){
926 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Found another hit in the SpacePoint " <<
endmsg;
927 result =
find(listOfSCTHits.begin(), listOfSCTHits.end(), *meas);
933 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Leaving findSCTHitsFromSameSpacePoint " <<
endmsg;
941 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"In isConstrained " <<
endmsg;
945 if( (( nPixelHits + nSCTHits) > 1 && (2*nPixelHits + nSCTHits + nTRTHits) > 5) ||
946 (nPseudomeasurements >= 1 && nTRTHits > 10)){
947 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Leaving isConstrained (true)" <<
endmsg;
951 if(
msgLvl(MSG::DEBUG))
msg(MSG::DEBUG) <<
"Leaving isConstrained (false)" <<
endmsg;
#define ATH_CHECK
Evaluate an expression and check for errors.
This is an Identifier helper class for the SCT subdetector.
This is an Identifier helper class for the TRT subdetector.
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
DataModel_detail::const_iterator< DataVector > const_iterator
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
This class is the pure abstract base class for all fittable tracking measurements.
virtual const S & associatedSurface() const override final
Access to the Surface method.
Class describing the Line to which the Perigee refers to.
Class to handle pseudo-measurements in fitters and on track objects.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
virtual const Surface & associatedSurface() const override=0
returns the surface for the local to global transformation
Identifier identify() const
return the identifier -extends MeasurementBase
Class for a StraightLineSurface in the ATLAS detector to describe dirft tube and straw like detectors...
@ BremPoint
This represents a brem point on the track, and so will contain TrackParameters and MaterialEffectsBas...
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ Scatterer
This represents a scattering point on the track, and so will contain TrackParameters and MaterialEffe...
@ CaloDeposit
This TSOS contains a CaloEnergy object.
const Perigee * perigeeParameters() const
return Perigee.
std::string find(const std::string &s)
return a remapped string
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
std::vector< const MeasurementBase * > MeasurementSet
vector of fittable measurements
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
std::pair< double, ParamDefs > DefinedParameter
Typedef to of a std::pair<double, ParamDefs> to identify a passed-through double as a specific type o...
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.