24
24
#include <iostream>
26
#include "CLHEP/Units/PhysicalConstants.h"
26
28
#include "src/common_cpp/Optics/CovarianceMatrix.hh"
27
29
#include "src/common_cpp/Optics/PhaseSpaceVector.hh"
28
30
#include "src/common_cpp/Recon/Global/Particle.hh"
29
#include "src/common_cpp/Recon/Global/TrackPoint.hh"
30
31
#include "Maths/Vector.hh"
32
#include "Interface/Squeal.hh"
33
#include "Utils/Exception.hh"
36
37
const TransferMap * LinearApproximationOpticsModel::CalculateTransferMap(
37
const std::vector<recon::global::TrackPoint> & start_plane_hits,
38
const std::vector<recon::global::TrackPoint> & station_hits)
38
const std::vector<MAUS::PhaseSpaceVector> & start_plane_hits,
39
const std::vector<MAUS::PhaseSpaceVector> & station_hits)
40
41
const MAUS::DataStructure::Global::PID particle_id
41
= MAUS::DataStructure::Global::PID(start_plane_hits[0].particle_id());
42
= MAUS::DataStructure::Global::PID(reference_primary_.GetParticleId());
44
= recon::global::Particle::GetInstance().GetMass(particle_id);
43
double start_plane = start_plane_hits[0].z();
46
double start_plane = reference_primary_.GetPosition().z();
45
48
double hit_total = 0.0;
46
std::vector<recon::global::TrackPoint>::const_iterator hit;
49
std::vector<MAUS::PhaseSpaceVector>::const_iterator hit;
47
50
for (hit = station_hits.begin(); hit != station_hits.end(); ++hit) {
48
hit_total += hit->z();
51
const double energy = hit->energy();
52
const double momentum = ::sqrt(energy*energy - mass*mass);
53
const double beta = momentum / energy;
54
const double delta_t = hit->time() - time_offset_
55
- reference_primary_.GetTime();
56
const double delta_z = beta * ::CLHEP::c_light * delta_t;
57
hit_total += (reference_primary_.GetPosition().z() + delta_z);
50
59
double end_plane = hit_total / station_hits.size();
53
= recon::global::Particle::GetInstance()->GetMass(particle_id);
55
61
return new LinearApproximationTransferMap(start_plane, end_plane, mass);
79
85
double energy = vector.E();
80
86
if (mass_ > energy) {
81
throw(Squeal(Squeal::nonRecoverable,
87
throw(Exception(Exception::nonRecoverable,
82
88
"Attempting to transport a particle that is off mass shell.",
83
89
"MAUS::LinearApproximationOpticsModel::Transport()"));