8 #include <art/Utilities/Exception.h> 53 if (xt_fit_valid && yt_fit_valid)
70 bool has_match =
false;
72 if (
abs(
int(x_hit->Plane()) -
int(y_hit->Plane())) <= 1)
81 bool has_match =
false;
83 if (
abs(
int(x_hit->Plane()) -
int(y_hit->Plane())) <= 1)
194 double & dvdt,
double &
dzdt,
195 double & r2_vt,
double &
r2_zt)
const 206 std::map<std::string, double>
mean = { {
"v", 0.0}, {
"z", 0.0}, {
"t", 0.0} };
211 TVector3 hit_vector(xyz);
213 mean.at(
"v") += geometry->
CellTpos(
hit->Plane(),
hit->Cell()) / N;
214 mean.at(
"z") += hit_vector.z() / N;
215 mean.at(
"t") +=
hit->TNS() / N;
218 std::map<std::string, double>
variance =
219 { {
"t", 0.0}, {
"v", 0.0}, {
"z", 0.0}, {
"vt", 0.0}, {
"zt", 0.0} };
224 TVector3 hit_vector(xyz);
226 double z = hit_vector.z();
227 double t =
hit->TNS();
229 variance.at(
"t") +=
get_variance(t, mean.at(
"t")) / (N - 1);
230 variance.at(
"v") +=
get_variance(v, mean.at(
"v")) / (N - 1);
231 variance.at(
"z") +=
get_variance(z, mean.at(
"z")) / (N - 1);
238 if (variance.at(
"t") == 0 || variance.at(
"v") == 0 || variance.at(
"z") == 0)
248 dvdt = variance.at(
"vt") / variance.at(
"t");
249 dzdt = variance.at(
"zt") / variance.at(
"t");
257 std::pow(variance.at(
"vt"), 2) / (variance.at(
"v") * variance.at(
"t"));
259 std::pow(variance.at(
"zt"), 2) / (variance.at(
"z") * variance.at(
"t"));
270 std::set<double>
times;
271 for (
auto const&
hit : hits)
272 times.insert(
hit->TNS());
275 (times.begin(), times.end(), [&](
double object,
double next_object)
277 double gap = next_object - object;
291 (
double const&
a,
double const& mean_a)
const 293 return (a - mean_a) * (a - mean_a);
299 (
double const& a,
double const& mean_a,
300 double const&
b,
double const& mean_b)
const 302 return (a - mean_a) * (b - mean_b);
311 os <<
"Track3D: dxdz, dydz = " << t.
dxdz() <<
", " << t.
dydz() <<
"\n";
325 TVector3 hit_vector(xyz);
327 double z = hit_vector.z();
328 double t =
hit->TNS();
330 os <<
"Track3D: View " << view
331 <<
" Hit: t, v, z = " << t <<
", " << v <<
", " << z <<
"\n";
double time_gap(art::PtrVector< rb::CellHit > const &hits) const
T max(const caf::Proxy< T > &a, T b)
double max_time_gap_yz() const
double CellTpos(unsigned int ip, unsigned int ic, double w=0.0) const
unsigned int NCell(geo::View_t view) const
Number of cells in view view.
const art::PtrVector< rb::CellHit > & XCells() const
Get all cells from the x-view.
double get_variance(double const &a, double const &mean_a) const
enum geo::_plane_proj View_t
Enumerate the possible plane projections.
A collection of associated CellHits.
const double SPEED_OF_LIGHT
bool time_fit(Track2D const &track, double &dvdt, double &dzdt, double &r2_vt, double &r2_zt) const
const Var kY([](const caf::SRProxy *sr){float tmp=0.f;if(sr->mc.nu.empty()) return tmp;tmp=sr->mc.nu[0].y;return tmp;})
void CellInfo(unsigned int ip, unsigned int ic, View_t *view=0, double *pos=0, double *dpos=0) const
art::PtrVector< rb::CellHit > AllCells() const
Get all cells from both views.
virtual void Add(const art::Ptr< rb::CellHit > &cell, double weight=1)
std::ostream & operator<<(std::ostream &os, Track3D const &t)
const art::PtrVector< rb::CellHit > & YCells() const
Get all cells from the x-view.
rb::Cluster cluster() const
double max_time_gap_xz() const
TVector3 velocity() const
double dzdt(geo::View_t view) const
double pythag(double x, double y)
2D Euclidean distance
double r2_zt(geo::View_t view) const
double get_covariance(double const &a, double const &mean_a, double const &b, double const &mean_b) const
double variance(Eigen::VectorXd x)
Encapsulate the geometry of one entire detector (near, far, ndos)