1
/* This file is part of MAUS: http:// micewww.pp.rl.ac.uk:8080/projects/maus
3
* MAUS is free software: you can redistribute it and/or modify
4
* it under the terms of the GNU General Public License as published by
5
* the Free Software Foundation, either version 3 of the License, or
6
* (at your option) any later version.
8
* MAUS is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with MAUS. If not, see <http:// www.gnu.org/licenses/>.
20
#include "Recon/Global/ParticleOpticalVector.hh"
23
#include "CLHEP/Units/PhysicalConstants.h"
25
#include "DataStructure/ThreeVector.hh"
26
#include "src/common_cpp/Maths/Vector.hh"
27
#include "Interface/Squeak.hh"
28
#include "Recon/Global/Detector.hh"
29
#include "Recon/Global/Particle.hh"
35
ParticleOpticalVector::ParticleOpticalVector()
39
ParticleOpticalVector::ParticleOpticalVector(
40
const PhaseSpaceVector& vector,
41
const double t0, const double E0, const double P0)
42
: PhaseSpaceVector() {
43
const double beta0 = P0 / E0;
44
const double gamma0 = 1. / ::sqrt(1 - beta0*beta0);
45
// const double k = beta0 * ::CLHEP::c_light * gamma0 / (1 + gamma0);
46
const double k = beta0 * gamma0 / (1 + gamma0);
48
set_l(k * (vector.t() - t0));
49
set_delta((vector.E() - E0) / E0);
51
set_a(vector.Px() / P0);
53
set_b(vector.Py() / P0);
56
ParticleOpticalVector::ParticleOpticalVector(
57
const ParticleOpticalVector& original_instance)
58
: PhaseSpaceVector(original_instance) { }
60
ParticleOpticalVector::ParticleOpticalVector(double const * const array)
61
: PhaseSpaceVector(array) { }
63
ParticleOpticalVector::ParticleOpticalVector(
64
const double l, const double delta,
65
const double x, const double a,
66
const double y, const double b)
67
: PhaseSpaceVector(l, delta, x, a, y, b) { }
69
ParticleOpticalVector::~ParticleOpticalVector() {
72
// *************************
73
// Assignment Operators
74
// *************************
76
ParticleOpticalVector & ParticleOpticalVector::operator=(
77
const ParticleOpticalVector& rhs) {
78
PhaseSpaceVector::operator=(rhs);
83
ParticleOpticalVector & ParticleOpticalVector::operator+=(
84
const ParticleOpticalVector& rhs) {
85
PhaseSpaceVector::operator+=(rhs);
90
ParticleOpticalVector & ParticleOpticalVector::operator-=(
91
const ParticleOpticalVector& rhs) {
92
PhaseSpaceVector::operator-=(rhs);
97
ParticleOpticalVector & ParticleOpticalVector::operator*=(
98
const ParticleOpticalVector& rhs) {
99
PhaseSpaceVector::operator*=(rhs);
104
ParticleOpticalVector & ParticleOpticalVector::operator/=(
105
const ParticleOpticalVector& rhs) {
106
PhaseSpaceVector::operator/=(rhs);
111
ParticleOpticalVector & ParticleOpticalVector::operator+=(const double& rhs) {
112
PhaseSpaceVector::operator+=(rhs);
117
ParticleOpticalVector & ParticleOpticalVector::operator-=(const double& rhs) {
118
PhaseSpaceVector::operator-=(rhs);
123
ParticleOpticalVector & ParticleOpticalVector::operator*=(const double& rhs) {
124
PhaseSpaceVector::operator*=(rhs);
129
ParticleOpticalVector & ParticleOpticalVector::operator/=(const double& rhs) {
130
PhaseSpaceVector::operator/=(rhs);
135
// *************************
136
// Algebraic Operators
137
// *************************
139
const ParticleOpticalVector ParticleOpticalVector::operator+(
140
const ParticleOpticalVector& rhs) const {
141
return ParticleOpticalVector(*this) += rhs;
144
const ParticleOpticalVector ParticleOpticalVector::operator-(
145
const ParticleOpticalVector& rhs) const {
146
return ParticleOpticalVector(*this) -= rhs;
149
const ParticleOpticalVector ParticleOpticalVector::operator*(
150
const ParticleOpticalVector& rhs) const {
151
return ParticleOpticalVector(*this) *= rhs;
154
const ParticleOpticalVector ParticleOpticalVector::operator/(
155
const ParticleOpticalVector& rhs) const {
156
return ParticleOpticalVector(*this) /= rhs;
159
const ParticleOpticalVector ParticleOpticalVector::operator+(
160
const double& rhs) const {
161
return ParticleOpticalVector(*this) += rhs;
164
const ParticleOpticalVector ParticleOpticalVector::operator-(
165
const double& rhs) const {
166
return ParticleOpticalVector(*this) -= rhs;
169
const ParticleOpticalVector ParticleOpticalVector::operator*(
170
const double& rhs) const {
171
return ParticleOpticalVector(*this) *= rhs;
174
const ParticleOpticalVector ParticleOpticalVector::operator/(
175
const double& rhs) const {
176
return ParticleOpticalVector(*this) /= rhs;
179
// *************************
180
// Comparison Operators
181
// *************************
183
const bool ParticleOpticalVector::operator==(
184
const ParticleOpticalVector& rhs) const {
185
if (static_cast<PhaseSpaceVector const * const>(this)->operator!=(rhs)) {
192
const bool ParticleOpticalVector::operator!=(
193
const ParticleOpticalVector& rhs) const {
194
return !operator==(rhs);
197
std::ostream& operator<<(std::ostream& out,
198
const ParticleOpticalVector& point) {
199
out << "l: " << point.l() << " delta: " << point.delta()
200
<< " x: " << point.x() << " a: " << point.a()
201
<< " y: " << point.y() << " b: " << point.b();
206
} // namespace global