Make Vector/Point more efficient, drop the coordinate system pointer
Corsika operates mostly in a single coordinate system and may generate large numbers of particles with positions. In the current design, each particle with a position carries a coordinate system pointer with that position.
If we build a particle record from position and momentum of a particle, and we implement those with Point
and Vector
, then we carry two coordinate system pointers around, although position and momentum will usually be defined in the same coordinate system. If we consider four-vectors (see #62 (closed)), then we also would need to carry a inertial frame pointer around.
This design is inefficient. I propose to store all points and vectors and four vectors in the same internal coordinate system. When all objects are always stored in the same coordinate system, we can skip the pointer to the coordinate system. Conversions from the internal coordinate system to an external coordinate system only happens in the getters and setters of the components.
This approach scales much better, one can easily define a Particle as a struct of momentum and position without inefficiency or worry that momentum and position are defined in different coordinate systems.