|
|
|||
File indexing completed on 2026-09-27 09:14:59
0001 // lAger: General Purpose l/A-event Generator 0002 // Copyright (C) 2016-2021 Sylvester Joosten <sjoosten@anl.gov> 0003 // 0004 // This file is part of lAger. 0005 // 0006 // lAger is free software: you can redistribute it and/or modify 0007 // it under the terms of the GNU General Public License as published by 0008 // the Free Shoftware Foundation, either version 3 of the License, or 0009 // (at your option) any later version. 0010 // 0011 // lAger is distributed in the hope that it will be useful, 0012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0014 // GNU General Public License for more details. 0015 // 0016 // You should have received a copy of the GNU General Public License 0017 // along with lAger. If not, see <https://www.gnu.org/licenses/>. 0018 // 0019 0020 #ifndef LAGER_PHYSICS_KINEMATICS_LOADED 0021 #define LAGER_PHYSICS_KINEMATICS_LOADED 0022 0023 #include <cmath> 0024 #include <lager/core/interval.hh> 0025 #include <lager/core/particle.hh> 0026 0027 namespace lager { 0028 namespace physics { 0029 0030 // ======================================================================================= 0031 // calculate the allowed Q2 range for a given lepton beam, target and y 0032 // 0033 // The lower bound is given by the kinematics of t-channel scattering, 0034 // while the upper bound is given by either t-channel kinematics, or the 0035 // requirement that the final W be larger than the target mass 0036 // ======================================================================================= 0037 inline interval<double> Q2_range(const particle& beam, const particle& target, 0038 const double y) { 0039 const double E = (beam.p()).Dot(target.p()) / target.mass(); 0040 const double E2 = E * E; 0041 const double m2 = beam.mass2(); 0042 // lower and upper bound from t-channel process on electron leg 0043 const double comp1 = -2. * m2 + 2. * E2 * (1. - y); 0044 const double comp2 = 2. * sqrt((E2 - m2) * (E2 * (1. - y) * (1. - y) - m2)); 0045 const double Q2_low = comp1 - comp2; 0046 const double Q2_high1 = comp1 + comp2; 0047 // alternative upper bound from requirement that final state has at least the 0048 // invariant mass of the target mass (W2min = target.mass^2, meaning that 2 M 0049 // nu = Q2) 0050 const double Q2_high2 = 2 * target.mass() * E * y; 0051 return {Q2_low, fmin(Q2_high1, Q2_high2)}; 0052 } 0053 0054 // ======================================================================================= 0055 // calculate the allowed t range 0056 // 0057 // input: 0058 // * W2 (=s) 0059 // * Q2 (-photon mass squared) 0060 // * Mt (target mass) 0061 // * Mv (VM mass) 0062 // * Mr (recoil mass) 0063 // ======================================================================================= 0064 inline interval<double> t_range(const double W2, const double Q2, 0065 const double Mt, const double Mv, 0066 const double Mr) { 0067 const double Mt2 = Mt * Mt; 0068 const double Mr2 = Mr * Mr; 0069 const double Mv2 = Mv * Mv; 0070 const double W = sqrt(W2); 0071 // CM relations for energy and momenta 0072 const double Et_cm = (W2 + Q2 + Mt2) / (2. * W); 0073 const double Pt_cm = sqrt(Et_cm * Et_cm - Mt2); 0074 const double Er_cm = (W2 - Mv2 + Mr2) / (2. * W); 0075 const double Pr_cm = sqrt(Er_cm * Er_cm - Mr2); 0076 // t_low when recoil direction changes by 90 degrees compared to target, 0077 // t_high when the recoil in the target direction 0078 // note: what we call t_high is also refered to as t_min 0079 const double t_low = Mt2 + Mr2 - 2. * Et_cm * Er_cm - 2. * Pt_cm * Pr_cm; 0080 const double t_high = Mt2 + Mr2 - 2. * Et_cm * Er_cm + 2. * Pt_cm * Pr_cm; 0081 // that's all! 0082 return {t_low, t_high}; 0083 } 0084 0085 } // namespace physics 0086 } // namespace lager 0087 0088 #endif
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|