File indexing completed on 2025-02-22 10:33:30
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef INCLUDE_EICSMEAR_ERHIC_KINEMATICS_H_
0011 #define INCLUDE_EICSMEAR_ERHIC_KINEMATICS_H_
0012
0013 #include <list>
0014 #include <vector>
0015
0016 #include <Rtypes.h>
0017 #include <TLorentzVector.h>
0018
0019 #include "eicsmear/erhic/ParticleMC.h"
0020 #include "eicsmear/erhic/ParticleIdentifier.h"
0021 #include "eicsmear/erhic/VirtualParticle.h"
0022
0023 namespace erhic {
0024
0025 class EventDis;
0026 class VirtualParticle;
0027
0028
0029
0030
0031 struct DisKinematics : public TObject {
0032
0033
0034
0035 DisKinematics();
0036
0037
0038
0039 DisKinematics(double x, double y, double nu, double Q2, double W2);
0040 Double32_t mX;
0041 Double32_t mQ2;
0042 Double32_t mW2;
0043 Double32_t mNu;
0044 Double32_t mY;
0045
0046 static bool BoundaryWarning;
0047
0048 ClassDef(erhic::DisKinematics, 1)
0049 };
0050
0051
0052
0053
0054 class KinematicsComputer {
0055 public:
0056 virtual ~KinematicsComputer() { }
0057 virtual TObject* Calculate() = 0;
0058 ClassDef(erhic::KinematicsComputer, 1)
0059 };
0060
0061
0062
0063
0064
0065
0066 class LeptonKinematicsComputer : public KinematicsComputer {
0067 public:
0068 virtual ~LeptonKinematicsComputer() { }
0069
0070
0071
0072 explicit LeptonKinematicsComputer(const EventDis&);
0073 virtual DisKinematics* Calculate();
0074
0075 protected:
0076 std::vector<const VirtualParticle*> mBeams;
0077
0078 ClassDef(erhic::LeptonKinematicsComputer, 1)
0079 };
0080
0081
0082
0083
0084
0085
0086
0087
0088 class JacquetBlondelComputer : public KinematicsComputer {
0089 public:
0090 virtual ~JacquetBlondelComputer();
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100 explicit JacquetBlondelComputer(const EventDis&);
0101 virtual DisKinematics* Calculate();
0102
0103 protected:
0104 virtual Double_t ComputeY() const;
0105 virtual Double_t ComputeQSquared() const;
0106 virtual Double_t ComputeX() const;
0107
0108 const EventDis& mEvent;
0109
0110 std::vector<const VirtualParticle*> mParticles;
0111
0112 ClassDef(erhic::JacquetBlondelComputer, 1)
0113 };
0114
0115
0116
0117
0118
0119 class DoubleAngleComputer : public KinematicsComputer {
0120 public:
0121 virtual ~DoubleAngleComputer();
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 explicit DoubleAngleComputer(const EventDis&);
0132 virtual DisKinematics* Calculate();
0133
0134 protected:
0135 const EventDis& mEvent;
0136
0137
0138
0139 virtual Double_t ComputeQuarkAngle() const;
0140 virtual Double_t ComputeY() const;
0141 virtual Double_t ComputeQSquared() const;
0142 virtual Double_t ComputeX() const;
0143
0144
0145 mutable Bool_t mHasChanged;
0146
0147 mutable Double_t mAngle;
0148 std::vector<const VirtualParticle*> mParticles;
0149
0150 ClassDef(erhic::DoubleAngleComputer, 1)
0151 };
0152
0153 }
0154
0155 #endif