14 #include "GaudiKernel/PhysicalConstants.h"
25 using namespace SegmentFit;
36 return StatusCode::SUCCESS;
43 const double timeDelay)
const {
48 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint);
60 const double timeDelay)
const {
62 sp =
calibrate(ctx, *sp, segPos, segDir, timeDelay);
71 const double timeOffset)
const {
81 : spPos + Amg::intersect<3>(posInChamb, dirInChamb, spPos, chDir).value_or(0) * chDir;
84 switch (spacePoint->
type()) {
87 + Amg::intersect<3>(spPos, chDir,
88 posInChamb, dirInChamb).value_or(0) * dirInChamb;
91 const double timeOfArrival = closestApproach.mag() * c_inv + timeOffset;
101 calibInput.setTimeOfFlight(timeOfArrival);
102 calibInput.setClosestApproach(std::move(closestApproach));
112 <<std::endl<<calibInput<<std::endl<<calibOutput);
118 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos), std::move(chDir), fitState);
119 calibSP->setCovariance<2>(jac.inverse()*diagCov*jac);
120 calibSP->setDriftRadius(calibOutput.
driftRadius());
125 calibInput.setTimeOfFlight(timeOfArrival);
127 MdtCalibInput twinInput{dc->twinIdentify(), dc->twinAdc(), dc->twinTdc(), dc->readoutElement(), *gctx};
129 twinInput.setTimeOfFlight(timeOfArrival);
132 std::move(calibInput),
133 std::move(twinInput));
139 <<std::endl<<calibOutput);
147 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos), std::move(chDir), fitState);
148 calibSP->setCovariance<2>(jac.inverse()*diagCov*jac);
157 const Amg::Transform3D toGasGap{strip->readoutElement()->globalToLocalTrans(*gctx, strip->layerHash()) * locToGlob};
160 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos), std::move(chDir));
162 cov.block<2,2>(0, 0) = spacePoint->covariance();
166 const double time1 = strip->time()
167 - strip->readoutElement()->distanceToEdge(strip->layerHash(),
168 lPos.block<2,1>(0,0),
174 const double time2 = strip2->
time() -
175 strip2->readoutElement()->distanceToEdge(strip2->layerHash(),
176 Eigen::Rotation2D{M_PI_2}*lPos.block<2,1>(0,0),
179 calibSP->setTimeMeasurement(0.5*(time1 + time2));
186 calibSP->setTimeMeasurement(time1);
187 if (strip->measuresPhi()) {
193 calibSP->setCovariance<3>(std::move(
cov));
196 <<
", at "<<
Amg::toString(calibSP->positionInChamber())<<
", uncalib time: "
197 <<strip->time()<<
", calib time: "<<calibSP->time()<<
" cov " <<
toString(calibSP->covariance()));
202 calibSP = std::make_unique<CalibratedSpacePoint>(spacePoint, std::move(calibSpPos), std::move(chDir));
203 calibSP->setCovariance<2>(spacePoint->covariance());
216 const double timeOffset)
const {
221 if (hit) calibSpacePoints.push_back(std::move(hit));
223 return calibSpacePoints;