10 #include <tracking/eventTimeExtraction/findlets/DriftLengthBasedEventTimeExtractor.h>
12 #include <tracking/trackFindingCDC/eventdata/utils/DriftTimeUtil.h>
14 #include <genfit/KalmanFitterInfo.h>
15 #include <tracking/trackFitting/fitter/base/TrackFitter.h>
16 #include <tracking/dataobjects/RecoHitInformation.h>
17 #include <tracking/dataobjects/RecoTrack.h>
20 using namespace TrackFindingCDC;
27 std::vector<std::pair<double, double>>& eventT0WithWeights)
30 unsigned short iCLayer = wireID.getICLayer();
31 const TVector3& pos = mSoP.getPos();
32 const TVector3& mom = mSoP.getMom();
35 const bool smear =
false;
47 double flightTime = mSoP.getTime();
54 const TVector3& wirePositon = mSoP.getPlane()->getO();
55 const double alpha = -wirePositon.DeltaPhi(mom);
56 const double theta = mom.Theta();
58 const TVectorD& stateOnPlane = mSoP.getState();
59 const double driftLengthEstimate = std::abs(stateOnPlane(3));
60 const bool rl = stateOnPlane(3) > 0;
66 const double dafWeight = kalmanFitterInfo->
getWeights().at(0);
68 const double eventT0 = measuredTime - propTime - flightTime - timeWalk - driftTime;
70 eventT0WithWeights.emplace_back(eventT0, dafWeight);
77 m_wasSuccessful =
false;
82 std::vector<std::pair<double, double>> eventT0WithWeights;
85 if (not trackFitter.
fit(*recoTrack)) {
90 for (
CDCHit* cdcHit : cdcHits) {
94 addEventT0AndWeight(mSoP, *cdcHit, *recoTrack, recoHitInformation, eventT0WithWeights);
102 std::sort(eventT0WithWeights.begin(), eventT0WithWeights.end(), [](
const auto & lhs,
const auto & rhs) {
103 return lhs.first < rhs.first;
106 double extractedEventT0 = NAN;
108 double weightSum = 0;
109 for (
const auto& pair : eventT0WithWeights) {
111 weightSum += pair.second;
115 for (
const auto& pair : eventT0WithWeights) {
116 cumSum += pair.second;
117 if (cumSum > 0.5 * weightSum) {
118 extractedEventT0 = pair.first;
123 if (not std::isnan(extractedEventT0)) {
125 m_eventT0->setEventT0(eventT0Component);
126 m_wasSuccessful =
true;
127 B2DEBUG(50,
"Drift length gave a result of " << extractedEventT0);
129 B2DEBUG(50,
"Extracted event t0 is nan.");