Belle II Software development
LabToCms Class Reference

Class implementing general Lorentz Transformation between LAB and CMS system. More...

#include <LabToCms.h>

Static Public Member Functions

static ROOT::Math::LorentzRotation rotateLabToCms (const ROOT::Math::XYZVector &boostVector, double cmsAngleXZ, double cmsAngleYZ)
 Function takes 3D boostVector and angles of the HER momentum in the CM system obtained by pure boost.
 

Detailed Description

Class implementing general Lorentz Transformation between LAB and CMS system.

The transformation is defined by 5 parameters, the remaining 6th parameter (the rotation around phi) is fixed such that phiLAB and phiCMS are as similar as achievable. These 5 parameters are:

  • Velocity of the CM system (3D vector)
  • Direction of the pHER in the CM system obtained by pure boost (2 angles)

Definition at line 30 of file LabToCms.h.

Member Function Documentation

◆ rotateLabToCms()

static ROOT::Math::LorentzRotation rotateLabToCms ( const ROOT::Math::XYZVector &  boostVector,
double  cmsAngleXZ,
double  cmsAngleYZ 
)
inlinestatic

Function takes 3D boostVector and angles of the HER momentum in the CM system obtained by pure boost.

The angles are defined as cmsAngleXZ = atan(pxCM/pzCM) cmsAngleYZ = atan(pyCM/pzCM) Returns Lorentz transformation from Lab to CMS

Returns
the Lorentz rotation matrix

Definition at line 43 of file LabToCms.h.

45 {
46 // Boost to CM frame
47 ROOT::Math::LorentzRotation boost(ROOT::Math::Boost(-1.*boostVector));
48
49 // Target pHER orientation (unit 3D vector)
50 ROOT::Math::XYZVector zaxis(0., 0., 1.);
51
52 // The current pHER orientation (unit 3D vector)
53 double tanAngleXZ = tan(cmsAngleXZ);
54 double tanAngleYZ = tan(cmsAngleYZ);
55 double Norm = 1 / sqrt(1 + pow(tanAngleXZ, 2) + pow(tanAngleYZ, 2));
56 ROOT::Math::XYZVector electronCMS(Norm * tanAngleXZ, Norm * tanAngleYZ, Norm);
57
58 // Axis to rotate current pHER direction to the target one
59 ROOT::Math::XYZVector rotAxis = zaxis.Cross(electronCMS);
60 double rotangle = asin(rotAxis.R()); // rotation angle
61
62 // Rotation that makes pHER align with z-axis
63 ROOT::Math::LorentzRotation rotation(ROOT::Math::AxisAngle(rotAxis, -rotangle));
64
65 // First boost, then rotation
66 ROOT::Math::LorentzRotation trans = rotation * boost;
67 return trans;
68 }
double sqrt(double a)
sqrt for double
Definition: beamHelpers.h:28

The documentation for this class was generated from the following file: