ComPWA
Common Partial-Wave-Analysis Framework
HelicityKinematics.hpp
Go to the documentation of this file.
1 // Copyright (c) 2013, 2017 The ComPWA Team.
2 // This file is part of the ComPWA framework, check
3 // https://github.com/ComPWA/ComPWA/license.txt for details.
4 
5 #ifndef PHYSICS_HELICITYFORMALISM_HELICITYKINEMATICS_HPP_
6 #define PHYSICS_HELICITYFORMALISM_HELICITYKINEMATICS_HPP_
7 
8 #include <vector>
9 
10 #include "Core/Kinematics.hpp"
12 #include "Physics/SubSystem.hpp"
13 
14 namespace ComPWA {
15 namespace Physics {
16 namespace HelicityFormalism {
17 
45 public:
47  double PhspVol);
53  HelicityKinematics(ComPWA::ParticleList partL, std::vector<pid> initialState,
54  std::vector<pid> finalState,
56  0));
57 
62  HelicityKinematics(const HelicityKinematics &that) = delete;
63  // explicitly default the move constructor because copy constructor was
64  // explicitly deleted and that prevents the automatic creation
65  HelicityKinematics(HelicityKinematics &&that) = default;
66 
86  std::pair<double, double>
87  calculateHelicityAngles(const Event &Event, const SubSystem &SubSys) const;
88 
92  double calculateInvariantMassSquared(const Event &Event,
93  const IndexList &FinalStateIDs) const;
94 
100  ComPWA::Data::DataSet convert(const EventCollection &Events) const final;
101 
103  EventCollection reduceToPhaseSpace(const EventCollection &Events) const final;
104 
105  std::string registerInvariantMassSquared(IndexList System);
106  std::pair<std::string, std::string> registerHelicityAngles(SubSystem System);
107 
108  void createAllSubsystems();
109 
113  std::tuple<std::string, std::string, std::string>
114  registerSubSystem(const SubSystem &NewSys);
115 
117  std::tuple<std::string, std::string, std::string>
118  registerSubSystem(const std::vector<unsigned int> &FinalA,
119  const std::vector<unsigned int> &FinalB,
120  const std::vector<unsigned int> &Recoil,
121  const std::vector<unsigned int> &ParentRecoil);
122 
125  const std::pair<double, double> &
126  getInvariantMassBounds(const std::string &InvariantMassName) const;
127 
128  double phspVolume() const;
129 
132  return KinematicsInfo;
133  }
134 
135  const std::vector<pid> &getFinalStatePIDs() const override {
137  }
138 
139 private:
141 
142  double PhspVolume;
143 
146  std::unordered_map<SubSystem, std::pair<std::string, std::string>> Subsystems;
147 
150  std::unordered_map<IndexList, std::string> InvariantMassesSquared;
151 
153  std::unordered_map<std::string, std::pair<double, double>> InvMassBounds;
154 
155  std::pair<double, double>
156  calculateInvMassBounds(const IndexList &FinalStateIDs) const;
157 };
158 
159 } // namespace HelicityFormalism
160 } // namespace Physics
161 } // namespace ComPWA
162 
163 #endif
ComPWA::Data::DataSet convert(const EventCollection &Events) const final
Creates a DataSet from Events.
ComPWA four momentum class.
HelicityKinematics(ParticleStateTransitionKinematicsInfo KinInfo, double PhspVol)
std::unordered_map< SubSystem, std::pair< std::string, std::string > > Subsystems
Mapping of subsystems to the corresponding helicity angle variable names (theta, phi) ...
EventCollection reduceToPhaseSpace(const EventCollection &Events) const final
Returns a subset of Events that are within phase space boundaries.
std::unordered_map< IndexList, std::string > InvariantMassesSquared
Mapping of final state particle index lists to invariant mass variable name.
std::unordered_map< std::string, std::pair< double, double > > InvMassBounds
Invariant mass bounds for each SubSystem.
const std::pair< double, double > & getInvariantMassBounds(const std::string &InvariantMassName) const
Get phase space bounds for the registered invariant mass with name InvariantMassName.
std::vector< unsigned int > IndexList
Definition: SubSystem.hpp:20
std::pair< std::string, std::string > registerHelicityAngles(SubSystem System)
Implementation of the ComPWA::Kinematics interface for amplitude models using the helicity formalism...
std::set< ParticleProperties > ParticleList
Definition: Properties.hpp:84
std::tuple< std::string, std::string, std::string > registerSubSystem(const SubSystem &NewSys)
Add NewSys to list of SubSystems and return a tuple of names, that id the registered kinematic variab...
std::pair< double, double > calculateHelicityAngles(const Event &Event, const SubSystem &SubSys) const
Calculates the pair of values of the Event Event for SubSystem SubSys.
ParticleStateTransitionKinematicsInfo KinematicsInfo
The Kinematics interface defines the conversion of Events to a DataSet.
Definition: Kinematics.hpp:19
std::pair< double, double > calculateInvMassBounds(const IndexList &FinalStateIDs) const
Data structure containing all kinematic information of a physics event.
Definition: Event.hpp:20
double calculateInvariantMassSquared(const Event &Event, const IndexList &FinalStateIDs) const
Calculates the squared invariant mass of list of final state particles FinalStateIDs.
const std::vector< pid > & getFinalStatePIDs() const override
Get a vector of PIDs of the final state.
const ParticleStateTransitionKinematicsInfo & getParticleStateTransitionKinematicsInfo() const
Definition of a two-body decay node within a sequential decay tree.
Definition: SubSystem.hpp:31
Contains SubSystem class.