From 91a695f1412d99d74d733d7185a4ed11ebad79f7 Mon Sep 17 00:00:00 2001 From: Daniel Jeans <daniel.jeans@kek.jp> Date: Tue, 6 Mar 2018 10:22:26 +0900 Subject: [PATCH] FieldTypes: add factorial function to definition of multipole coefficients/skews --- DDCore/include/DD4hep/FieldTypes.h | 16 ++++++++-------- DDCore/src/FieldTypes.cpp | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/DDCore/include/DD4hep/FieldTypes.h b/DDCore/include/DD4hep/FieldTypes.h index e601a9810..4e4dda0fe 100644 --- a/DDCore/include/DD4hep/FieldTypes.h +++ b/DDCore/include/DD4hep/FieldTypes.h @@ -95,8 +95,8 @@ namespace dd4hep { * The different momenta are given by: * * \f{eqnarray*}{ - * B_y + i*B_x &=& C_n * (x + iy)^{n-1} \\ - * B_sum = B_y + i B_x &=& Sum_{n=1..4} (b_n + ia_n) (x + iy)^{n-1} \\ + * B_y + i*B_x &=& ( 1/(n-1)! )* C_n * (x + iy)^{n-1} \\ + * B_sum = B_y + i B_x &=& Sum_{n=1..4} ( 1/(n-1)! )*(b_n + ia_n) (x + iy)^{n-1} \\ * \f} * With C_n being the complex multipole coefficients and * b_n the "normal multipole coefficients" and a_n the "skew multipole coefficients". @@ -122,17 +122,17 @@ namespace dd4hep { * \li Sextupole (n=3): * * \f{eqnarray*}{ - * B_y + i B_x &=& (b_3 +ia_3) (x^2 + 2ixy - y^2) \\ - * B_y &=& b_3 x^2 - b_3 y^2 - 2 a_3 xy \\ - * B_x &=& a_3 x^2 - a_3 y^2 + 2 b_3 xy \\ + * B_y + i B_x &=& (1/2) * (b_3 +ia_3) (x^2 + 2ixy - y^2) \\ + * B_y &=& (1/2) * ( b_3 x^2 - b_3 y^2 - 2 a_3 xy) \\ + * B_x &=& (1/2) * (a_3 x^2 - a_3 y^2 + 2 b_3 xy) \\ * \f} * * \li Octopole (n=4): * * \f{eqnarray*}{ - * B_y + i B_x &=& (b_4 +ia_4) (x^3 + 3ix^2y - 3xy^2 -iy^3) \\ - * B_y &=& b_4 x^3 - 3 b_4 x y^2 - 3 a_4 x^2 y + a_4 y^3 \\ - * B_x &=& 3 b_4 x^2 y - b_4 y^3 + a_4 x^3 - 3 a_4 x y^2 \\ + * B_y + i B_x &=& (1/6) * (b_4 +ia_4) (x^3 + 3ix^2y - 3xy^2 -iy^3) \\ + * B_y &=& (1/6) * (b_4 x^3 - 3 b_4 x y^2 - 3 a_4 x^2 y + a_4 y^3) \\ + * B_x &=& (1/6) * (3 b_4 x^2 y - b_4 y^3 + a_4 x^3 - 3 a_4 x y^2) \ \ * \f} * * The defined field components only apply within the shape 'volume'. diff --git a/DDCore/src/FieldTypes.cpp b/DDCore/src/FieldTypes.cpp index c864d33f0..c4715fb00 100644 --- a/DDCore/src/FieldTypes.cpp +++ b/DDCore/src/FieldTypes.cpp @@ -99,12 +99,12 @@ void MultipoleField::fieldComponents(const double* pos, double* field) { double y2 = y*y; switch(coefficents.size()) { case 4: // Ocupole momentum - by += coefficents[3] * (x2*x - 3.0*x*y2) + skews[3]*(y2*y - 3.0*x2*y); - bx += coefficents[3] * (3.0*x2*y - y2*y) + skews[3]*(x2*x - 3.0*x*y2); + by += (1./6.) * ( coefficents[3] * (x2*x - 3.0*x*y2) + skews[3]*(y2*y - 3.0*x2*y) ); + bx += (1./6.) * ( coefficents[3] * (3.0*x2*y - y2*y) + skews[3]*(x2*x - 3.0*x*y2) ); [[fallthrough]]; case 3: // Sextupole momentum: - by += coefficents[2] * (x2 - y2) - skews[2] * 2.0 * xy; - bx += coefficents[2] * 2.0 * xy + skews[2] * (x2 - y2); + by += (1./2.) * ( coefficents[2] * (x2 - y2) - skews[2] * 2.0 * xy ); + bx += (1./2.) * ( coefficents[2] * 2.0 * xy + skews[2] * (x2 - y2) ); [[fallthrough]]; case 2: // Quadrupole momentum: bx += coefficents[1] * y + skews[1]*x; -- GitLab