Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-02 08:17:14

0001 //
0002 // APFEL++ 2017
0003 //
0004 // Author: Valerio Bertone: valerio.bertone@cern.ch
0005 //
0006 
0007 #pragma once
0008 
0009 #include "apfel/distribution.h"
0010 #include "apfel/operator.h"
0011 #include "apfel/set.h"
0012 
0013 namespace apfel
0014 {
0015   /**
0016    * @name Basis rotations
0017    * Collection of functions to rotate distributions from the QCD
0018    * evolution basis to the phsycal basis and back. Specifically, the
0019    * QCD evolution basis is:
0020    *
0021    * {g, &Sigma;, V, T<SUB>3</SUB>, V<SUB>3</SUB>, T<SUB>8</SUB>,
0022    * V<SUB>8</SUB>, T<SUB>15</SUB>, V<SUB>15</SUB>, T<SUB>24</SUB>,
0023    * V<SUB>24</SUB>, T<SUB>35</SUB>, T<SUB>34</SUB>}
0024    *
0025    * while the physical basis is:
0026    *
0027    * { <span style="text-decoration: overline">t</span>, <span
0028    * style="text-decoration: overline">b</span>, <span
0029    * style="text-decoration: overline">c</span>, <span
0030    * style="text-decoration: overline">s</span>, <span
0031    * style="text-decoration: overline">u</span>, <span
0032    * style="text-decoration: overline">d</span>, g, d, u, s, c, b, t}
0033    */
0034   ///@{
0035   /**
0036    * @brief Rotation matrix from the QCD evolution to the physical
0037    * basis. Inverse of RotPhysToQCDEv.
0038    */
0039   const double RotQCDEvToPhys[6][6] =
0040   {
0041     {1./6., -1./2.,  1./6., 1./12., 1./20., 1./30.},    // T/V --> d^{+-}
0042     {1./6.,  1./2.,  1./6., 1./12., 1./20., 1./30.},    //         u^{+-}
0043     {1./6.,     0., -1./3., 1./12., 1./20., 1./30.},    //         s^{+-}
0044     {1./6.,     0.,     0., -1./4., 1./20., 1./30.},    //         c^{+-}
0045     {1./6.,     0.,     0.,     0., -1./5., 1./30.},    //         b^{+-}
0046     {1./6.,     0.,     0.,     0.,     0., -1./6.}     //         t^{+-}
0047   };
0048 
0049   /**
0050    * @brief Rotation matrix from the QCD evolution to the physical
0051    * basis for the full bases. Inverse of RotPhysToQCDEvFull.
0052    */
0053   const double RotQCDEvToPhysFull[13][13] =
0054   {
0055     { 0.,  1./12., -1./12.,     0.,     0.,      0.,      0.,      0.,      0.,     0.,       0., -1./12.,  1./12.},
0056     { 0.,  1./12., -1./12.,     0.,     0.,      0.,      0.,      0.,      0., -1./10.,  1./10.,  1./60., -1./60.},
0057     { 0.,  1./12., -1./12.,     0.,     0.,      0.,      0.,  -1./8.,   1./8.,  1./40., -1./40.,  1./60., -1./60.},
0058     { 0.,  1./12., -1./12.,     0.,     0.,  -1./6.,   1./6.,  1./24., -1./24.,  1./40., -1./40.,  1./60., -1./60.},
0059     { 0.,  1./12., -1./12.,  1./4., -1./4.,  1./12., -1./12.,  1./24., -1./24.,  1./40., -1./40.,  1./60., -1./60.},
0060     { 0.,  1./12., -1./12., -1./4.,  1./4.,  1./12., -1./12.,  1./24., -1./24.,  1./40., -1./40.,  1./60., -1./60.},
0061     { 1.,      0.,      0.,     0.,     0.,      0.,      0.,      0.,      0.,     0.,       0.,      0.,      0.},
0062     { 0.,  1./12.,  1./12., -1./4., -1./4.,  1./12.,  1./12.,  1./24.,  1./24.,  1./40.,  1./40.,  1./60.,  1./60.},
0063     { 0.,  1./12.,  1./12.,  1./4.,  1./4.,  1./12.,  1./12.,  1./24.,  1./24.,  1./40.,  1./40.,  1./60.,  1./60.},
0064     { 0.,  1./12.,  1./12.,     0.,     0.,  -1./6.,  -1./6.,  1./24.,  1./24.,  1./40.,  1./40.,  1./60.,  1./60.},
0065     { 0.,  1./12.,  1./12.,     0.,     0.,      0.,      0.,  -1./8.,  -1./8.,  1./40.,  1./40.,  1./60.,  1./60.},
0066     { 0.,  1./12.,  1./12.,     0.,     0.,      0.,      0.,      0.,      0., -1./10., -1./10.,  1./60.,  1./60.},
0067     { 0.,  1./12.,  1./12.,     0.,     0.,      0.,      0.,      0.,      0.,     0.,       0., -1./12., -1./12.}
0068   };
0069 
0070   /**
0071    * @brief Rotation matrix from the physical to the QCD evolution
0072    * basis. Inverse of RotQCDEvToPhys.
0073    */
0074   const double RotPhysToQCDEv[6][6] =
0075   {
0076     {  1.,  1.,  1.,  1.,  1.,  1.},    // q^{+-} --> Sigma/V
0077     { -1.,  1.,  0.,  0.,  0.,  0.},    //            T3/V3
0078     {  1.,  1., -2.,  0.,  0.,  0.},    //            T8/V8
0079     {  1.,  1.,  1., -3.,  0.,  0.},    //            T15/V15
0080     {  1.,  1.,  1.,  1., -4.,  0.},    //            T24/V24
0081     {  1.,  1.,  1.,  1.,  1., -5.}     //            T35/V35
0082   };
0083 
0084   /**
0085    * @brief Rotation matrix from the physical to the QCD evolution
0086    * basis for the full bases. Inverse of RotQCDEvToPhysFull.
0087    */
0088   const double RotPhysToQCDEvFull[13][13] =
0089   {
0090     // tb   bb   cb   sb   ub   db   g    d    u    s    c    b    t
0091     {  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.},   // g
0092     {  1.,  1.,  1.,  1.,  1.,  1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.},   // Sigma
0093     { -1., -1., -1., -1., -1., -1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.},   // V
0094     {  0.,  0.,  0.,  0.,  1., -1.,  0., -1.,  1.,  0.,  0.,  0.,  0.},   // T3
0095     {  0.,  0.,  0.,  0., -1.,  1.,  0., -1.,  1.,  0.,  0.,  0.,  0.},   // V3
0096     {  0.,  0.,  0., -2.,  1.,  1.,  0.,  1.,  1., -2.,  0.,  0.,  0.},   // T8
0097     {  0.,  0.,  0.,  2., -1., -1.,  0.,  1.,  1., -2.,  0.,  0.,  0.},   // V8
0098     {  0.,  0., -3.,  1.,  1.,  1.,  0.,  1.,  1.,  1., -3.,  0.,  0.},   // T15
0099     {  0.,  0.,  3., -1., -1., -1.,  0.,  1.,  1.,  1., -3.,  0.,  0.},   // V15
0100     {  0., -4.,  1.,  1.,  1.,  1.,  0.,  1.,  1.,  1.,  1., -4.,  0.},   // T24
0101     {  0.,  4., -1., -1., -1., -1.,  0.,  1.,  1.,  1.,  1., -4.,  0.},   // V24
0102     { -5.,  1.,  1.,  1.,  1.,  1.,  0.,  1.,  1.,  1.,  1.,  1., -5.},   // T35
0103     {  5., -1., -1., -1., -1., -1.,  0.,  1.,  1.,  1.,  1.,  1., -5.}    // V35
0104   };
0105 
0106   /**
0107    * @brief Rotation matrix from the physical basis to the basis of
0108    * q_{+/-} = q +/- qbar.
0109    */
0110   const double RotPhysToPlusMinus[13][13] =
0111   {
0112     // tb   bb   cb   sb   ub   db   g    d    u    s    c    b    t
0113     { -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.},   // t-
0114     {  0., -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.},   // b-
0115     {  0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.},   // c-
0116     {  0.,  0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.},   // s-
0117     {  0.,  0.,  0.,  0., -1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.},   // u-
0118     {  0.,  0.,  0.,  0.,  0., -1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.},   // d-
0119     {  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.},   // g
0120     {  0.,  0.,  0.,  0.,  0.,  1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.},   // d+
0121     {  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.},   // u+
0122     {  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.},   // s+
0123     {  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.},   // c+
0124     {  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.},   // b+
0125     {  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.},   // t+
0126   };
0127 
0128   /**
0129    * @brief Rotation matrix from the basis of q_{+/-} = q +/- qbar to
0130    * the physical basis. Inverse of RotPhysToPlusMinus.
0131    */
0132   const double RotPlusMinusToPhys[13][13] =
0133   {
0134     // t-    b-    c-    s-    u-    d-    g     d+    u+    s+    c+    b+    t+
0135     {-0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5},  // tb
0136     { 0.,  -0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0. },  // bb
0137     { 0.,   0.,  -0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0. },  // cb
0138     { 0.,   0.,   0.,  -0.5,  0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0. },  // sb
0139     { 0.,   0.,   0.,   0.,  -0.5,  0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0. },  // ub
0140     { 0.,   0.,   0.,   0.,   0.,  -0.5,  0.,   0.5,  0.,   0.,   0.,   0.,   0. },  // db
0141     { 0.,   0.,   0.,   0.,   0.,   0.,   1.,   0.,   0.,   0.,   0.,   0.,   0. },  // g
0142     { 0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.5,  0.,   0.,   0.,   0.,   0. },  // d
0143     { 0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0. },  // u
0144     { 0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0. },  // s
0145     { 0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0. },  // c
0146     { 0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0. },  // b
0147     { 0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5}   // t
0148   };
0149 
0150   /**
0151    * @brief Rotation matrix from the physical basis to the basis of
0152    * q_{+/-} = q +/- qbar inclusing phton and lepton PDFs.
0153    */
0154   const double RotPhysToPlusMinusQCDQED[20][20] =
0155   {
0156     // tb   bb   cb   sb   ub   db   g    d    u    s    c    b    t    taub mub  eb   gm   e    mu   tau
0157     {  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  1.},   // tau^+
0158     {  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.},   // mu^+
0159     {  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  1.,  0.,  0.},   // e^+
0160     {  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // t^+
0161     {  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // c^+
0162     {  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // u^+
0163     {  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // b^+
0164     {  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // s^+
0165     {  0.,  0.,  0.,  0.,  0.,  1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // d^+
0166     {  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // g
0167     {  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.},   // gm
0168     {  0.,  0.,  0.,  0.,  0., -1.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // d^-
0169     {  0.,  0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // s^-
0170     {  0., -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // b^-
0171     {  0.,  0.,  0.,  0., -1.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // u^-
0172     {  0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // c^-
0173     { -1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.},   // t^-
0174     {  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  1.,  0.,  0.},   // e^-
0175     {  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0.,  0.,  1.,  0.},   // mu^-
0176     {  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1.,  0.,  0.,  0.,  0.,  0.,  1.}    // tau^-
0177   };
0178 
0179   /**
0180    * @brief Rotation matrix from the basis of q_{+/-} = q +/- qbar to
0181    * the physical basis inclusing phton and lepton PDFs. Inverse of
0182    * RotPhysToPlusMinusQCDQED.
0183    */
0184   const double RotPlusMinusQCDQEDToPhys[20][20] =
0185   {
0186     // tau^+ mu^+  e^+   t^+   c^+   u^+   b^+   s^+   d^+    g    gm    d^-   s^-   b^-   u^-   c^-   t^-   e^-   mu^-  tau^-
0187     {   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  -0.5,  0.,   0.,   0. },  // tb
0188     {   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,  -0.5,  0.,   0.,   0.,   0.,   0.,   0. },  // bb
0189     {   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  -0.5,  0.,   0.,   0.,   0. },  // cb
0190     {   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,  -0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0. },  // sb
0191     {   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  -0.5,  0.,   0.,   0.,   0.,   0. },  // ub
0192     {   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,  -0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0. },  // db
0193     {   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   1.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0. },  // g
0194     {   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0. },  // d
0195     {   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0. },  // u
0196     {   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0. },  // s
0197     {   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0. },  // c
0198     {   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0. },  // b
0199     {   0.,   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0.,   0. },  // t
0200     {   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  -0.5},  // taub
0201     {   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  -0.5,  0. },  // mub
0202     {   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,  -0.5,  0.,   0. },  // eb
0203     {   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   1.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0. },  // gm
0204     {   0.,   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0.,   0. },  // e
0205     {   0.,   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5,  0. },  // mu
0206     {   0.5,  0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.,   0.5}   // tau
0207   };
0208 
0209   /**
0210    * @brief Rotation from the physical to the QCD evolution basis.
0211    * @param InPhysMap: the map in the physical basis
0212    * @return The map in the QCD evolution basis
0213    */
0214   std::map<int, double> PhysToQCDEv(std::map<int, double> const& InPhysMap);
0215 
0216   /**
0217    * @brief Rotation from the physical to the QCD evolution basis of a
0218    * map of distributions.
0219    * @param InPhysMap: the map in the physical basis
0220    * @return The map of integers and distributions in the QCD evolution basis
0221    */
0222   std::map<int, Distribution> PhysToQCDEv(std::map<int, Distribution> const& InPhysMap);
0223 
0224   /**
0225    * @brief Rotation from the physical to the QCD evolution basis of a
0226    * map of distributions.
0227    * @param InPhysMap: the map in the physical basis
0228    * @param nf: the the number of active flavours
0229    * @return The set of distributions in the QCD evolution basis
0230    */
0231   Set<Distribution> PhysToQCDEv(std::map<int, Distribution> const& InPhysMap, int const& nf);
0232 
0233   /**
0234    * @brief Rotation from the physical to the QCD evolution basis of a
0235    * map of operators.
0236    * @param InPhysMap: the map in the physical basis
0237    * @param nf: the the number of active flavours
0238    * @return The set of operators in the QCD evolution basis
0239    */
0240   Set<Operator> PhysToQCDEv(std::map<int, Operator> const& InPhysMap, int const& nf);
0241 
0242   /**
0243    * @brief Rotation from the QCD evolution to the physical basis.
0244    * @param QCDEvMap: The map in the QCD evolution basis
0245    * @return the map in the physical basis
0246    */
0247   std::map<int, double> QCDEvToPhys(std::map<int, double> const& QCDEvMap);
0248 
0249   /**
0250    * @brief Rotation from the QCD evolution to the physical basis of a
0251    * map of distributions.
0252    * @param QCDEvMap: The map of distributions in the QCD evolution basis
0253    * @return the map of distributions in the physical basis
0254    */
0255   std::map<int, Distribution> QCDEvToPhys(std::map<int, Distribution> const& QCDEvMap);
0256 
0257   /**
0258    * @brief Rotation from the QCD evolution to the physical basis of a
0259    * map of operators.
0260    * @param QCDEvMap: The map of operatoirs in the QCD evolution basis
0261    * @return the map of operators in the physical basis
0262    */
0263   std::map<int, Operator> QCDEvToPhys(std::map<int, Operator> const& QCDEvMap);
0264 
0265   /**
0266    * @brief Rotation from the physical to the PlusMinus basis.
0267    * @param InPhysMap: the map in the physical basis
0268    * @return The map in the PlusMinus basis
0269    */
0270   std::map<int, double> PhysToPlusMinus(std::map<int, double> const& InPhysMap);
0271 
0272   /**
0273    * @brief Rotation from the physical to the PlusMinus basis of a map
0274    * of distributions.
0275    * @param InPhysMap: the map of distributions in the physical basis
0276    * @return The map of distributions in the PlusMinus basis
0277    */
0278   std::map<int, Distribution> PhysToPlusMinus(std::map<int, Distribution> const& InPhysMap);
0279 
0280   /**
0281    * @brief Rotation from to the PlusMinus basis to the physical basis.
0282    * @param PlusMinusMap: the map in the PlusMinus basis
0283    * @return The map in the physical basis
0284    */
0285   std::map<int, double> PlusMinusToPhys(std::map<int, double> const& PlusMinusMap);
0286 
0287   /**
0288    * @brief Rotation from to the PlusMinus basis to the physical basis
0289    * of a map of distributions.
0290    * @param PlusMinusMap: the map in the PlusMinus basis
0291    * @return The map of distributions in the physical basis
0292    */
0293   std::map<int, Distribution> PlusMinusToPhys(std::map<int, Distribution> const& PlusMinusMap);
0294 
0295   /**
0296    * @brief Rotation from the PlusMinus basis including also photon
0297    * and lepton distributions to the physical basis.
0298    * @param PlusMinusMap: the map in the PlusMinus basis
0299    * @return The map in the physical basis
0300    */
0301   std::map<int, double> PlusMinusQCDQEDToPhys(std::map<int, double> const& PlusMinusMap);
0302 
0303   /**
0304    * @brief Rotation from the PlusMinus basis including also photon
0305    * and lepton distributions to the physical basis of a map of
0306    * distributions.
0307    * @param PlusMinusMap: the map in the PlusMinus basis
0308    * @return The map of distributions in the physical basis
0309    */
0310   std::map<int, Distribution> PlusMinusQCDQEDToPhys(std::map<int, Distribution> const& PlusMinusMap);
0311 
0312   /**
0313    * @brief Rotation from the phsyical basis to the PlusMinus basis
0314    * including also photon and lepton distributions.
0315    * @param InPhysMap: the map in the physical basis
0316    * @return The map in the PlusMinus basis with photon and lepton PDFs
0317    */
0318   std::map<int, double> PhysToPlusMinusQCDQED(std::map<int, double> const& InPhysMap);
0319 
0320   /**
0321    * @brief Rotation from the physical to the PlusMinus basis of a map
0322    * of distributions including also photon and lepton distributions.
0323    * @param InPhysMap: the map of distributions in the physical basis
0324    * @return The map of distributions in the PlusMinus basis with photon and lepton PDFs
0325    */
0326   std::map<int, Distribution> PhysToPlusMinusQCDQED(std::map<int, Distribution> const& InPhysMap);
0327   ///@}
0328 }