LCOV - code coverage report
Current view: top level - isdb - SAXS.cpp (source / functions) Hit Total Coverage
Test: plumed test coverage Lines: 6145 7893 77.9 %
Date: 2026-11-05 10:19:04 Functions: 32 35 91.4 %

          Line data    Source code
       1             : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       2             :    Copyright (c) 2017-2023 The plumed team
       3             :    (see the PEOPLE file at the root of the distribution for a list of names)
       4             : 
       5             :    See http://www.plumed.org for more information.
       6             : 
       7             :    This file is part of plumed, version 2.
       8             : 
       9             :    plumed is free software: you can redistribute it and/or modify
      10             :    it under the terms of the GNU Lesser General Public License as published by
      11             :    the Free Software Foundation, either version 3 of the License, or
      12             :    (at your option) any later version.
      13             : 
      14             :    plumed is distributed in the hope that it will be useful,
      15             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      16             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17             :    GNU Lesser General Public License for more details.
      18             : 
      19             :    You should have received a copy of the GNU Lesser General Public License
      20             :    along with plumed.  If not, see <http://www.gnu.org/licenses/>.
      21             : +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
      22             : /*
      23             :  This class was originally written by Alexander Jussupow
      24             :  Arrayfire implementation (now removed) by Alexander Jussupow and CC
      25             :  Extension for the middleman algorithm (now removed) by Max Muehlbauer
      26             :  Refactoring for hySAXS Martini form factors for Nucleic Acids by Cristina Paissoni
      27             :  Refactoring for hySAS OneBead form factors with solvent correction by Federico Ballabio and Riccardo Capelli
      28             :  Resolution function by Henrique Musseli Cezar
      29             : */
      30             : 
      31             : #include "MetainferenceBase.h"
      32             : #include "core/ActionRegister.h"
      33             : #include "core/ActionSet.h"
      34             : #include "core/GenericMolInfo.h"
      35             : #include "tools/MolDataClass.h"
      36             : #include "tools/Communicator.h"
      37             : #include "tools/Pbc.h"
      38             : #include "tools/PDB.h"
      39             : #include "tools/Tools.h"
      40             : #include "tools/IFile.h"
      41             : #include "tools/Random.h"
      42             : #include "tools/OpenMP.h"
      43             : 
      44             : #include <map>
      45             : #include <iterator>
      46             : #include <iostream>
      47             : #include <algorithm>
      48             : #include <cctype>
      49             : #include <cmath>
      50             : 
      51             : #ifndef M_PI
      52             : #define M_PI           3.14159265358979323846
      53             : #endif
      54             : 
      55             : namespace PLMD {
      56             : namespace isdb {
      57             : 
      58             : //+PLUMEDOC ISDB_COLVAR SAXS
      59             : /*
      60             : Calculates SAXS intensity.
      61             : 
      62             : SAXS intensities are calculated for a set of scattering vectors using QVALUE keywords numbered from 1.
      63             : Form factors can be assigned either by polynomial expansion of any order by using the PARAMETERS keywords, or
      64             : automatically matched to atoms using the ATOMISTIC flag by reading a PDB file. Alternatively to the atomistic
      65             : representation, two types of coarse-grained mapping are available:
      66             : - MARTINI.
      67             : - ONEBEAD.
      68             : 
      69             : Whether for PARAMETERS, ATOMISTIC, and ONEBEAD the user must provide an all-atom PDB file via MOLINFO before the
      70             : SAXS instruction. MARTINI requires a mapping scheme consisting of a PDB file that contains both the all-atom
      71             : and MARTINI representations, and a bead position file (e.g., bead1: CENTER ATOMS=1,5,7,11,12 WEIGHTS=14,12,12,
      72             : 12,16). The MARTINI_FF keyword selects the form-factor generation: MARTINI_FF=2 (default) uses the Martini 2.2
      73             : form factors for proteins and nucleic acids, while MARTINI_FF=3 uses Martini 3 form factors for proteins. The
      74             : Martini 3 protein form factors are described in the corresponding paper in the bibliography below.
      75             : 
      76             : ONEBEAD scheme consists in a single-bead per amino acid residue, three-bead for nucleic acid residue (one for
      77             : the phosphate group, one for the pentose sugar, one for the nucleobase), and a single bead per monosaccharide
      78             : for glycans. Every bead carries the sign of its net scattering amplitude, so a bead whose contrast is negative
      79             : with respect to the solvent enters the Debye sum with the correct sign. This matters for SANS close to a
      80             : contrast-match point and for nuclei with a negative coherent scattering length such as Mn; in SAXS every bead
      81             : has positive contrast and the sign is always positive. PLUMED creates a virtual bead on which
      82             : the SAXS calculations are performed, centred on the COM of all atoms belonging to the bead. It is possible to
      83             : account for the contribution of the solvation layer to the SAXS intensity by adding a correction term for the
      84             : solvent accessible beads only: the form factors of the amino acids / phosphate groups / pentose sugars /
      85             : nucleobases / monosaccharides with a SASA (computed via LCPO algorithm) greater than a threshold are corrected
      86             : according to an electron density term. Both the surface cut-off threshold and the electron density term can be
      87             : set by the user with the SASA_CUTOFF and SOLVATION_CORRECTION keywords. Moreover, SASA stride calculation can be
      88             : modified using SOLVATION_STRIDE, which is set to 10 steps by default.
      89             : ONEBEAD requires an additional PDB file to perform mapping conversion, which must be provided via TEMPLATE
      90             : keyword. This PDB file must contain exactly the atoms selected by ATOMS, listed in the same order, with the
      91             : atoms of each chain contiguous and the residues of each chain in ascending order. Any mismatch is reported as
      92             : an error. Note that the ONEBEAD mapping is taken entirely from the TEMPLATE: unlike ATOMISTIC and MARTINI, it
      93             : does not read residue or atom names from MOLINFO.
      94             : The AMBER OL3 (RNA) and OL15 (DNA) naming is required for nucleic acids.
      95             : Three additional bead types are available for DNA and RNA besides phosphate group, pentose sugar, and nucleobase:
      96             : - 5'-end pentose sugar capped with an hydroxyl moiety at C5' (the residue name in the PDB must be followed by
      97             : "5", e.g., DC5 or C5 for cytosine in DNA and RNA, respectively);
      98             : - 5'-phosphorylated end with an additional hydroxyl moiety at P (the residue name in the PDB must be followed by
      99             : "T", e.g., DCT or CT for cytosine in DNA and RNA, respectively);
     100             : - 3'-end pentose sugar capped with an hydroxyl moiety at C3' (the residue name in the PDB must be followed by
     101             : "3", e.g., DC3 or C3 for cytosine in DNA and RNA, respectively).
     102             : An additional bead type is available for proteins:
     103             : - Cysteine residue involved in disulfide bridge (the residue in the PDB must be named CYX).
     104             : 
     105             : Experimental reference intensities can be added using the EXPINT keywords. All these values must be normalised
     106             : to the SAXS intensity at q = 0. To facilitate this operation, the SCALE_EXPINT keyword can be used to provide
     107             : the intensity at q = 0. Each EXPINT is divided by SCALE_EXPINT.
     108             : The maximum QVALUE for ONEBEAD is set to 0.3 inverse angstroms.
     109             : The solvent density, that by default is set to 0.334 electrons per cubic angstrom (bulk water), can be modified
     110             : using the SOLVDENS keyword.
     111             : 
     112             : The ABSOLUTE flag can be used in order to calculate intensities in the absolute scale. It is only available for
     113             : the ATOMISTIC scheme and cannot be used with SCALE_EXPINT.
     114             : 
     115             : [METAINFERENCE](METAINFERENCE.md) can be activated using DOSCORE and the other relevant keywords.
     116             : 
     117             : ##Examples
     118             : 
     119             : in the following example the SAXS intensities are calculated using single-bead per residue approximation, with a
     120             : SASA threshold of 1 square nanometer and a solvation term of 0.04. Each experimental intensity is divided by
     121             : 1.4002, which is the corresponding theoretical intensity value at q = 0. The form factors are selected according
     122             : to the PDB file specified by TEMPLATE keyword.
     123             : 
     124             : ```plumed
     125             : MOLINFO STRUCTURE=template_AA.pdb
     126             : 
     127             : SAXS ...
     128             : LABEL=SAXS
     129             : ATOMS=1-355
     130             : ONEBEAD
     131             : TEMPLATE=template_AA.pdb
     132             : SOLVDENS=0.334
     133             : SOLVATION_CORRECTION=0.04
     134             : SOLVATION_STRIDE=1
     135             : SASA_CUTOFF=1.0
     136             : SCALE_EXPINT=1.4002
     137             : QVALUE1=0.03 EXPINT1=1.0902
     138             : QVALUE2=0.06 EXPINT2=0.790632
     139             : QVALUE3=0.09 EXPINT3=0.453808
     140             : QVALUE4=0.12 EXPINT4=0.254737
     141             : QVALUE5=0.15 EXPINT5=0.154928
     142             : QVALUE6=0.18 EXPINT6=0.0921503
     143             : QVALUE7=0.21 EXPINT7=0.052633
     144             : QVALUE8=0.24 EXPINT8=0.0276557
     145             : QVALUE9=0.27 EXPINT9=0.0122775
     146             : QVALUE10=0.30 EXPINT10=0.00880634
     147             : ... SAXS
     148             : 
     149             : PRINT ARG=(SAXS\.q-.*),(SAXS\.exp-.*) FILE=saxsdata STRIDE=1
     150             : ```
     151             : 
     152             : */
     153             : //+ENDPLUMEDOC
     154             : 
     155             : //+PLUMEDOC ISDB_COLVAR SANS
     156             : /*
     157             : Calculates SANS intensity.
     158             : 
     159             : SANS intensities are calculated for a set of scattering vectors using QVALUE keywords numbered from 1.
     160             : Form factors are automatically assigned to atoms using the ATOMISTIC flag by reading a PDB file, by reading
     161             : the scattering lengths with the PARAMETERS keyword from input or with the PARAMETERSFILE keyword or, alternatively,
     162             : a ONEBEAD coarse-grained implementation is available.
     163             : 
     164             : Both for ATOMISTIC and ONEBEAD the user must provide an all-atom PDB file via MOLINFO before the SANS instruction.
     165             : 
     166             : ONEBEAD scheme consists in a single-bead per amino acid residue, three-bead for nucleic acid residue (one for
     167             : the phosphate group, one for the pentose sugar, one for the nucleobase), and a single bead per monosaccharide
     168             : for glycans. Every bead carries the sign of its net scattering amplitude, so a bead whose contrast is negative
     169             : with respect to the solvent enters the Debye sum with the correct sign. This matters for SANS close to a
     170             : contrast-match point and for nuclei with a negative coherent scattering length such as Mn; in SAXS every bead
     171             : has positive contrast and the sign is always positive. PLUMED creates a virtual bead on which
     172             : the SANS calculations are performed, centred on the COM of all atoms belonging to the bead. It is possible to
     173             : account for the contribution of the solvation layer to the SANS intensity by adding a correction term for the
     174             : solvent accessible beads only: the form factors of the amino acids / phosphate groups / pentose sugars /
     175             : nucleobases / monosaccharides with a SASA (computed via LCPO algorithm) greater than a threshold are corrected
     176             : according to an electron density term. Both the surface cut-off threshold and the electron density term can be set by the user
     177             : with the SASA_CUTOFF and SOLVATION_CORRECTION keywords. Moreover, SASA stride calculation can be modified using
     178             : SOLVATION_STRIDE, which is set to 10 steps by default. The deuteration of the solvent-exposed residues is chosen
     179             : with a probability equal to the deuterium concentration in the buffer. The deuterated residues are updated with a
     180             : stride equal to SOLVATION_STRIDE. The fraction of deuterated water can be set with DEUTER_CONC, the default value
     181             : is 0.
     182             : ONEBEAD requires an additional PDB file to perform mapping conversion, which must be provided via TEMPLATE
     183             : keyword. This PDB file must contain exactly the atoms selected by ATOMS, listed in the same order, with the
     184             : atoms of each chain contiguous and the residues of each chain in ascending order. Any mismatch is reported as
     185             : an error. Note that the ONEBEAD mapping is taken entirely from the TEMPLATE: unlike ATOMISTIC and MARTINI, it
     186             : does not read residue or atom names from MOLINFO.
     187             : The AMBER OL3 (RNA) and OL15 (DNA) naming is required for nucleic acids.
     188             : Three additional bead types are available for DNA and RNA besides phosphate group, pentose sugar, and nucleobase:
     189             : - 5'-end pentose sugar capped with an hydroxyl moiety at C5' (the residue name in the PDB must be followed by "5",
     190             : e.g., DC5 or C5 for cytosine in DNA and RNA, respectively);
     191             : - 5'-phosphorylated end with an additional hydroxyl moiety at P (the residue name in the PDB must be followed by
     192             : "T", e.g., DCT or CT for cytosine in DNA and RNA, respectively);
     193             : - 3'-end pentose sugar capped with an hydroxyl moiety at C3' (the residue name in the PDB must be followed by "3",
     194             : e.g., DC3 or C3 for cytosine in DNA and RNA, respectively).
     195             : An additional bead type is available for proteins:
     196             : - Cysteine residue involved in disulfide bridge (the residue in the PDB must be named CYX).
     197             : 
     198             : PLEASE NOTE: at the moment, we DO NOT explicitly take into account deuterated residues in the ATOMISTIC
     199             : representation, but we correct the solvent contribution via the DEUTER_CONC keyword.
     200             : 
     201             : Experimental reference intensities can be added using the EXPINT keywords. All these values must be normalised
     202             : to the SANS intensity at q = 0. To facilitate this operation, the SCALE_EXPINT keyword can be used to provide
     203             : the intensity at q = 0. Each EXPINT is divided by SCALE_EXPINT.
     204             : The maximum QVALUE for ONEBEAD is set to 0.3 inverse angstroms.
     205             : The solvent density, that by default is set to 0.334 electrons per cubic angstrom (bulk water), can be modified
     206             : using the SOLVDENS keyword.
     207             : 
     208             : The ABSOLUTE flag can be used in order to calculate intensities in the absolute scale. It is only available for
     209             : the ATOMISTIC scheme and cannot be used with SCALE_EXPINT.
     210             : 
     211             : [METAINFERENCE](METAINFERENCE.md) can be activated using DOSCORE and the other relevant keywords.
     212             : 
     213             : ##Examples
     214             : 
     215             : in the following example the SANS intensities are calculated at atomistic resolution. The form factors are assigned
     216             : according to the PDB file specified in the MOLINFO. Each experimental intensity is divided by 1.4002, which is the
     217             : corresponding theoretical intensity value at q = 0. The deuterated water fraction is set to 48%.
     218             : 
     219             : ```plumed
     220             : MOLINFO STRUCTURE=template_AA.pdb
     221             : 
     222             : SANS ...
     223             : LABEL=SANS
     224             : ATOMS=1-355
     225             : ATOMISTIC
     226             : SCALE_EXPINT=1.4002
     227             : DEUTER_CONC=0.48
     228             : QVALUE1=0.03 EXPINT1=1.0902
     229             : QVALUE2=0.06 EXPINT2=0.790632
     230             : QVALUE3=0.09 EXPINT3=0.453808
     231             : QVALUE4=0.12 EXPINT4=0.254737
     232             : QVALUE5=0.15 EXPINT5=0.154928
     233             : QVALUE6=0.18 EXPINT6=0.0921503
     234             : QVALUE7=0.21 EXPINT7=0.052633
     235             : QVALUE8=0.24 EXPINT8=0.0276557
     236             : QVALUE9=0.27 EXPINT9=0.0122775
     237             : QVALUE10=0.30 EXPINT10=0.00880634
     238             : ... SANS
     239             : 
     240             : PRINT ARG=(SANS\.q-.*),(SANS\.exp-.*) FILE=sansdata STRIDE=1
     241             : ```
     242             : 
     243             : */
     244             : //+ENDPLUMEDOC
     245             : 
     246             : class SAXS :
     247             :   public MetainferenceBase {
     248             : private:
     249             :   // ATOMISTIC X-ray/neutron form-factor slots. The first six are the original
     250             :   // biological elements; the AFF_* entries are monoatomic ions whose Cromer-Mann
     251             :   // and neutron parameters are supplied by getIonData().
     252             :   enum { H, C, N, O, P, S,
     253             :          AFF_NA, AFF_K, AFF_CL, AFF_CA, AFF_MG, AFF_ZN, AFF_FE2, AFF_FE3, AFF_MN,
     254             :          NTT
     255             :        };
     256             :   // Canonical ion identifiers, shared by the ATOMISTIC and ONEBEAD routes.
     257             :   // getIonData() and ionTypeFromResname() are keyed on these values. The AFF_*
     258             :   // (atomistic) slots above and the OB_* (onebead) slots below MUST be listed in
     259             :   // this same order so that affSlot()/obSlot() can map an ion id to its slot.
     260             :   enum { ION_NA, ION_K, ION_CL, ION_CA, ION_MG, ION_ZN, ION_FE2, ION_FE3, ION_MN, NIONS };
     261             :   enum { ALA_BB, ARG_BB, ARG_SC1, ARG_SC2, ASN_BB, ASN_SC1, ASP_BB, ASP_SC1, CYS_BB, CYS_SC1,
     262             :          GLN_BB, GLN_SC1, GLU_BB, GLU_SC1, GLY_BB, HIS_BB, HIS_SC1, HIS_SC2, HIS_SC3, ILE_BB,
     263             :          ILE_SC1, LEU_BB, LEU_SC1, LYS_BB, LYS_SC1, LYS_SC2, MET_BB, MET_SC1, PHE_BB, PHE_SC1,
     264             :          PHE_SC2, PHE_SC3, PRO_BB, PRO_SC1, SER_BB, SER_SC1, THR_BB, THR_SC1, TRP_BB, TRP_SC1,
     265             :          TRP_SC2, TRP_SC3, TRP_SC4, TYR_BB, TYR_SC1, TYR_SC2, TYR_SC3, VAL_BB, VAL_SC1, A_BB1,
     266             :          A_BB2, A_BB3, A_SC1, A_SC2, A_SC3, A_SC4, A_3TE, A_5TE, A_TE3, A_TE5, C_BB1, C_BB2,
     267             :          C_BB3, C_SC1, C_SC2, C_SC3, C_3TE, C_5TE, C_TE3, C_TE5, G_BB1, G_BB2, G_BB3, G_SC1,
     268             :          G_SC2, G_SC3, G_SC4, G_3TE, G_5TE, G_TE3, G_TE5, U_BB1, U_BB2, U_BB3, U_SC1, U_SC2,
     269             :          U_SC3, U_3TE, U_5TE, U_TE3, U_TE5, DA_BB1, DA_BB2, DA_BB3, DA_SC1, DA_SC2, DA_SC3,
     270             :          DA_SC4, DA_3TE, DA_5TE, DA_TE3, DA_TE5, DC_BB1, DC_BB2, DC_BB3, DC_SC1, DC_SC2, DC_SC3,
     271             :          DC_3TE, DC_5TE, DC_TE3, DC_TE5, DG_BB1, DG_BB2, DG_BB3, DG_SC1, DG_SC2, DG_SC3, DG_SC4,
     272             :          DG_3TE, DG_5TE, DG_TE3, DG_TE5, DT_BB1, DT_BB2, DT_BB3, DT_SC1, DT_SC2, DT_SC3, DT_3TE,
     273             :          DT_5TE, DT_TE3, DT_TE5,
     274             :          // Extra protein beads present only in the Martini 3 topology (MARTINI_FF=3)
     275             :          ALA_SC1, TRP_SC5, TYR_SC4,
     276             :          NMARTINI
     277             :        };
     278             :   enum { TRP,
     279             :          TYR,
     280             :          PHE,
     281             :          HIS,
     282             :          HIP,
     283             :          ARG,
     284             :          LYS,
     285             :          CYS,
     286             :          CYX,
     287             :          ASP,
     288             :          GLU,
     289             :          ILE,
     290             :          LEU,
     291             :          MET,
     292             :          ASN,
     293             :          PRO,
     294             :          GLN,
     295             :          SER,
     296             :          THR,
     297             :          VAL,
     298             :          ALA,
     299             :          GLY,
     300             :          BB_PO2,
     301             :          BB_PO3,
     302             :          BB_DNA,
     303             :          BB_DNA_5,
     304             :          BB_DNA_3,
     305             :          BB_RNA,
     306             :          BB_RNA_5,
     307             :          BB_RNA_3,
     308             :          BASE_A,
     309             :          BASE_C,
     310             :          BASE_T,
     311             :          BASE_G,
     312             :          BASE_U,
     313             :          // Monosaccharide bead types (one bead per residue, exactly as for the
     314             :          // amino acids). GLYC_NAG/GLYC_NGA are the N-acetylated hexosamines
     315             :          // (GlcNAc/GalNAc); see getOnebeadparam() for the provenance of the
     316             :          // corresponding 21-parameter sets.
     317             :          GLYC_FUC, GLYC_MAN, GLYC_BMA, GLYC_GAL, GLYC_GLC, GLYC_NAG, GLYC_NGA, GLYC_SIA,
     318             :          // Monoatomic-ion bead types (one atom per bead). Their vac/solv/mix terms are
     319             :          // filled analytically by getOnebeadIonparam_*(); see ionTypeFromResname() for
     320             :          // residue-name detection. This list MUST stay in the same order as ION_*/AFF_*.
     321             :          OB_NA, OB_K, OB_CL, OB_CA, OB_MG, OB_ZN, OB_FE2, OB_FE3, OB_MN,
     322             :          NONEBEAD
     323             :        };
     324             :   struct SplineCoeffs {
     325             :     double a;
     326             :     double b;
     327             :     double c;
     328             :     double d;
     329             :     double x;
     330             :   };
     331             :   bool saxs;
     332             :   bool absolute;
     333             :   bool pbc;
     334             :   bool serial;
     335             :   bool onebead;
     336             :   bool resolution;
     337             :   bool chi2;
     338             :   bool chi2ensemble;
     339             :   int chi2ensemble_replicas;
     340             :   bool isFirstStep;
     341             :   unsigned nres;
     342             :   std::vector<unsigned> atoi;
     343             :   std::vector<unsigned> atoms_per_bead;
     344             :   std::vector<double>   atoms_masses;
     345             :   std::vector<double>   q_list;
     346             :   std::vector<double>   expint;
     347             :   std::vector<double>   experr;
     348             :   std::vector<double>   FF_rank;
     349             :   std::vector<std::vector<double> > FF_value_vacuum;
     350             :   std::vector<std::vector<double> > FF_value_solv;
     351             :   std::vector<std::vector<double> > FF_value_mixed;
     352             :   std::vector<std::vector<double> > FF_value;
     353             :   // SANS:
     354             :   std::vector<std::vector<double> > FF_value_vacuum_H;
     355             :   std::vector<std::vector<double> > FF_value_solv_H;
     356             :   std::vector<std::vector<double> > FF_value_mixed_H;
     357             :   std::vector<std::vector<double> > FF_value_vacuum_D;
     358             :   std::vector<std::vector<double> > FF_value_mixed_D;
     359             : 
     360             :   std::vector<std::vector<double> > LCPOparam;
     361             :   std::vector<unsigned> residue_atom;
     362             :   // ONEBEAD glycans. glyc_type[i] is the bead type (GLYC_*) of atom i, or -1 when
     363             :   // atom i does not belong to a monosaccharide. glyc_bridge[i] flags the glycan
     364             :   // oxygens that carry a glycosidic bond in the TEMPLATE, so that the LCPO SASA
     365             :   // treats them as ethers rather than as free hydroxyls. Both are filled by
     366             :   // getOnebeadMapping() and are indexed exactly like LCPOparam.
     367             :   std::vector<int>  glyc_type;
     368             :   std::vector<bool> glyc_bridge;
     369             : 
     370             :   double rho, rho_corr, sasa_cutoff;
     371             :   double deuter_conc;
     372             :   unsigned solv_stride;
     373             :   std::vector<double> Iq0_vac;
     374             :   std::vector<double> Iq0_solv;
     375             :   std::vector<double> Iq0_mix;
     376             :   double Iq0;
     377             :   // Sign of each bead's net scattering amplitude, +1 or -1.
     378             :   //
     379             :   // The single-bead approximation stores B(q) = F_vac + rho^2 F_solv - rho F_mix,
     380             :   // which is the orientational average of |sum_i A_i exp(i q r_i)|^2 over the
     381             :   // atoms of the bead with A_i = b_i - rho v_i. Taking sqrt(B) therefore gives
     382             :   // the MAGNITUDE of the bead amplitude and discards its sign. In the Debye sum
     383             :   // I(q) = sum_j sum_l F_j F_l sinc(q R_jl) the sign matters as soon as two
     384             :   // beads have different signs: a uniform flip cancels, a mixed one does not.
     385             :   //
     386             :   // This is reachable in SANS near a contrast-match point, and for a nucleus
     387             :   // with a negative coherent scattering length such as Mn-55. In SAXS every
     388             :   // bead has positive contrast against water, so the sign is always +1 and the
     389             :   // result is unchanged.
     390             :   //
     391             :   // Recomputed together with Iq0 because it depends on the solvent density, on
     392             :   // the solvation-layer correction, and in SANS on which residues are deuterated.
     393             :   std::vector<double> bead_sign;
     394             :   // Sign of A = sum_b - rho sum_v for one bead, from its q=0 terms.
     395             :   // At q=0: F_solv(0) = sum_v^2 and F_mix(0) = 2 sum_b sum_v, with sum_v > 0.
     396             :   // Hence 2 sum_v A = mix - 2 rho solv, and the two have the same sign.
     397             :   static double beadSign(double iq0_solv, double iq0_mix, double rho) {
     398        5118 :     return (iq0_mix - 2.*rho*iq0_solv < 0.) ? -1. : 1.;
     399             :   }
     400             : 
     401             :   // SANS:
     402             :   std::vector<double> Iq0_vac_H;
     403             :   std::vector<double> Iq0_solv_H;
     404             :   std::vector<double> Iq0_mix_H;
     405             :   std::vector<double> Iq0_vac_D;
     406             :   std::vector<double> Iq0_mix_D;
     407             :   unsigned int Nj;
     408             :   std::vector<std::vector<double> > qj_list;
     409             :   std::vector<std::vector<double> > Rij;
     410             :   std::vector<double> sigma_res;
     411             :   // the smearing with the resolution function is linear: smeared I(q_k) = sum_l smear_[k*numq+l] I(q_l)
     412             :   std::vector<double> smear_;
     413             :   // q values as a uniform grid q0+k*dq plus small deviations (see sincos_q)
     414             :   double qref0_;
     415             :   double qref_dq_;
     416             :   double qref_maxeps_;
     417             :   std::vector<double> qref_eps_;
     418             :   // random numbers for the deuteration of the solvent exposed residues (SANS)
     419             :   Random random_deut_;
     420             : 
     421             :   // Chebyshev polynomial coefficients for i0e(x) used for resolution function
     422             :   // values taken from cephes library
     423             :   const std::vector<double> A = {
     424             :     -4.41534164647933937950E-18,
     425             :       3.33079451882223809783E-17,
     426             :       -2.43127984654795469359E-16,
     427             :       1.71539128555513303061E-15,
     428             :       -1.16853328779934516808E-14,
     429             :       7.67618549860493561688E-14,
     430             :       -4.85644678311192946090E-13,
     431             :       2.95505266312963983461E-12,
     432             :       -1.72682629144155570723E-11,
     433             :       9.67580903537323691224E-11,
     434             :       -5.18979560163526290666E-10,
     435             :       2.65982372468238665035E-9,
     436             :       -1.30002500998624804212E-8,
     437             :       6.04699502254191894932E-8,
     438             :       -2.67079385394061173391E-7,
     439             :       1.11738753912010371815E-6,
     440             :       -4.41673835845875056359E-6,
     441             :       1.64484480707288970893E-5,
     442             :       -5.75419501008210370398E-5,
     443             :       1.88502885095841655729E-4,
     444             :       -5.76375574538582365885E-4,
     445             :       1.63947561694133579842E-3,
     446             :       -4.32430999505057594430E-3,
     447             :       1.05464603945949983183E-2,
     448             :       -2.37374148058994688156E-2,
     449             :       4.93052842396707084878E-2,
     450             :       -9.49010970480476444210E-2,
     451             :       1.71620901522208775349E-1,
     452             :       -3.04682672343198398683E-1,
     453             :       6.76795274409476084995E-1
     454             :     };
     455             :   const std::vector<double> B = {
     456             :     -7.23318048787475395456E-18,
     457             :       -4.83050448594418207126E-18,
     458             :       4.46562142029675999901E-17,
     459             :       3.46122286769746109310E-17,
     460             :       -2.82762398051658348494E-16,
     461             :       -3.42548561967721913462E-16,
     462             :       1.77256013305652638360E-15,
     463             :       3.81168066935262242075E-15,
     464             :       -9.55484669882830764870E-15,
     465             :       -4.15056934728722208663E-14,
     466             :       1.54008621752140982691E-14,
     467             :       3.85277838274214270114E-13,
     468             :       7.18012445138366623367E-13,
     469             :       -1.79417853150680611778E-12,
     470             :       -1.32158118404477131188E-11,
     471             :       -3.14991652796324136454E-11,
     472             :       1.18891471078464383424E-11,
     473             :       4.94060238822496958910E-10,
     474             :       3.39623202570838634515E-9,
     475             :       2.26666899049817806459E-8,
     476             :       2.04891858946906374183E-7,
     477             :       2.89137052083475648297E-6,
     478             :       6.88975834691682398426E-5,
     479             :       3.36911647825569408990E-3,
     480             :       8.04490411014108831608E-1
     481             :     };
     482             : 
     483             :   void calculate_cpu(std::vector<Vector> &pos, std::vector<Vector> &deriv, const bool reduce_deriv);
     484             :   void sincos_q(const double r, double *s, double *c) const;
     485             :   void getMartiniFFparam(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter);
     486             :   void getMartiniFFparam_v3(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter);
     487             :   void getOnebeadparam(const PDB &pdb, const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter_vac, std::vector<std::vector<long double> > &parameter_mix, std::vector<std::vector<long double> > &parameter_solv, const std::vector<unsigned> & residue_atoms);
     488             :   unsigned getOnebeadMapping(const PDB &pdb, const std::vector<AtomNumber> &atoms);
     489             :   double calculateAFF(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &FF_tmp, const double rho);
     490             :   std::map<std::string, std::vector<double> > setupLCPOparam();
     491             :   void readLCPOparam(const std::vector<std::vector<std::string> > &AtomResidueName, unsigned natoms);
     492             :   void calcNlist(std::vector<std::vector<int> > &Nlist);
     493             :   void sasa_calculate(std::vector<bool> &solv_res);
     494             :   // SANS:
     495             :   void getOnebeadparam_sansH(const PDB &pdb, const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter_vac_H, std::vector<std::vector<long double> > &parameter_mix_H, std::vector<std::vector<long double> > &parameter_solv_H);
     496             :   void getOnebeadparam_sansD(const PDB &pdb, const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter_vac_D, std::vector<std::vector<long double> > &parameter_mix_D);
     497             :   double calculateAFFsans(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &FF_tmp, const double deuter_conc);
     498             :   // Ions (shared by ATOMISTIC and ONEBEAD).
     499             :   // getIonData returns, for a canonical ION_* id: Cromer-Mann a[4]/b[4]/c (X-ray),
     500             :   // the displaced-solvent volume vol (A^3), the bound coherent neutron scattering
     501             :   // length neutron_b (10^-12 cm), and the atomic mass (g/mol).
     502             :   void getIonData(unsigned ion, std::vector<double> &cm_a, std::vector<double> &cm_b, double &cm_c, double &vol, double &neutron_b, double &mass) const;
     503             :   // Returns the canonical ION_* id for a residue name, or -1 if it is not a known ion.
     504             :   int ionTypeFromResname(const std::string &resname) const;
     505             :   // True for monosaccharides that are recognised but not parameterised.
     506             :   bool isUnsupportedGlycan(const std::string &resname) const;
     507             :   // Canonical name of a residue whose name encodes a glycosylation site.
     508             :   std::string onebeadResidueAlias(const std::string &resname) const;
     509             :   // True when the residue is represented by a single bead (amino acids, incl. CYX).
     510             :   bool isOnebeadProteinResidue(const PDB &pdb, const std::string &resname) const;
     511             :   // Returns the GLYC_* bead type for a monosaccharide residue name, or -1 if the
     512             :   // residue is not a supported glycan. hasN must be true when the residue carries
     513             :   // an amide nitrogen: that is what distinguishes GlcNAc from Glc and GalNAc from
     514             :   // Gal when the input file names an N-acetylhexosamine after its parent hexose.
     515             :   int glycanTypeFromResname(const std::string &resname, bool hasN) const;
     516             :   // Map a canonical ion id to its atomistic / onebead form-factor slot.
     517             :   inline unsigned affSlot(unsigned ion) const {
     518         108 :     return AFF_NA + ion;
     519             :   }
     520             :   inline unsigned obSlot(unsigned ion) const {
     521         212 :     return OB_NA + ion;
     522             :   }
     523             :   // Fill the onebead vac/solv/mix terms (and q=0 Iq0 values) for every ion bead.
     524             :   void getOnebeadIonparam_saxs(std::vector<std::vector<long double> > &FF_tmp_vac, std::vector<std::vector<long double> > &FF_tmp_mix, std::vector<std::vector<long double> > &FF_tmp_solv, std::vector<double> &iq0_vac, std::vector<double> &iq0_mix, std::vector<double> &iq0_solv) const;
     525             :   void getOnebeadIonparam_sans(std::vector<std::vector<long double> > &FF_tmp_vac_H, std::vector<std::vector<long double> > &FF_tmp_mix_H, std::vector<std::vector<long double> > &FF_tmp_solv_H, std::vector<std::vector<long double> > &FF_tmp_vac_D, std::vector<std::vector<long double> > &FF_tmp_mix_D, std::vector<double> &iq0_vac_H, std::vector<double> &iq0_mix_H, std::vector<double> &iq0_solv_H, std::vector<double> &iq0_vac_D, std::vector<double> &iq0_mix_D) const;
     526             :   void resolution_function();
     527             :   std::vector<SplineCoeffs> spline_coeffs(std::vector<double> &x, std::vector<double> &y);
     528             :   inline double interpolation(std::vector<SplineCoeffs> &coeffs, double x);
     529             :   inline double i0e(double x);
     530             :   double chbevl(double x, const std::vector<double> &coeffs);
     531             : 
     532             : public:
     533             :   static void registerKeywords( Keywords& keys );
     534             :   explicit SAXS(const ActionOptions&);
     535             :   void calculate() override;
     536             : };
     537             : 
     538             : PLUMED_REGISTER_ACTION(SAXS,"SAXS")
     539             : PLUMED_REGISTER_ACTION(SAXS,"SANS")
     540             : 
     541          71 : void SAXS::registerKeywords(Keywords& keys) {
     542          71 :   MetainferenceBase::registerKeywords(keys);
     543          71 :   keys.addFlag("NOPBC",false,"Ignore the periodic boundary conditions when calculating distances");
     544          71 :   keys.addFlag("SERIAL",false,"Perform the calculation in serial - for debug purpose");
     545          71 :   keys.add("compulsory","DEVICEID","-1","Identifier of the GPU to be used");
     546          71 :   keys.addFlag("ABSOLUTE",false,"Absolute intensity: the intensities for each q-value are not normalised for the intensity at q=0.");
     547          71 :   keys.addFlag("ATOMISTIC",false,"Calculate SAXS for an atomistic model");
     548          71 :   keys.addFlag("MARTINI",false,"Calculate SAXS for a Martini model");
     549          71 :   keys.add("compulsory","MARTINI_FF","2","Martini form-factor generation to use with MARTINI: 2 (default, Martini 2.2 proteins and nucleic acids) or 3 (Martini 3 proteins)");
     550          71 :   keys.addFlag("ONEBEAD",false,"calculate SAXS for a single bead model");
     551          71 :   keys.add("compulsory","TEMPLATE","template.pdb","A PDB file is required for ONEBEAD mapping");
     552          71 :   keys.add("atoms","ATOMS","The atoms to be included in the calculation, e.g. the whole protein");
     553          71 :   keys.add("numbered","QVALUE","Selected scattering lengths in inverse angstroms are given as QVALUE1, QVALUE2, ...");
     554          71 :   keys.add("numbered","PARAMETERS","Used parameter Keywords like PARAMETERS1, PARAMETERS2. These are used to calculate the form factor for the \\f$i\\f$th atom/bead");
     555          71 :   keys.add("optional","PARAMETERSFILE","Read the PARAMETERS from a file");
     556          71 :   keys.add("compulsory","DEUTER_CONC","0.","Fraction of deuterated solvent");
     557          71 :   keys.add("compulsory","SOLVDENS","0.334","Density of the solvent to be used for the correction of atomistic form factors");
     558          71 :   keys.add("compulsory","SOLVATION_CORRECTION","0.0","Solvation layer electron density correction (ONEBEAD only)");
     559          71 :   keys.add("compulsory","SASA_CUTOFF","1.0","SASA value to consider a residue as exposed to the solvent (ONEBEAD only)");
     560          71 :   keys.add("numbered","EXPINT","Add an experimental value for each q value");
     561          71 :   keys.add("numbered","EXPERR","Add an experimental standard uncertainty for each q value. Values are divided by SCALE_EXPINT, exactly as EXPINT");
     562          71 :   keys.addFlag("CHI2",false,"Calculate the scale-optimized chi-squared between calculated and experimental intensities using EXPERR");
     563          71 :   keys.addFlag("CHI2ENSEMBLE",false,"Calculate chi-squared from arithmetic replica-averaged intensities for monitoring");
     564          71 :   keys.add("numbered","SIGMARES","Standard deviation of the resolution function for each q value, in inverse angstroms");
     565          71 :   keys.add("compulsory","N","10","Number of points in the resolution function integral");
     566          71 :   keys.add("compulsory","SOLVATION_STRIDE","10","Number of steps between every new residues solvation estimation via LCPO (ONEBEAD only)");
     567          71 :   keys.add("compulsory","SCALE_EXPINT","1.0","Scaling value for experimental data normalization");
     568         142 :   keys.addOutputComponent("q","default","scalar","The # SAXS of q");
     569         142 :   keys.addOutputComponent("exp","EXPINT","scalar","The # experimental intensity");
     570         142 :   keys.addOutputComponent("chi2","CHI2","scalar","Scale-optimized chi-squared against EXPINT using EXPERR");
     571         142 :   keys.addOutputComponent("chi2red","CHI2","scalar","Reduced scale-optimized chi-squared with N-1 degrees of freedom");
     572         142 :   keys.addOutputComponent("chi2scale","CHI2","scalar","Best-fit multiplicative scale applied to the calculated intensities");
     573         142 :   keys.addOutputComponent("chi2ensemble","CHI2ENSEMBLE","scalar","Chi-squared of replica-averaged intensities");
     574         142 :   keys.addOutputComponent("chi2ensemblered","CHI2ENSEMBLE","scalar","Reduced chi-squared of replica-averaged intensities");
     575         142 :   keys.addOutputComponent("chi2ensemblescale","CHI2ENSEMBLE","scalar","Best-fit scale for replica-averaged intensities");
     576          71 : }
     577             : 
     578          63 : SAXS::SAXS(const ActionOptions&ao):
     579             :   PLUMED_METAINF_INIT(ao),
     580          63 :   saxs(true),
     581          63 :   absolute(false),
     582          63 :   pbc(true),
     583          63 :   serial(false),
     584          63 :   onebead(false),
     585          63 :   chi2(false),
     586          63 :   chi2ensemble(false),
     587          63 :   chi2ensemble_replicas(1),
     588          63 :   isFirstStep(true) {
     589          63 :   if( getName().find("SAXS")!=std::string::npos) {
     590          42 :     saxs=true;
     591          21 :   } else if( getName().find("SANS")!=std::string::npos) {
     592          21 :     saxs=false;
     593             :   }
     594             : 
     595          63 :   std::vector<AtomNumber> atoms;
     596         126 :   parseAtomList("ATOMS",atoms);
     597          63 :   unsigned size = atoms.size();
     598          63 :   if(size == 0) {
     599           0 :     error("SAXS/SANS requires at least one atom");
     600             :   }
     601             : 
     602          63 :   parseFlag("SERIAL",serial);
     603             : 
     604          63 :   bool nopbc=!pbc;
     605          63 :   parseFlag("NOPBC",nopbc);
     606          63 :   pbc=!nopbc;
     607          63 :   if(pbc) {
     608          24 :     log.printf("  using periodic boundary conditions\n");
     609             :   } else {
     610          39 :     log.printf("  without periodic boundary conditions\n");
     611             :   }
     612             : 
     613             : 
     614             : 
     615          63 :   bool atomistic=false;
     616          63 :   parseFlag("ATOMISTIC",atomistic);
     617          63 :   if(atomistic) {
     618          12 :     log.printf("  using ATOMISTIC form factors\n");
     619             :   }
     620          63 :   bool martini=false;
     621          63 :   parseFlag("MARTINI",martini);
     622          63 :   unsigned martini_ff=2;
     623          63 :   parse("MARTINI_FF",martini_ff);
     624          63 :   if(martini) {
     625          16 :     if(martini_ff!=2&&martini_ff!=3) {
     626           0 :       error("MARTINI_FF must be 2 (Martini 2.2) or 3 (Martini 3)");
     627             :     }
     628          16 :     log.printf("  using MARTINI %u form factors\n",martini_ff);
     629          47 :   } else if(martini_ff!=2) {
     630           0 :     error("MARTINI_FF can only be used together with MARTINI");
     631             :   }
     632          63 :   onebead=false;
     633          63 :   parseFlag("ONEBEAD",onebead);
     634          63 :   if(onebead) {
     635          23 :     log.printf("  using ONEBEAD form factors\n");
     636             :   }
     637             :   bool fromfile=false;
     638             :   std::string parametersfile;
     639         126 :   parse("PARAMETERSFILE",parametersfile);
     640          63 :   if (parametersfile.length() != 0) {
     641             :     fromfile=true;
     642             :   }
     643             :   if(fromfile) {
     644           4 :     log.printf("  will read form factors from file\n");
     645             :   }
     646          63 :   parseFlag("ABSOLUTE",absolute);
     647             : 
     648          63 :   if(martini&&atomistic) {
     649           0 :     error("You cannot use MARTINI and ATOMISTIC at the same time");
     650             :   }
     651          63 :   if(martini&&onebead) {
     652           0 :     error("You cannot use MARTINI and ONEBEAD at the same time");
     653             :   }
     654          63 :   if(onebead&&atomistic) {
     655           0 :     error("You cannot use ONEBEAD and ATOMISTIC at the same time");
     656             :   }
     657          63 :   if((martini)&&(!saxs)) {
     658           0 :     error("MARTINI cannot be used with SANS");
     659             :   }
     660          63 :   if((fromfile)&&((atomistic)||(martini)||(onebead))) {
     661           0 :     error("You cannot read parameters from file and use ATOMISTIC/MARTINI/ONEBEAD");
     662             :   }
     663             : 
     664             :   unsigned ntarget=0;
     665             :   for(unsigned i=0;; ++i) {
     666             :     double t_list;
     667        1378 :     if( !parseNumbered( "QVALUE", i+1, t_list) ) {
     668             :       break;
     669             :     }
     670         626 :     if(t_list<=0.) {
     671           0 :       error("QVALUE cannot be less or equal to zero!\n");
     672             :     }
     673         626 :     if(onebead&&t_list>0.3) {
     674           0 :       error("ONEBEAD mapping QVALUE must be smaller or equal to 0.3");
     675             :     }
     676         626 :     q_list.push_back(t_list);
     677         626 :     ntarget++;
     678         626 :   }
     679             :   const unsigned numq = ntarget;
     680          63 :   if(numq==0) {
     681           0 :     error("At least one QVALUE must be specified");
     682             :   }
     683             : 
     684         689 :   for(unsigned i=0; i<numq; ++i) {
     685         626 :     if(q_list[i]==0.) {
     686           0 :       error("it is not possible to set q=0\n");
     687             :     }
     688         626 :     if(i>0&&q_list[i]<q_list[i-1]) {
     689           0 :       error("QVALUE must be in ascending order");
     690             :     }
     691         626 :     log.printf("  my q: %lf \n",q_list[i]);
     692             :   }
     693             : 
     694          63 :   rho = 0.334;
     695          63 :   parse("SOLVDENS", rho);
     696          63 :   log.printf("  Solvent density: %lf\n", rho);
     697             : 
     698          63 :   double scale_expint=1.;
     699          63 :   parse("SCALE_EXPINT",scale_expint);
     700          63 :   if(scale_expint<=0.) {
     701           0 :     error("SCALE_EXPINT must be greater than zero");
     702             :   }
     703          63 :   parseFlag("CHI2",chi2);
     704          63 :   parseFlag("CHI2ENSEMBLE",chi2ensemble);
     705          63 :   if(chi2ensemble && !chi2) {
     706           0 :     error("CHI2ENSEMBLE requires CHI2");
     707             :   }
     708          63 :   if(chi2ensemble) {
     709           0 :     chi2ensemble_replicas = comm.Get_rank()==0 ? multi_sim_comm.Get_size() : 0;
     710           0 :     comm.Sum(&chi2ensemble_replicas,1);
     711             :   }
     712             : 
     713          63 :   if((!atomistic&&absolute)||(absolute&&scale_expint!=1)) {
     714           0 :     error("ABSOLUTE can be used only combined with ATOMISTIC without SCALE_EXPINT");
     715             :   }
     716          63 :   if(atomistic) {
     717          24 :     log.printf("  Scale for intensities: %s\n", absolute ? "absolute" : "normalised");
     718             :   }
     719             : 
     720          63 :   double correction = 0.00;
     721          63 :   parse("SOLVATION_CORRECTION", correction);
     722          63 :   rho_corr=rho-correction;
     723          63 :   if(onebead) {
     724          23 :     log.printf("  Solvation density contribution: %lf\n", correction);
     725             :   }
     726          63 :   if((atomistic||martini||fromfile)&&(rho_corr!=rho)) {
     727           0 :     log.printf("  Solvation density contribution is taken into account in ONEBEAD only\n");
     728             :   }
     729             : 
     730          63 :   solv_stride = 10;
     731          63 :   parse("SOLVATION_STRIDE", solv_stride);
     732          63 :   if(solv_stride < 1.) {
     733           0 :     error("SOLVATION_STRIDE must be greater than 0");
     734             :   }
     735          63 :   if(onebead&&(rho_corr!=rho)) {
     736          15 :     log.printf("  SASA calculation stride: %u\n", solv_stride);
     737             :   }
     738             : 
     739          63 :   sasa_cutoff = 1.0;
     740          63 :   parse("SASA_CUTOFF", sasa_cutoff);
     741          63 :   if(sasa_cutoff <= 0.) {
     742           0 :     error("SASA_CUTOFF must be greater than 0");
     743             :   }
     744             : 
     745          63 :   deuter_conc = 0.;
     746          63 :   parse("DEUTER_CONC", deuter_conc);
     747          63 :   if ((deuter_conc)&&(fromfile)) {
     748           0 :     error("DEUTER_CONC cannot be used with PARAMETERSFILE");
     749             :   }
     750          63 :   if(deuter_conc < 0. || deuter_conc > 1.) {
     751           0 :     error("DEUTER_CONC must be in 0-1 range");
     752             :   }
     753          63 :   if ((atomistic||onebead)&&(!saxs)) {
     754          15 :     log.printf("  Solvent deuterium fraction: %lf/1.000000\n", deuter_conc);
     755             :   }
     756             : 
     757          63 :   PDB pdb;
     758          63 :   if(onebead) {
     759             :     std::string template_name;
     760          23 :     parse("TEMPLATE",template_name);
     761          23 :     log.printf("  Template for ONEBEAD mapping conversion: %s\n", template_name.c_str());
     762          23 :     if( !pdb.read(template_name,usingNaturalUnits(),1.) ) {
     763           0 :       plumed_merror("missing input file " + template_name);
     764             :     }
     765             :   }
     766             : 
     767             :   // preliminary mapping for onebead representation
     768          63 :   if(onebead) {
     769          23 :     LCPOparam.resize(size);
     770          23 :     nres = getOnebeadMapping(pdb, atoms);
     771          23 :     bead_sign.assign(nres, 1.);
     772          23 :     if(saxs) {
     773          12 :       Iq0_vac.resize(nres);
     774          12 :       Iq0_solv.resize(nres);
     775          12 :       Iq0_mix.resize(nres);
     776             :     } else { // SANS
     777          11 :       Iq0_vac_H.resize(nres);
     778          11 :       Iq0_solv_H.resize(nres);
     779          11 :       Iq0_mix_H.resize(nres);
     780          11 :       Iq0_vac_D.resize(nres);
     781          11 :       Iq0_mix_D.resize(nres);
     782             :     }
     783          23 :     atoi.resize(nres);
     784             :   } else {
     785          40 :     atoi.resize(size);
     786             :   }
     787             : 
     788          63 :   Iq0=0;
     789          63 :   std::vector<std::vector<long double> > FF_tmp;
     790          63 :   std::vector<std::vector<long double> > FF_tmp_vac;
     791          63 :   std::vector<std::vector<long double> > FF_tmp_mix;
     792          63 :   std::vector<std::vector<long double> > FF_tmp_solv;
     793             :   // SANS
     794          63 :   std::vector<std::vector<long double> > FF_tmp_vac_H;
     795          63 :   std::vector<std::vector<long double> > FF_tmp_mix_H;
     796          63 :   std::vector<std::vector<long double> > FF_tmp_solv_H;
     797          63 :   std::vector<std::vector<long double> > FF_tmp_vac_D;
     798          63 :   std::vector<std::vector<long double> > FF_tmp_mix_D;
     799          63 :   std::vector<std::vector<long double> > parameter_H;
     800          63 :   std::vector<std::vector<long double> > parameter_D;
     801             : 
     802          63 :   if(!atomistic&&!martini&&!onebead&&!fromfile) { // read PARAMETERS from PLUMED file
     803           8 :     if (saxs) {
     804             :       // read in parameter std::vector
     805           6 :       std::vector<std::vector<long double> > parameter;
     806           6 :       parameter.resize(size);
     807             :       ntarget=0;
     808          41 :       for(unsigned i=0; i<size; ++i) {
     809          70 :         if( !parseNumberedVector( "PARAMETERS", i+1, parameter[i]) ) {
     810             :           break;
     811             :         }
     812          35 :         ntarget++;
     813             :       }
     814           6 :       if( ntarget!=size ) {
     815           0 :         error("found wrong number of parameter std::vectors");
     816             :       }
     817           6 :       FF_tmp.resize(numq,std::vector<long double>(size));
     818          41 :       for(unsigned i=0; i<size; ++i) {
     819          35 :         atoi[i]=i;
     820         140 :         for(unsigned k=0; k<numq; ++k) {
     821         498 :           for(unsigned j=0; j<parameter[i].size(); ++j) {
     822         393 :             FF_tmp[k][i]+= parameter[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
     823             :           }
     824             :         }
     825             :       }
     826          41 :       for(unsigned i=0; i<size; ++i) {
     827          35 :         Iq0+=parameter[i][0];
     828             :       }
     829           6 :       Iq0 *= Iq0;
     830           6 :     } else { // SANS
     831           2 :       std::vector<long double> parameter;
     832           2 :       parameter.resize(size);
     833             :       ntarget=0;
     834           5 :       for(unsigned i=0; i<size; ++i) {
     835           6 :         if( !parseNumbered( "PARAMETERS", i+1, parameter[i]) ) {
     836             :           break;
     837             :         }
     838           3 :         ntarget++;
     839             :       }
     840           2 :       if( ntarget!=size ) {
     841           0 :         error("found wrong number of parameter std::vectors");
     842             :       }
     843           2 :       FF_tmp.resize(numq,std::vector<long double>(size));
     844           5 :       for(unsigned i=0; i<size; ++i) {
     845           3 :         atoi[i]=i;
     846          12 :         for(unsigned k=0; k<numq; ++k) {
     847           9 :           FF_tmp[k][i]+= parameter[i];
     848             :         }
     849             :       }
     850           5 :       for(unsigned i=0; i<size; ++i) {
     851           3 :         Iq0+=parameter[i];
     852             :       }
     853           2 :       Iq0 *= Iq0;
     854             :     }
     855          51 :   } else if (fromfile) { // read PARAMETERS from user-provided file
     856           4 :     log.printf("  Reading PARAMETERS from file: %s\n", parametersfile.c_str());
     857           4 :     if (saxs) {
     858           0 :       FF_tmp.resize(numq,std::vector<long double>(size));
     859           0 :       std::vector<std::vector<long double> > parameter;
     860           0 :       parameter.resize(size);
     861             : 
     862           0 :       IFile ifile;
     863           0 :       ifile.open(parametersfile);
     864             :       std::string line;
     865             : 
     866             :       ntarget=0;
     867           0 :       while(ifile.getline(line)) {
     868           0 :         Tools::ltrim(line);
     869           0 :         Tools::trimComments(line);
     870           0 :         if (line.empty()) {
     871           0 :           continue;
     872             :         }
     873           0 :         if (ntarget >= size) {
     874           0 :           error("PARAMETERSFILE has more PARAMETERS than there are scattering centers");
     875             :         }
     876             :         std::string num;
     877           0 :         Tools::convert(ntarget+1,num);
     878           0 :         std::vector<std::string> lineread{line};
     879           0 :         if (!Tools::parseVector(lineread, "PARAMETERS"+num, parameter[ntarget], -1)) {
     880           0 :           error("Missing PARAMETERS or PARAMETERS not sorted");
     881             :         }
     882             :         ntarget++;
     883           0 :       }
     884           0 :       if( ntarget!=size ) {
     885           0 :         error("found wrong number of PARAMETERS in file");
     886             :       }
     887             : 
     888           0 :       for(unsigned i=0; i<size; ++i) {
     889           0 :         atoi[i]=i;
     890           0 :         for(unsigned k=0; k<numq; ++k) {
     891           0 :           for(unsigned j=0; j<parameter[i].size(); ++j) {
     892           0 :             FF_tmp[k][i]+= parameter[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
     893             :           }
     894             :         }
     895             :       }
     896           0 :       for(unsigned i=0; i<size; ++i) {
     897           0 :         Iq0+=parameter[i][0];
     898             :       }
     899           0 :       Iq0 *= Iq0;
     900           0 :     } else { // SANS
     901           4 :       FF_tmp.resize(numq,std::vector<long double>(size));
     902             : 
     903           4 :       IFile ifile;
     904           4 :       ifile.open(parametersfile);
     905             :       std::string line;
     906             : 
     907             :       ntarget=0;
     908        1084 :       while(ifile.getline(line)) {
     909        1080 :         Tools::ltrim(line);
     910        1080 :         Tools::trimComments(line);
     911        1080 :         if (line.empty()) {
     912           0 :           continue;
     913             :         }
     914        1080 :         if (ntarget >= size) {
     915           0 :           error("PARAMETERSFILE has more PARAMETERS than there are scattering centers");
     916             :         }
     917             :         std::string num;
     918        1080 :         Tools::convert(ntarget+1,num);
     919        2160 :         std::vector<std::string> lineread{line};
     920             :         long double scatlen;
     921        1080 :         atoi[ntarget]=ntarget;
     922        2160 :         if (!Tools::parse(lineread, "PARAMETERS"+num, scatlen, -1)) {
     923           0 :           error("Missing PARAMETERS or PARAMETERS not sorted");
     924             :         }
     925       17280 :         for(unsigned k=0; k<numq; ++k) {
     926       16200 :           FF_tmp[k][ntarget] = scatlen;
     927             :         }
     928             :         ntarget++;
     929        1080 :       }
     930           4 :       if( ntarget!=size ) {
     931           0 :         error("found wrong number of PARAMETERS in file");
     932             :       }
     933        1084 :       for(unsigned i=0; i<size; ++i) {
     934        1080 :         Iq0+=FF_tmp[0][i];
     935             :       }
     936           4 :       Iq0 *= Iq0;
     937           4 :     }
     938          51 :   } else if(onebead) {
     939          23 :     if(saxs) {
     940             :       // read built-in ONEBEAD parameters
     941          12 :       FF_tmp_vac.resize(numq,std::vector<long double>(NONEBEAD));
     942          12 :       FF_tmp_mix.resize(numq,std::vector<long double>(NONEBEAD));
     943          12 :       FF_tmp_solv.resize(numq,std::vector<long double>(NONEBEAD));
     944          12 :       std::vector<std::vector<long double> > parameter_vac(NONEBEAD);
     945          12 :       std::vector<std::vector<long double> > parameter_mix(NONEBEAD);
     946          12 :       std::vector<std::vector<long double> > parameter_solv(NONEBEAD);
     947          12 :       getOnebeadparam(pdb, atoms, parameter_vac, parameter_mix, parameter_solv, residue_atom);
     948             :       // ion bead types carry no polynomial coefficients; insert a q=0 placeholder so the
     949             :       // expansion and Iq0 loops below stay valid. Their ion entries are overwritten with
     950             :       // analytic values by getOnebeadIonparam_saxs just afterwards.
     951         120 :       for(unsigned s=OB_NA; s<NONEBEAD; ++s) {
     952         108 :         parameter_vac[s].assign(1, 0.0);
     953         108 :         parameter_mix[s].assign(1, 0.0);
     954         108 :         parameter_solv[s].assign(1, 0.0);
     955             :       }
     956        2375 :       for(unsigned i=0; i<nres; ++i) {
     957        2363 :         if(atoi[i] >= NONEBEAD || parameter_vac[atoi[i]].empty() || parameter_mix[atoi[i]].empty() || parameter_solv[atoi[i]].empty()) {
     958           0 :           error("ONEBEAD form-factor parameters are not available for bead type " + std::to_string(atoi[i]) + " in this build");
     959             :         }
     960             :       }
     961         636 :       for(unsigned i=0; i<NONEBEAD; ++i) {
     962        5928 :         for(unsigned k=0; k<numq; ++k) {
     963       31212 :           for(unsigned j=0; j<parameter_vac[i].size(); ++j) {
     964       25908 :             FF_tmp_vac[k][i]+= parameter_vac[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
     965             :           }
     966       31212 :           for(unsigned j=0; j<parameter_mix[i].size(); ++j) {
     967       25908 :             FF_tmp_mix[k][i]+= parameter_mix[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
     968             :           }
     969       31212 :           for(unsigned j=0; j<parameter_solv[i].size(); ++j) {
     970       25908 :             FF_tmp_solv[k][i]+= parameter_solv[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
     971             :           }
     972             :         }
     973             :       }
     974        2375 :       for(unsigned i=0; i<nres; ++i) {
     975        2363 :         Iq0_vac[i]=parameter_vac[atoi[i]][0];
     976        2363 :         Iq0_mix[i]=parameter_mix[atoi[i]][0];
     977        2363 :         Iq0_solv[i]=parameter_solv[atoi[i]][0];
     978             :       }
     979             :       // overwrite ion bead types with analytic Cromer-Mann + excluded-volume terms
     980          12 :       getOnebeadIonparam_saxs(FF_tmp_vac, FF_tmp_mix, FF_tmp_solv, Iq0_vac, Iq0_mix, Iq0_solv);
     981          12 :     } else { // SANS
     982             :       // read built-in ONEBEAD parameters
     983          11 :       FF_tmp_vac_H.resize(numq,std::vector<long double>(NONEBEAD));
     984          11 :       FF_tmp_mix_H.resize(numq,std::vector<long double>(NONEBEAD));
     985          11 :       FF_tmp_solv_H.resize(numq,std::vector<long double>(NONEBEAD));
     986          11 :       FF_tmp_vac_D.resize(numq,std::vector<long double>(NONEBEAD));
     987          11 :       FF_tmp_mix_D.resize(numq,std::vector<long double>(NONEBEAD));
     988          11 :       std::vector<std::vector<long double> > parameter_vac_H(NONEBEAD);
     989          11 :       std::vector<std::vector<long double> > parameter_mix_H(NONEBEAD);
     990          11 :       std::vector<std::vector<long double> > parameter_solv_H(NONEBEAD);
     991          11 :       std::vector<std::vector<long double> > parameter_vac_D(NONEBEAD);
     992          11 :       std::vector<std::vector<long double> > parameter_mix_D(NONEBEAD);
     993          11 :       getOnebeadparam_sansH(pdb, atoms, parameter_vac_H, parameter_mix_H, parameter_solv_H);
     994          11 :       getOnebeadparam_sansD(pdb, atoms, parameter_vac_D, parameter_mix_D);
     995             :       // q=0 placeholders for ion bead types (overwritten by getOnebeadIonparam_sans below)
     996         110 :       for(unsigned s=OB_NA; s<NONEBEAD; ++s) {
     997          99 :         parameter_vac_H[s].assign(1, 0.0);
     998          99 :         parameter_mix_H[s].assign(1, 0.0);
     999          99 :         parameter_solv_H[s].assign(1, 0.0);
    1000          99 :         parameter_vac_D[s].assign(1, 0.0);
    1001          99 :         parameter_mix_D[s].assign(1, 0.0);
    1002             :       }
    1003        1942 :       for(unsigned i=0; i<nres; ++i) {
    1004        1931 :         if(atoi[i] >= NONEBEAD || parameter_vac_H[atoi[i]].empty() || parameter_mix_H[atoi[i]].empty() || parameter_solv_H[atoi[i]].empty() ||
    1005        3862 :             parameter_vac_D[atoi[i]].empty() || parameter_mix_D[atoi[i]].empty()) {
    1006           0 :           error("ONEBEAD form-factor parameters are not available for bead type " + std::to_string(atoi[i]) + " in this build");
    1007             :         }
    1008             :       }
    1009         583 :       for(unsigned i=0; i<NONEBEAD; ++i) {
    1010        5356 :         for(unsigned k=0; k<numq; ++k) {
    1011       28152 :           for(unsigned j=0; j<parameter_vac_H[i].size(); ++j) { // same number of parameters
    1012       23368 :             FF_tmp_vac_H[k][i]+= parameter_vac_H[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
    1013       23368 :             FF_tmp_vac_D[k][i]+= parameter_vac_D[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
    1014             :           }
    1015       28152 :           for(unsigned j=0; j<parameter_mix_H[i].size(); ++j) {
    1016       23368 :             FF_tmp_mix_H[k][i]+= parameter_mix_H[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
    1017       23368 :             FF_tmp_mix_D[k][i]+= parameter_mix_D[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
    1018             :           }
    1019       28152 :           for(unsigned j=0; j<parameter_solv_H[i].size(); ++j) {
    1020       23368 :             FF_tmp_solv_H[k][i]+= parameter_solv_H[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
    1021             :           }
    1022             :         }
    1023             :       }
    1024        1942 :       for(unsigned i=0; i<nres; ++i) {
    1025        1931 :         Iq0_vac_H[i]=parameter_vac_H[atoi[i]][0];
    1026        1931 :         Iq0_mix_H[i]=parameter_mix_H[atoi[i]][0];
    1027        1931 :         Iq0_solv_H[i]=parameter_solv_H[atoi[i]][0];
    1028        1931 :         Iq0_vac_D[i]=parameter_vac_D[atoi[i]][0];
    1029        1931 :         Iq0_mix_D[i]=parameter_mix_D[atoi[i]][0];
    1030             :       }
    1031             :       // overwrite ion bead types with analytic terms (neutron b + excluded volume)
    1032          11 :       getOnebeadIonparam_sans(FF_tmp_vac_H, FF_tmp_mix_H, FF_tmp_solv_H, FF_tmp_vac_D, FF_tmp_mix_D,
    1033          11 :                               Iq0_vac_H, Iq0_mix_H, Iq0_solv_H, Iq0_vac_D, Iq0_mix_D);
    1034          11 :     }
    1035          28 :   } else if(martini) {
    1036             :     // read built-in MARTINI parameters
    1037          16 :     FF_tmp.resize(numq,std::vector<long double>(NMARTINI));
    1038          16 :     std::vector<std::vector<long double> > parameter;
    1039          16 :     parameter.resize(NMARTINI);
    1040          16 :     if(martini_ff==3) {
    1041           4 :       getMartiniFFparam_v3(atoms, parameter);
    1042             :     } else {
    1043          12 :       getMartiniFFparam(atoms, parameter);
    1044             :     }
    1045        2192 :     for(unsigned i=0; i<NMARTINI; ++i) {
    1046       34816 :       for(unsigned k=0; k<numq; ++k) {
    1047      222060 :         for(unsigned j=0; j<parameter[i].size(); ++j) {
    1048      189420 :           FF_tmp[k][i]+= parameter[i][j]*std::pow(static_cast<long double>(q_list[k]),j);
    1049             :         }
    1050             :       }
    1051             :     }
    1052       11044 :     for(unsigned i=0; i<size; ++i) {
    1053       11028 :       Iq0+=parameter[atoi[i]][0];
    1054             :     }
    1055          16 :     Iq0 *= Iq0;
    1056          28 :   } else if(atomistic) {
    1057          12 :     FF_tmp.resize(numq,std::vector<long double>(NTT));
    1058          12 :     if(saxs) {
    1059           8 :       Iq0=calculateAFF(atoms, FF_tmp, rho);
    1060             :     } else {
    1061           4 :       Iq0=calculateAFFsans(atoms, FF_tmp, deuter_conc);
    1062             :     }
    1063          12 :     Iq0 *= Iq0;
    1064             :   }
    1065             : 
    1066             : 
    1067          63 :   expint.resize( numq );
    1068             :   ntarget=0;
    1069         357 :   for(unsigned i=0; i<numq; ++i) {
    1070         662 :     if( !parseNumbered( "EXPINT", i+1, expint[i] ) ) {
    1071             :       break;
    1072             :     }
    1073         294 :     ntarget++;
    1074             :   }
    1075          63 :   std::transform(expint.begin(), expint.begin() + ntarget, expint.begin(), [scale_expint](double x) {
    1076         294 :     return x / scale_expint;
    1077             :   });
    1078             :   bool exp=false;
    1079          63 :   if(ntarget!=numq && ntarget!=0) {
    1080           0 :     error("found wrong number of EXPINT values");
    1081             :   }
    1082          63 :   if(ntarget==numq) {
    1083             :     exp=true;
    1084             :   }
    1085          63 :   if(getDoScore()&&!exp) {
    1086           0 :     error("with DOSCORE you need to set the EXPINT values");
    1087             :   }
    1088             : 
    1089          63 :   experr.resize( numq );
    1090             :   ntarget=0;
    1091          75 :   for(unsigned i=0; i<numq; ++i) {
    1092         142 :     if( !parseNumbered( "EXPERR", i+1, experr[i] ) ) {
    1093             :       break;
    1094             :     }
    1095          12 :     ntarget++;
    1096             :   }
    1097          63 :   std::transform(experr.begin(), experr.begin() + ntarget, experr.begin(), [scale_expint](double x) {
    1098          12 :     return x / scale_expint;
    1099             :   });
    1100             :   bool experr_complete=false;
    1101          63 :   if(ntarget!=numq && ntarget!=0) {
    1102           0 :     error("found wrong number of EXPERR values");
    1103             :   }
    1104          63 :   if(ntarget==numq) {
    1105             :     experr_complete=true;
    1106          16 :     for(unsigned i=0; i<numq; ++i) {
    1107          12 :       if(!std::isfinite(experr[i]) || experr[i]<=0.) {
    1108           0 :         error("EXPERR values must be finite and greater than zero");
    1109             :       }
    1110             :     }
    1111             :   }
    1112          63 :   if(chi2) {
    1113           4 :     if(absolute) {
    1114           0 :       error("CHI2 cannot be combined with ABSOLUTE in this first implementation because CHI2 fits a multiplicative intensity scale");
    1115             :     }
    1116           4 :     if(numq<2) {
    1117           0 :       error("CHI2 requires at least two QVALUE values because one multiplicative scale is fitted");
    1118             :     }
    1119           4 :     if(!exp) {
    1120           0 :       error("CHI2 requires one EXPINT value for every QVALUE");
    1121             :     }
    1122           4 :     if(!experr_complete) {
    1123           0 :       error("CHI2 requires one EXPERR value for every QVALUE");
    1124             :     }
    1125          16 :     for(unsigned i=0; i<numq; ++i) {
    1126          12 :       if(!std::isfinite(expint[i])) {
    1127           0 :         error("EXPINT values must be finite when using CHI2");
    1128             :       }
    1129             :     }
    1130             :   }
    1131             : 
    1132          63 :   sigma_res.resize( numq );
    1133          63 :   resolution=false;
    1134             :   ntarget=0;
    1135         183 :   for(unsigned i=0; i<numq; ++i) {
    1136         350 :     if( !parseNumbered( "SIGMARES", i+1, sigma_res[i] ) ) {
    1137             :       break;
    1138             :     }
    1139         120 :     ntarget++;
    1140             :   }
    1141          63 :   if(ntarget!=numq && ntarget!=0) {
    1142           0 :     error("found wrong number of SIGMARES values");
    1143             :   }
    1144          63 :   if(ntarget==numq) {
    1145           8 :     resolution=true;
    1146           8 :     if(numq==1) {
    1147           0 :       error("Resolution function requires at least two QVALUE values");
    1148             :     }
    1149         128 :     for(unsigned i=0; i<numq; ++i) {
    1150         120 :       if(sigma_res[i]<=0.) {
    1151           0 :         error("SIGMARES values must be greater than zero");
    1152             :       }
    1153         120 :       if(i>0&&q_list[i]<=q_list[i-1]) {
    1154           0 :         error("QVALUE values must be strictly increasing when using SIGMARES");
    1155             :       }
    1156             :     }
    1157             :   }
    1158             : 
    1159          63 :   if(chi2 && resolution) {
    1160           0 :     error("CHI2 with SIGMARES is not enabled in the first validation stage; resolution-smeared CHI2 will be tested separately");
    1161             :   }
    1162             : 
    1163          63 :   Nj = 10;
    1164          63 :   parse("N", Nj);
    1165          63 :   if (Nj < 2) {
    1166           0 :     error("N should be larger than 1");
    1167             :   }
    1168          63 :   if (resolution) {
    1169           8 :     log.printf("  Resolution function with N: %d\n", Nj);
    1170             :   }
    1171             : 
    1172          63 :   FF_rank.resize(numq);
    1173             :   unsigned n_atom_types;
    1174          63 :   if(onebead) {
    1175          23 :     FF_value.resize(nres,std::vector<double>(numq));
    1176             :     n_atom_types=NONEBEAD;
    1177          23 :     if(saxs) {
    1178          12 :       FF_value_vacuum.resize(n_atom_types,std::vector<double>(numq));
    1179          12 :       FF_value_solv.resize(n_atom_types,std::vector<double>(numq));
    1180          24 :       FF_value_mixed.resize(n_atom_types,std::vector<double>(numq));
    1181             :     } else {
    1182          11 :       FF_value_vacuum_H.resize(n_atom_types,std::vector<double>(numq));
    1183          11 :       FF_value_solv_H.resize(n_atom_types,std::vector<double>(numq));
    1184          11 :       FF_value_mixed_H.resize(n_atom_types,std::vector<double>(numq));
    1185          11 :       FF_value_vacuum_D.resize(n_atom_types,std::vector<double>(numq));
    1186          22 :       FF_value_mixed_D.resize(n_atom_types,std::vector<double>(numq));
    1187             :     }
    1188             :   } else {
    1189          80 :     FF_value.resize(size,std::vector<double>(numq));
    1190             :   }
    1191         689 :   for(unsigned k=0; k<numq; ++k) {
    1192         626 :     if(!onebead) {
    1193      562794 :       for(unsigned i=0; i<size; ++i) {
    1194      562362 :         FF_value[i][k] = static_cast<double>(FF_tmp[k][atoi[i]])/(std::sqrt(Iq0));
    1195             :       }
    1196      562794 :       for(unsigned i=0; i<size; ++i) {
    1197      562362 :         FF_rank[k] += FF_value[i][k]*FF_value[i][k];
    1198             :       }
    1199             :     } else {
    1200         194 :       if(saxs) {
    1201        5406 :         for(unsigned i=0; i<n_atom_types; ++i) {
    1202        5304 :           FF_value_vacuum[i][k] = static_cast<double>(FF_tmp_vac[k][i]);
    1203        5304 :           FF_value_mixed[i][k] = static_cast<double>(FF_tmp_mix[k][i]);
    1204        5304 :           FF_value_solv[i][k] = static_cast<double>(FF_tmp_solv[k][i]);
    1205             :         }
    1206             :       } else { // SANS
    1207        4876 :         for(unsigned i=0; i<n_atom_types; ++i) {
    1208        4784 :           FF_value_vacuum_H[i][k] = static_cast<double>(FF_tmp_vac_H[k][i]);
    1209        4784 :           FF_value_mixed_H[i][k] = static_cast<double>(FF_tmp_mix_H[k][i]);
    1210        4784 :           FF_value_solv_H[i][k] = static_cast<double>(FF_tmp_solv_H[k][i]);
    1211        4784 :           FF_value_vacuum_D[i][k] = static_cast<double>(FF_tmp_vac_D[k][i]);
    1212        4784 :           FF_value_mixed_D[i][k] = static_cast<double>(FF_tmp_mix_D[k][i]);
    1213             :         }
    1214             :       }
    1215             :     }
    1216             :   }
    1217             : 
    1218             : 
    1219          63 :   if(!getDoScore()) {
    1220         577 :     for(unsigned i=0; i<numq; ++i) {
    1221             :       std::string num;
    1222         524 :       Tools::convert(i,num);
    1223        1048 :       addComponentWithDerivatives("q-"+num);
    1224        1048 :       componentIsNotPeriodic("q-"+num);
    1225             :     }
    1226          53 :     if(exp) {
    1227         208 :       for(unsigned i=0; i<numq; ++i) {
    1228             :         std::string num;
    1229         192 :         Tools::convert(i,num);
    1230         384 :         addComponent("exp-"+num);
    1231         192 :         componentIsNotPeriodic("exp-"+num);
    1232         192 :         Value* comp=getPntrToComponent("exp-"+num);
    1233         192 :         comp->set(expint[i]);
    1234             :       }
    1235             :     }
    1236          53 :     if(chi2) {
    1237           8 :       addComponentWithDerivatives("chi2");
    1238           8 :       componentIsNotPeriodic("chi2");
    1239           8 :       addComponentWithDerivatives("chi2red");
    1240           8 :       componentIsNotPeriodic("chi2red");
    1241           8 :       addComponent("chi2scale");
    1242           8 :       componentIsNotPeriodic("chi2scale");
    1243             :     }
    1244             :   } else {
    1245         112 :     for(unsigned i=0; i<numq; ++i) {
    1246             :       std::string num;
    1247         102 :       Tools::convert(i,num);
    1248         204 :       addComponent("q-"+num);
    1249         204 :       componentIsNotPeriodic("q-"+num);
    1250             :     }
    1251         112 :     for(unsigned i=0; i<numq; ++i) {
    1252             :       std::string num;
    1253         102 :       Tools::convert(i,num);
    1254         204 :       addComponent("exp-"+num);
    1255         102 :       componentIsNotPeriodic("exp-"+num);
    1256         102 :       Value* comp=getPntrToComponent("exp-"+num);
    1257         102 :       comp->set(expint[i]);
    1258             :     }
    1259          10 :     if(chi2) {
    1260           0 :       addComponent("chi2");
    1261           0 :       componentIsNotPeriodic("chi2");
    1262           0 :       addComponent("chi2red");
    1263           0 :       componentIsNotPeriodic("chi2red");
    1264           0 :       addComponent("chi2scale");
    1265           0 :       componentIsNotPeriodic("chi2scale");
    1266             :     }
    1267             :   }
    1268          63 :   if(chi2ensemble) {
    1269           0 :     addComponent("chi2ensemble");
    1270           0 :     componentIsNotPeriodic("chi2ensemble");
    1271           0 :     addComponent("chi2ensemblered");
    1272           0 :     componentIsNotPeriodic("chi2ensemblered");
    1273           0 :     addComponent("chi2ensemblescale");
    1274           0 :     componentIsNotPeriodic("chi2ensemblescale");
    1275             :   }
    1276             : 
    1277             :   // convert units to nm^-1
    1278         689 :   for(unsigned i=0; i<numq; ++i) {
    1279         626 :     q_list[i]=q_list[i]*10.0;    // factor 10 to convert from A^-1 to nm^-1
    1280         626 :     if (resolution) {
    1281         120 :       sigma_res[i]=sigma_res[i]*10.0;
    1282             :     }
    1283             :   }
    1284             : 
    1285             :   // q values as a uniform grid plus small deviations, used by sincos_q
    1286          63 :   qref0_ = q_list[0];
    1287          63 :   qref_dq_ = (numq>1) ? (q_list[numq-1]-q_list[0])/static_cast<double>(numq-1) : 0.0;
    1288          63 :   qref_maxeps_ = 0.0;
    1289          63 :   qref_eps_.resize(numq);
    1290         689 :   for(unsigned k=0; k<numq; ++k) {
    1291         626 :     qref_eps_[k] = q_list[k]-(qref0_+k*qref_dq_);
    1292         759 :     qref_maxeps_ = std::max(qref_maxeps_, std::fabs(qref_eps_[k]));
    1293             :   }
    1294             : 
    1295             :   // the deuteration of the exposed residues is drawn by the first rank and broadcast
    1296          63 :   random_deut_.setSeed(-1);
    1297             : 
    1298             :   // compute resolution function after converting units
    1299          63 :   if (resolution) {
    1300           8 :     qj_list.resize(numq, std::vector<double>(Nj));
    1301           8 :     Rij.resize(numq, std::vector<double>(Nj));
    1302             :     // compute Rij and qj_list
    1303           8 :     resolution_function();
    1304             :     // matrix of the smearing (spline interpolation and integral with the resolution function)
    1305           8 :     smear_.assign(static_cast<std::size_t>(numq)*numq,0.0);
    1306         128 :     for(unsigned l=0; l<numq; ++l) {
    1307         120 :       std::vector<double> unit(numq,0.0);
    1308         120 :       unit[l] = 1.0;
    1309         120 :       std::vector<SplineCoeffs> coeffs = spline_coeffs(q_list, unit);
    1310        1920 :       for(unsigned k=0; k<numq; ++k) {
    1311        1800 :         const double dq = qj_list[k][1] - qj_list[k][0];
    1312       20700 :         for(unsigned j=0; j<Nj; ++j) {
    1313       18900 :           smear_[k*numq+l] += Rij[k][j] * interpolation(coeffs, qj_list[k][j]) * dq;
    1314             :         }
    1315             :       }
    1316             :     }
    1317             :   }
    1318             : 
    1319          63 :   log<<"  Bibliography ";
    1320          63 :   if(onebead) {
    1321          46 :     log<<plumed.cite("Ballabio, Paissoni, Bollati, de Rosa, Capelli, Camilloni, J. Chem. Theory Comput., 19, 22, 8401-8413 (2023)");
    1322             :   }
    1323          63 :   if(martini) {
    1324          16 :     log<<plumed.cite("Niebling, Björling, Westenhoff, J. Appl. Crystallogr., 47, 1190–1198 (2014)");
    1325          16 :     log<<plumed.cite("Paissoni, Jussupow, Camilloni, J. Appl. Crystallogr., 52, 394-402 (2019)");
    1326          16 :     if(martini_ff==3) {
    1327           8 :       log<<plumed.cite("Vinterbladh, Vuillemot, Grudinin, Lund, ChemRxiv, doi:10.26434/chemrxiv.15006205/v1 (2026)");
    1328             :     }
    1329             :   }
    1330          63 :   if(atomistic) {
    1331          12 :     log<<plumed.cite("Fraser, MacRae, Suzuki, J. Appl. Crystallogr., 11, 693–694 (1978)");
    1332          24 :     log<<plumed.cite("Brown, Fox, Maslen, O'Keefe, Willis, International Tables for Crystallography, C, 554–595 (International Union of Crystallography, 2006)");
    1333             :   }
    1334          63 :   if(resolution) {
    1335          16 :     log<<plumed.cite("Pedersen, Posselt, Mortensen, J. Appl. Crystallogr., 23, 321–333 (1990)");
    1336             :   }
    1337             : 
    1338             :   // ion parameters: cite the sources only if any ion is actually present in the system
    1339             :   bool ions_present=false;
    1340          63 :   if(onebead) {
    1341        4314 :     for(unsigned i=0; i<nres; ++i) {
    1342        4294 :       if(atoi[i]>=OB_NA && atoi[i]<NONEBEAD) {
    1343             :         ions_present=true;
    1344             :         break;
    1345             :       }
    1346             :     }
    1347          40 :   } else if(atomistic) {
    1348       42304 :     for(unsigned i=0; i<atoi.size(); ++i) {
    1349       42292 :       if(atoi[i]>=AFF_NA && atoi[i]<NTT) {
    1350             :         ions_present=true;
    1351             :         break;
    1352             :       }
    1353             :     }
    1354             :   }
    1355          35 :   if(ions_present) {
    1356           3 :     log<<plumed.cite("Cromer, Mann, Acta Crystallogr. A, 24, 321-324 (1968)");
    1357           3 :     log<<plumed.cite("Brown, Fox, Maslen, O'Keefe, Willis, International Tables for Crystallography, C, 554–595 (International Union of Crystallography, 2006)");
    1358           3 :     log<<plumed.cite("Shannon, Acta Crystallogr. A, 32, 751-767 (1976)");
    1359           3 :     if(!saxs) {
    1360           4 :       log<<plumed.cite("Sears, Neutron News, 3, 26-37 (1992)");
    1361             :     }
    1362             :   }
    1363             : 
    1364          63 :   log<< plumed.cite("Bonomi, Camilloni, Bioinformatics, 33, 3999 (2017)");
    1365          63 :   log<<"\n";
    1366             : 
    1367          63 :   requestAtoms(atoms, false);
    1368             : 
    1369          63 :   if(getDoScore()) {
    1370          10 :     setParameters(expint);
    1371          10 :     Initialise(numq);
    1372             :   }
    1373          63 :   setDerivatives();
    1374          63 :   checkRead();
    1375        1206 : }
    1376             : 
    1377             : // calculates SASA neighbor list
    1378          20 : void SAXS::calcNlist(std::vector<std::vector<int> > &Nlist) {
    1379             :   // pairs of atoms with LCPO parameters closer than the sum of their radii,
    1380             :   // found with a cell list; each list is sorted (as with the all-pairs loop)
    1381             :   const unsigned natoms = getNumberOfAtoms();
    1382          20 :   std::vector<unsigned> lcpo_atoms;
    1383          20 :   double maxr = 0.0;
    1384       66767 :   for(unsigned i = 0; i < natoms; ++i) {
    1385       66747 :     if (LCPOparam[i].size()>0) {
    1386       31125 :       lcpo_atoms.push_back(i);
    1387       31125 :       maxr = std::max(maxr, LCPOparam[i][0]);
    1388             :     }
    1389             :   }
    1390          20 :   if(lcpo_atoms.empty()) {
    1391             :     return;
    1392             :   }
    1393             :   // cell size (nm) not smaller than the largest cutoff (radii are in Angstrom)
    1394          20 :   const double rc = std::max(2.0*maxr/10., 1.e-6);
    1395          20 :   Vector lo = getPosition(lcpo_atoms[0]), hi = lo;
    1396       31145 :   for(const auto i : lcpo_atoms) {
    1397      124500 :     for(unsigned k=0; k<3; ++k) {
    1398       93977 :       lo[k] = std::min(lo[k], getPosition(i)[k]);
    1399       93375 :       hi[k] = std::max(hi[k], getPosition(i)[k]);
    1400             :     }
    1401             :   }
    1402             :   int ncell[3];
    1403             :   double csize[3];
    1404          80 :   for(unsigned k=0; k<3; ++k) {
    1405          60 :     const double len = hi[k]-lo[k];
    1406         120 :     ncell[k] = std::max(1, std::min(200, static_cast<int>(std::floor(len/rc))));
    1407          63 :     csize[k] = std::max(len/static_cast<double>(ncell[k]), rc);
    1408             :   }
    1409       62250 :   auto cell=[&](const unsigned i, int *c) {
    1410      249000 :     for(unsigned k=0; k<3; ++k) {
    1411      546102 :       c[k] = std::min(ncell[k]-1, std::max(0, static_cast<int>(std::floor((getPosition(i)[k]-lo[k])/csize[k]))));
    1412             :     }
    1413       62270 :   };
    1414          20 :   const unsigned ncells = ncell[0]*ncell[1]*ncell[2];
    1415          20 :   std::vector<unsigned> cell_start(ncells+1,0), cell_atoms(lcpo_atoms.size()), atom_cell(lcpo_atoms.size());
    1416       31145 :   for(unsigned a=0; a<lcpo_atoms.size(); ++a) {
    1417             :     int c[3];
    1418       31125 :     cell(lcpo_atoms[a],c);
    1419       31125 :     atom_cell[a] = (c[0]*ncell[1]+c[1])*ncell[2]+c[2];
    1420       31125 :     cell_start[atom_cell[a]+1]++;
    1421             :   }
    1422        8049 :   for(unsigned ic=0; ic<ncells; ++ic) {
    1423        8029 :     cell_start[ic+1] += cell_start[ic];
    1424             :   }
    1425             :   {
    1426          20 :     std::vector<unsigned> fill(cell_start.begin(), cell_start.end()-1);
    1427       31145 :     for(unsigned a=0; a<lcpo_atoms.size(); ++a) {
    1428       31125 :       cell_atoms[fill[atom_cell[a]]++] = lcpo_atoms[a];
    1429             :     }
    1430          20 :   }
    1431          20 :   #pragma omp parallel for num_threads(OpenMP::getNumThreads()) schedule(dynamic,64)
    1432             :   for(unsigned a=0; a<lcpo_atoms.size(); ++a) {
    1433             :     const unsigned i = lcpo_atoms[a];
    1434             :     int c[3];
    1435             :     cell(i,c);
    1436             :     for(int i0=std::max(0,c[0]-1); i0<=std::min(ncell[0]-1,c[0]+1); ++i0) {
    1437             :       for(int i1=std::max(0,c[1]-1); i1<=std::min(ncell[1]-1,c[1]+1); ++i1) {
    1438             :         for(int i2=std::max(0,c[2]-1); i2<=std::min(ncell[2]-1,c[2]+1); ++i2) {
    1439             :           const unsigned ic = (i0*ncell[1]+i1)*ncell[2]+i2;
    1440             :           for(unsigned jj=cell_start[ic]; jj<cell_start[ic+1]; ++jj) {
    1441             :             const unsigned j = cell_atoms[jj];
    1442             :             if(j==i) {
    1443             :               continue;
    1444             :             }
    1445             :             // same expression as in the all-pairs loop (j<i), so that the result is the same
    1446             :             const double Delta_ij_mod = (j<i) ? modulo(delta(getPosition(i), getPosition(j)))*10. : modulo(delta(getPosition(j), getPosition(i)))*10.;
    1447             :             const double overlapD = (j<i) ? LCPOparam[i][0]+LCPOparam[j][0] : LCPOparam[j][0]+LCPOparam[i][0];
    1448             :             if(Delta_ij_mod < overlapD) {
    1449             :               Nlist[i].push_back(j);
    1450             :             }
    1451             :           }
    1452             :         }
    1453             :       }
    1454             :     }
    1455             :     std::sort(Nlist[i].begin(), Nlist[i].end());
    1456             :   }
    1457          20 : }
    1458             : 
    1459             : // calculates SASA according to LCPO algorithm
    1460          20 : void SAXS::sasa_calculate(std::vector<bool> &solv_res) {
    1461             :   unsigned natoms = getNumberOfAtoms();
    1462          20 :   std::vector<std::vector<int> > Nlist(natoms);
    1463          20 :   calcNlist(Nlist);
    1464          20 :   std::vector<double> sasares(nres, 0.);
    1465          20 :   const unsigned nt = OpenMP::getNumThreads();
    1466          20 :   std::vector< std::vector<double> > sasares_t(nt);
    1467             : 
    1468          20 :   #pragma omp parallel num_threads(nt)
    1469             :   {
    1470             :     std::vector<double> & private_sasares = sasares_t[OpenMP::getThreadNum()];
    1471             :     private_sasares.assign(nres, 0.);
    1472             :     // marks the neighbours of atom i (replaces a linear search in Nlist[i])
    1473             :     std::vector<char> is_neighbor(natoms, 0);
    1474             :     #pragma omp for schedule(static)
    1475             :     for (unsigned i = 0; i < natoms; ++i) {
    1476             :       if (LCPOparam[i].size() > 1 && LCPOparam[i][1] > 0.0) {
    1477             :         double Aij = 0.0;
    1478             :         double Aijk = 0.0;
    1479             :         double Ajk = 0.0;
    1480             :         double ri = LCPOparam[i][0];
    1481             :         double S1 = 4.*M_PI*ri*ri;
    1482             :         for (const auto j : Nlist[i]) {
    1483             :           is_neighbor[j] = 1;
    1484             :         }
    1485             :         for (unsigned j = 0; j < Nlist[i].size(); ++j) {
    1486             :           double d_ij = modulo(delta( getPosition(i), getPosition(Nlist[i][j]) ))*10.;
    1487             :           double rj = LCPOparam[Nlist[i][j]][0];
    1488             :           double Aijt = (2.*M_PI*ri*(ri-d_ij/2.-((ri*ri-rj*rj)/(2.*d_ij))));
    1489             :           double Ajkt = 0.0;
    1490             :           for (unsigned k = 0; k < Nlist[Nlist[i][j]].size(); ++k) {
    1491             :             if (is_neighbor[Nlist[Nlist[i][j]][k]]) {
    1492             :               double d_jk = modulo(delta( getPosition(Nlist[i][j]), getPosition(Nlist[Nlist[i][j]][k]) ))*10.;
    1493             :               double rk = LCPOparam[Nlist[Nlist[i][j]][k]][0];
    1494             :               double sjk =  (2.*M_PI*rj*(rj-d_jk/2.-((rj*rj-rk*rk)/(2.*d_jk))));
    1495             :               Ajkt += sjk;
    1496             :             }
    1497             :           }
    1498             :           Aijk += (Aijt * Ajkt);
    1499             :           Aij += Aijt;
    1500             :           Ajk += Ajkt;
    1501             :         }
    1502             :         for (const auto j : Nlist[i]) {
    1503             :           is_neighbor[j] = 0;
    1504             :         }
    1505             :         double sasai = (LCPOparam[i][1]*S1+LCPOparam[i][2]*Aij+LCPOparam[i][3]*Ajk+LCPOparam[i][4]*Aijk);
    1506             :         if (sasai > 0) {
    1507             :           private_sasares[residue_atom[i]] += sasai / 100.0;
    1508             :         }
    1509             :       }
    1510             :     }
    1511             :   }
    1512             :   // combining private_sasares into sasares, in thread order (reproducible results);
    1513             :   // the buffers of the threads that did not run (e.g. without OpenMP, or when the
    1514             :   // runtime gives fewer threads than requested) are empty and are skipped
    1515          60 :   for (unsigned t = 0; t < nt; ++t) {
    1516          40 :     if(sasares_t[t].empty()) {
    1517           0 :       continue;
    1518             :     }
    1519        8168 :     for (unsigned i = 0; i < nres; ++i) {
    1520        8128 :       sasares[i] += sasares_t[t][i];
    1521             :     }
    1522             :   }
    1523        4084 :   for(unsigned i=0; i<nres; ++i) { // updating solv_res based on sasares
    1524        4064 :     if(sasares[i]>sasa_cutoff) {
    1525             :       solv_res[i] = 1;
    1526             :     } else {
    1527             :       solv_res[i] = 0;
    1528             :     }
    1529             :   }
    1530          40 : }
    1531             : 
    1532             : 
    1533    56554124 : void SAXS::sincos_q(const double r, double *s, double *c) const {
    1534             :   // sin(q_k r) and cos(q_k r) for all the q values. When the q values are close to a
    1535             :   // uniform grid q0+k*dq (as usual for experimental data), sin and cos of the grid are
    1536             :   // obtained by angle addition (exact restart every 16 values) and corrected for the
    1537             :   // small deviations eps_k=q_k-q0-k*dq with a Taylor expansion (|eps_k r|<=0.1, error
    1538             :   // smaller than 1e-16). Otherwise sin and cos are computed for every q.
    1539    56554124 :   const unsigned numq = q_list.size();
    1540    56554124 :   if(numq<4 || qref_maxeps_*r>0.1) {
    1541   487199068 :     for(unsigned k=0; k<numq; ++k) {
    1542   438499704 :       s[k] = std::sin(q_list[k]*r);
    1543   438499704 :       c[k] = std::cos(q_list[k]*r);
    1544             :     }
    1545             :     return;
    1546             :   }
    1547     7854760 :   const double sd = std::sin(qref_dq_*r);
    1548     7854760 :   const double cd = std::cos(qref_dq_*r);
    1549             :   double sk = 0.0, ck = 1.0;
    1550   119543744 :   for(unsigned k=0; k<numq; ++k) {
    1551   111688984 :     if((k&15)==0) {
    1552     7854760 :       const double a = (qref0_+k*qref_dq_)*r;
    1553     7854760 :       sk = std::sin(a);
    1554     7854760 :       ck = std::cos(a);
    1555             :     }
    1556   111688984 :     const double x = qref_eps_[k]*r;
    1557   111688984 :     const double x2 = x*x;
    1558   111688984 :     const double cx = 1.-x2*(1./2-x2*(1./24-x2*(1./720-x2*(1./40320))));
    1559   111688984 :     const double sx = x*(1.-x2*(1./6-x2*(1./120-x2*(1./5040-x2*(1./362880)))));
    1560   111688984 :     s[k] = sk*cx+ck*sx;
    1561   111688984 :     c[k] = ck*cx-sk*sx;
    1562   111688984 :     const double s2 = sk*cd+ck*sd;
    1563   111688984 :     ck = ck*cd-sk*sd;
    1564             :     sk = s2;
    1565             :   }
    1566             : }
    1567             : 
    1568         307 : void SAXS::calculate_cpu(std::vector<Vector> &pos, std::vector<Vector> &deriv, const bool reduce_deriv) {
    1569             :   unsigned size;
    1570         307 :   if(onebead) {
    1571          27 :     size = nres;
    1572             :   } else {
    1573             :     size = getNumberOfAtoms();
    1574             :   }
    1575         307 :   const unsigned numq = q_list.size();
    1576         307 :   if(size == 0) {
    1577           0 :     error("SAXS/SANS requires at least one atom or bead");
    1578             :   }
    1579             : 
    1580         307 :   unsigned stride = comm.Get_size();
    1581         307 :   unsigned rank   = comm.Get_rank();
    1582         307 :   if(serial) {
    1583             :     stride = 1;
    1584             :     rank   = 0;
    1585             :   }
    1586         307 :   std::vector<double> sum(numq,0);
    1587         307 :   const unsigned nt=OpenMP::getNumThreads();
    1588             :   // partial sums of the threads other than the first one, added in thread order
    1589         307 :   std::vector< std::vector<Vector> > deriv_t(nt);
    1590         307 :   std::vector< std::vector<double> > sum_t(nt);
    1591         307 :   #pragma omp parallel num_threads(nt)
    1592             :   {
    1593             :     const unsigned t = OpenMP::getThreadNum();
    1594             :     if(t>0) {
    1595             :       deriv_t[t].assign(deriv.size(),Vector(0,0,0));
    1596             :       sum_t[t].assign(numq,0.0);
    1597             :     }
    1598             :     std::vector<Vector> & my_deriv = (t>0) ? deriv_t[t] : deriv;
    1599             :     std::vector<double> & my_sum = (t>0) ? sum_t[t] : sum;
    1600             :     std::vector<double> sq(numq), cq(numq);
    1601             :     // the work of row i decreases with i: rows are dealt round robin
    1602             :     #pragma omp for schedule(static,1)
    1603             :     for (unsigned i=rank; i<size-1; i+=stride) {
    1604             :       Vector posi = pos[i];
    1605             :       for (unsigned j=i+1; j<size ; ++j) {
    1606             :         Vector c_distances = delta(posi,pos[j]);
    1607             :         double m_distances = c_distances.modulo();
    1608             :         c_distances = c_distances/m_distances/m_distances;
    1609             :         sincos_q(m_distances, sq.data(), cq.data());
    1610             :         for (unsigned k=0; k<numq; ++k) {
    1611             :           unsigned kdx=k*size;
    1612             :           double qdist = q_list[k]*m_distances;
    1613             :           double FFF = 2.*FF_value[i][k]*FF_value[j][k];
    1614             :           double tsq = sq[k]/qdist;
    1615             :           double tmp = FFF*(cq[k]-tsq);
    1616             :           Vector dd  = c_distances*tmp;
    1617             :           my_deriv[kdx+i] -= dd;
    1618             :           my_deriv[kdx+j] += dd;
    1619             :           my_sum[k] += FFF*tsq;
    1620             :         }
    1621             :       }
    1622             :     }
    1623             :   }
    1624             :   // only the threads that actually ran have filled their buffers: without OpenMP
    1625             :   // (or when the runtime gives fewer threads than requested) the others are empty
    1626         307 :   std::vector<unsigned> filled;
    1627         614 :   for(unsigned t=1; t<nt; ++t) {
    1628         307 :     if(sum_t[t].empty()) {
    1629           0 :       continue;
    1630             :     }
    1631         307 :     filled.push_back(t);
    1632        3605 :     for(unsigned k=0; k<numq; ++k) {
    1633        3298 :       sum[k] += sum_t[t][k];
    1634             :     }
    1635             :   }
    1636         307 :   if(!filled.empty()) {
    1637         307 :     #pragma omp parallel for num_threads(nt)
    1638             :     for(unsigned i=0; i<deriv.size(); ++i) {
    1639             :       for(const auto t : filled) {
    1640             :         deriv[i] += deriv_t[t][i];
    1641             :       }
    1642             :     }
    1643             :   }
    1644             : 
    1645         307 :   if(!serial) {
    1646         301 :     comm.Sum(&sum[0], numq);
    1647             :   }
    1648             : 
    1649         307 :   if (resolution) {
    1650             :     // the resolution function is applied to the whole intensity, self term included
    1651        1408 :     for (unsigned k=0; k<numq; ++k) {
    1652        1320 :       sum[k]+=FF_rank[k];
    1653             :     }
    1654          88 :     const std::vector<double> old_sum(sum);
    1655        1408 :     for (unsigned k=0; k<numq; ++k) {
    1656        1320 :       sum[k] = 0.;
    1657       21120 :       for (unsigned l=0; l<numq; ++l) {
    1658       19800 :         sum[k] += smear_[k*numq+l]*old_sum[l];
    1659             :       }
    1660             :     }
    1661             :     // the smearing is linear in the data, so it is applied to the partial
    1662             :     // derivatives of this rank (of all the particles) before summing them
    1663          88 :     #pragma omp parallel for num_threads(nt) schedule(static)
    1664             :     for (unsigned i=0; i<size; i++) {
    1665             :       std::vector<Vector> old_deriv_i(numq);
    1666             :       for (unsigned l=0; l<numq; l++) {
    1667             :         old_deriv_i[l] = deriv[l*size+i];
    1668             :       }
    1669             :       for (unsigned k=0; k<numq; k++) {
    1670             :         Vector d;
    1671             :         for (unsigned l=0; l<numq; l++) {
    1672             :           d += smear_[k*numq+l]*old_deriv_i[l];
    1673             :         }
    1674             :         deriv[k*size+i] = d;
    1675             :       }
    1676             :     }
    1677             :   } else {
    1678        2197 :     for (unsigned k=0; k<numq; ++k) {
    1679        1978 :       sum[k]+=FF_rank[k];
    1680             :     }
    1681             :   }
    1682             : 
    1683             :   // with DOSCORE only the contraction with the score derivatives is summed (in calculate)
    1684         307 :   if(!serial && reduce_deriv) {
    1685          91 :     comm.Sum(&deriv[0][0], 3*deriv.size());
    1686             :   }
    1687             : 
    1688        3605 :   for (unsigned k=0; k<numq; ++k) {
    1689             :     std::string num;
    1690        3298 :     Tools::convert(k,num);
    1691        3298 :     Value* val=getPntrToComponent("q-"+num);
    1692        3298 :     val->set(sum[k]);
    1693        3298 :     if(getDoScore()) {
    1694        2142 :       setCalcData(k, sum[k]);
    1695             :     }
    1696             :   }
    1697         614 : }
    1698             : 
    1699         307 : void SAXS::calculate() {
    1700         307 :   if(pbc) {
    1701         264 :     makeWhole();
    1702             :   }
    1703             : 
    1704         307 :   const size_t size = getNumberOfAtoms();
    1705             :   const size_t numq = q_list.size();
    1706             : 
    1707             :   // these are the derivatives associated to the coarse graining
    1708         307 :   std::vector<Vector> aa_deriv(size);
    1709             : 
    1710             :   size_t beads_size = size;
    1711         307 :   if(onebead) {
    1712          27 :     beads_size = nres;
    1713             :   }
    1714             :   // these are the derivatives particle,q
    1715         307 :   std::vector<Vector> bd_deriv(numq*beads_size);
    1716             : 
    1717         307 :   std::vector<Vector> beads_pos(beads_size);
    1718         307 :   if(onebead) {
    1719          27 :     std::vector<double> sum_mass(nres,0.);
    1720          27 :     std::vector<Vector> sum_pos(nres,Vector(0,0,0));
    1721       84133 :     for(unsigned atom_id=0; atom_id<size; atom_id++) {
    1722       84106 :       const unsigned resid = residue_atom[atom_id];
    1723       84106 :       aa_deriv[atom_id] = Vector(atoms_masses[atom_id],atoms_masses[atom_id],atoms_masses[atom_id]);
    1724       84106 :       sum_pos[resid] += atoms_masses[atom_id] * getPosition(atom_id);
    1725       84106 :       sum_mass[resid] += atoms_masses[atom_id];
    1726             :     }
    1727        5145 :     for(unsigned resid=0; resid<nres; resid++) {
    1728        5118 :       beads_pos[resid] = sum_pos[resid]/sum_mass[resid];
    1729             :     }
    1730       84133 :     for(unsigned atom_id=0; atom_id<size; atom_id++) {
    1731       84106 :       aa_deriv[atom_id] /= sum_mass[residue_atom[atom_id]];
    1732             :     }
    1733             :     // SASA
    1734          27 :     std::vector<bool> solv_res(nres, 0);
    1735          27 :     if(saxs) {
    1736          12 :       if(getStep()%solv_stride == 0 || isFirstStep) {
    1737          12 :         isFirstStep = 0;
    1738          12 :         if(rho_corr!=rho) {
    1739           6 :           sasa_calculate(solv_res);
    1740             :         }
    1741          12 :         Iq0=0.;
    1742        2375 :         for(unsigned i=0; i<nres; ++i) {
    1743             :           // Iq0 accumulates the MAGNITUDE of each bead amplitude and is left as
    1744             :           // sum |A| on purpose: it stays well conditioned near a match point,
    1745             :           // where sum A passes through zero, and it equals |sum A| whenever
    1746             :           // every bead shares a sign, which is always the case in SAXS.
    1747        2363 :           const double rho_i = (solv_res[i] == 1) ? rho_corr : rho;
    1748        2363 :           bead_sign[i] = beadSign(Iq0_solv[i], Iq0_mix[i], rho_i);
    1749        2363 :           Iq0 += std::sqrt(std::fabs(Iq0_vac[i] + rho_i*rho_i*Iq0_solv[i] - rho_i*Iq0_mix[i]));
    1750             :         }
    1751             :         // Form Factors
    1752         114 :         for(unsigned k=0; k<numq; ++k) {
    1753       21363 :           for(unsigned i=0; i<nres; ++i) {
    1754       21261 :             if(solv_res[i] == 0) { // buried
    1755       18921 :               FF_value[i][k] = bead_sign[i]*std::sqrt(std::fabs(FF_value_vacuum[atoi[i]][k] + rho*rho*FF_value_solv[atoi[i]][k] - rho*FF_value_mixed[atoi[i]][k]))/Iq0;
    1756             :             } else { // surface
    1757        2340 :               FF_value[i][k] = bead_sign[i]*std::sqrt(std::fabs(FF_value_vacuum[atoi[i]][k] + rho_corr*rho_corr*FF_value_solv[atoi[i]][k] - rho_corr*FF_value_mixed[atoi[i]][k]))/Iq0;
    1758             :             }
    1759             : 
    1760             :           }
    1761             :         }
    1762         114 :         for(unsigned k=0; k<numq; ++k) {
    1763         102 :           FF_rank[k]=0.;
    1764       21363 :           for(unsigned i=0; i<nres; ++i) {
    1765       21261 :             FF_rank[k]+=FF_value[i][k]*FF_value[i][k];
    1766             :           }
    1767             :         }
    1768             : 
    1769             :       }
    1770             :     } else { // SANS
    1771          15 :       std::vector<bool> deut_res(nres, 0);
    1772          15 :       double solv_sc_length = 0.1*(0.580 + 2.*((1. - deuter_conc) * (-0.374) + deuter_conc * 0.667)); // per water electron (10 electrons)
    1773          15 :       double rho_sans = rho * solv_sc_length;
    1774          15 :       double rho_sans_corr = rho_corr * solv_sc_length;
    1775          15 :       if(getStep()%solv_stride == 0 || isFirstStep) {
    1776          15 :         isFirstStep = 0;
    1777          15 :         if(deuter_conc!=0.||rho != rho_corr) {
    1778          14 :           sasa_calculate(solv_res);
    1779             :         }
    1780             :         // the exposed residues are deuterated with probability deuter_conc: the random
    1781             :         // numbers are drawn by the first rank (same sequence as before on every rank)
    1782          15 :         std::vector<int> deut_draw(nres,0);
    1783          15 :         if(comm.Get_rank()==0) {
    1784        1491 :           for(unsigned i=0; i<nres; ++i) {
    1785        1482 :             if(solv_res[i] == 1) {
    1786         884 :               deut_draw[i] = (random_deut_.RandU01()<deuter_conc) ? 1 : 0;
    1787             :             }
    1788             :           }
    1789             :         }
    1790          15 :         if(comm.Get_size()>1) {
    1791          12 :           comm.Bcast(deut_draw,0);
    1792             :         }
    1793          15 :         Iq0=0.;
    1794        2770 :         for(unsigned i=0; i<nres; ++i) {
    1795             :           // The density and the H/D term set are selected once and used for both
    1796             :           // the sign and the magnitude, so the two can never disagree. In SANS
    1797             :           // the sign genuinely varies between beads near a contrast-match point.
    1798             :           double vac_i, mix_i, rho_i;
    1799        2755 :           if(solv_res[i] == 1) {
    1800             :             rho_i = rho_sans_corr;
    1801        1004 :             if(deut_draw[i]) {
    1802             :               deut_res[i] = 1;
    1803         336 :               vac_i = Iq0_vac_D[i];
    1804         336 :               mix_i = Iq0_mix_D[i];
    1805             :             } else {
    1806         668 :               vac_i = Iq0_vac_H[i];
    1807         668 :               mix_i = Iq0_mix_H[i];
    1808             :             }
    1809             :           } else {
    1810             :             rho_i = rho_sans;
    1811        1751 :             vac_i = Iq0_vac_H[i];
    1812        1751 :             mix_i = Iq0_mix_H[i];
    1813             :           }
    1814        2755 :           bead_sign[i] = beadSign(Iq0_solv_H[i], mix_i, rho_i);
    1815        2755 :           Iq0 += std::sqrt(std::fabs(vac_i + rho_i*rho_i*Iq0_solv_H[i] - rho_i*mix_i));
    1816             :         }
    1817             :         // Form Factors
    1818         139 :         for(unsigned k=0; k<numq; ++k) {
    1819       23679 :           for(unsigned i=0; i<nres; ++i) {
    1820       23555 :             if(solv_res[i] == 0) { // hydrogen
    1821       15215 :               FF_value[i][k] = bead_sign[i]*std::sqrt(std::fabs(FF_value_vacuum_H[atoi[i]][k] + rho_sans*rho_sans*FF_value_solv_H[atoi[i]][k] - rho_sans*FF_value_mixed_H[atoi[i]][k]))/Iq0;
    1822             :             } else {
    1823        8340 :               if(deut_res[i] == 0) {
    1824        5652 :                 FF_value[i][k] = bead_sign[i]*std::sqrt(std::fabs(FF_value_vacuum_H[atoi[i]][k] + rho_sans_corr*rho_sans_corr*FF_value_solv_H[atoi[i]][k] - rho_sans_corr*FF_value_mixed_H[atoi[i]][k]))/Iq0;
    1825             :               } else {
    1826        2688 :                 FF_value[i][k] = bead_sign[i]*std::sqrt(std::fabs(FF_value_vacuum_D[atoi[i]][k] + rho_sans_corr*rho_sans_corr*FF_value_solv_H[atoi[i]][k] - rho_sans_corr*FF_value_mixed_D[atoi[i]][k]))/Iq0;
    1827             :               }
    1828             :             }
    1829             : 
    1830             :           }
    1831             :         }
    1832         139 :         for(unsigned k=0; k<numq; ++k) {
    1833         124 :           FF_rank[k]=0.;
    1834       23679 :           for(unsigned i=0; i<nres; ++i) {
    1835       23555 :             FF_rank[k]+=FF_value[i][k]*FF_value[i][k];
    1836             :           }
    1837             :         }
    1838             : 
    1839          15 :       }
    1840             :     }
    1841             :     // not ONEBEAD
    1842          27 :   } else {
    1843      112158 :     for(unsigned i=0; i<size; ++i) {
    1844      111878 :       beads_pos[i] = getPosition(i);
    1845             :     }
    1846         560 :     aa_deriv = std::vector<Vector>(size,(Vector(1,1,1)));
    1847             :   }
    1848             : 
    1849             :   // with DOSCORE the derivatives of the intensities are first contracted with the
    1850             :   // derivatives of the score, and only then summed over the ranks
    1851         307 :   calculate_cpu(beads_pos, bd_deriv, !getDoScore());
    1852             : 
    1853         307 :   std::vector<double> chi2_dq;
    1854         307 :   if(chi2 && !getDoScore()) {
    1855           4 :     chi2_dq.assign(numq,0.);
    1856             :   }
    1857             :   double chi2_raw=0.;
    1858             :   double chi2_reduced=0.;
    1859             :   double chi2_scale=1.;
    1860         307 :   if(chi2) {
    1861             :     double sum_xy=0.;
    1862             :     double sum_xx=0.;
    1863             :     double sum_yy=0.;
    1864           4 :     std::vector<double> calcint(numq,0.);
    1865          16 :     for(unsigned k=0; k<numq; ++k) {
    1866             :       std::string num;
    1867          12 :       Tools::convert(k,num);
    1868          12 :       calcint[k]=getPntrToComponent("q-"+num)->get();
    1869          12 :       if(!std::isfinite(calcint[k])) {
    1870           0 :         error("Non-finite calculated intensity encountered while evaluating CHI2");
    1871             :       }
    1872          12 :       const double weight=1./(experr[k]*experr[k]);
    1873          12 :       sum_xy += weight*calcint[k]*expint[k];
    1874          12 :       sum_xx += weight*calcint[k]*calcint[k];
    1875          12 :       sum_yy += weight*expint[k]*expint[k];
    1876             :     }
    1877           4 :     if(!std::isfinite(sum_xx) || sum_xx<=0.) {
    1878           0 :       error("Cannot evaluate CHI2 because the weighted calculated-intensity norm is not positive and finite");
    1879             :     }
    1880           4 :     chi2_scale=sum_xy/sum_xx;
    1881           4 :     chi2_raw=sum_yy-sum_xy*sum_xy/sum_xx;
    1882           4 :     const double roundoff_tol=1.e-12*std::max(1.,std::fabs(sum_yy));
    1883           4 :     if(chi2_raw<0. && chi2_raw>=-roundoff_tol) {
    1884             :       chi2_raw=0.;
    1885             :     }
    1886           4 :     if(!std::isfinite(chi2_scale) || !std::isfinite(chi2_raw) || chi2_raw<0.) {
    1887           0 :       error("Non-finite or negative CHI2 encountered after scale optimization");
    1888             :     }
    1889           4 :     chi2_reduced=chi2_raw/static_cast<double>(numq-1);
    1890           4 :     if(!getDoScore()) {
    1891          16 :       for(unsigned k=0; k<numq; ++k) {
    1892          12 :         const double weight=1./(experr[k]*experr[k]);
    1893          12 :         chi2_dq[k]=2.*weight*chi2_scale*(chi2_scale*calcint[k]-expint[k]);
    1894             :       }
    1895             :     }
    1896           4 :     getPntrToComponent("chi2")->set(chi2_raw);
    1897           4 :     getPntrToComponent("chi2red")->set(chi2_reduced);
    1898           8 :     getPntrToComponent("chi2scale")->set(chi2_scale);
    1899             :   }
    1900             : 
    1901         307 :   if(getDoScore()) {
    1902             :     /* Metainference */
    1903         210 :     double score = getScore();
    1904         210 :     setScore(score);
    1905             :   }
    1906             : 
    1907         307 :   if(chi2ensemble) {
    1908             :     double ensemble_raw=chi2_raw;
    1909             :     double ensemble_reduced=chi2_reduced;
    1910             :     double ensemble_scale=chi2_scale;
    1911           0 :     if(chi2ensemble_replicas>1) {
    1912           0 :       std::vector<double> ensemble(numq,0.);
    1913           0 :       if(comm.Get_rank()==0) {
    1914           0 :         for(unsigned k=0; k<numq; ++k) {
    1915             :           std::string num;
    1916           0 :           Tools::convert(k,num);
    1917           0 :           ensemble[k]=getPntrToComponent("q-"+num)->get();
    1918             :         }
    1919           0 :         multi_sim_comm.Sum(&ensemble[0],numq);
    1920           0 :         for(unsigned k=0; k<numq; ++k) {
    1921           0 :           ensemble[k]/=static_cast<double>(chi2ensemble_replicas);
    1922             :         }
    1923             :       }
    1924           0 :       comm.Sum(&ensemble[0],numq);
    1925             :       double sum_xy=0.;
    1926             :       double sum_xx=0.;
    1927             :       double sum_yy=0.;
    1928           0 :       for(unsigned k=0; k<numq; ++k) {
    1929           0 :         if(!std::isfinite(ensemble[k])) {
    1930           0 :           error("Non-finite ensemble intensity encountered while evaluating CHI2ENSEMBLE");
    1931             :         }
    1932           0 :         const double weight=1./(experr[k]*experr[k]);
    1933           0 :         sum_xy += weight*ensemble[k]*expint[k];
    1934           0 :         sum_xx += weight*ensemble[k]*ensemble[k];
    1935           0 :         sum_yy += weight*expint[k]*expint[k];
    1936             :       }
    1937           0 :       if(!std::isfinite(sum_xx) || sum_xx<=0.) {
    1938           0 :         error("Cannot evaluate CHI2ENSEMBLE because the weighted calculated-intensity norm is not positive and finite");
    1939             :       }
    1940           0 :       ensemble_scale=sum_xy/sum_xx;
    1941           0 :       ensemble_raw=sum_yy-sum_xy*sum_xy/sum_xx;
    1942           0 :       const double roundoff_tol=1.e-12*std::max(1.,std::fabs(sum_yy));
    1943           0 :       if(ensemble_raw<0. && ensemble_raw>=-roundoff_tol) {
    1944             :         ensemble_raw=0.;
    1945             :       }
    1946           0 :       if(!std::isfinite(ensemble_scale) || !std::isfinite(ensemble_raw) || ensemble_raw<0.) {
    1947           0 :         error("Non-finite or negative CHI2ENSEMBLE encountered after scale optimization");
    1948             :       }
    1949           0 :       ensemble_reduced=ensemble_raw/static_cast<double>(numq-1);
    1950             :     }
    1951           0 :     getPntrToComponent("chi2ensemble")->set(ensemble_raw);
    1952           0 :     getPntrToComponent("chi2ensemblered")->set(ensemble_reduced);
    1953           0 :     getPntrToComponent("chi2ensemblescale")->set(ensemble_scale);
    1954             :   }
    1955             : 
    1956         307 :   std::vector<Vector> chi2_atom_deriv;
    1957         307 :   if(chi2 && !getDoScore()) {
    1958           4 :     chi2_atom_deriv.assign(size,Vector(0,0,0));
    1959             :   }
    1960         307 :   Tensor chi2_box_deriv;
    1961             : 
    1962             :   // derivatives of each intensity (without DOSCORE)
    1963        1463 :   for (unsigned k=0; k<numq && !getDoScore(); ++k) {
    1964        1156 :     const unsigned kdx=k*beads_size;
    1965        1156 :     Tensor deriv_box;
    1966             :     std::string num;
    1967        1156 :     Tools::convert(k,num);
    1968        1156 :     Value* val=getPntrToComponent("q-"+num);
    1969             : 
    1970        1156 :     if(onebead) {
    1971      736540 :       for(unsigned atom_id=0; atom_id<size; ++atom_id) {
    1972      736314 :         const unsigned bead_id = residue_atom[atom_id];
    1973             :         const Vector qderiv(aa_deriv[atom_id][0]*bd_deriv[kdx+bead_id][0],
    1974             :                             aa_deriv[atom_id][1]*bd_deriv[kdx+bead_id][1],
    1975      736314 :                             aa_deriv[atom_id][2]*bd_deriv[kdx+bead_id][2]);
    1976      736314 :         setAtomsDerivatives(val, atom_id, qderiv);
    1977      736314 :         deriv_box += Tensor(getPosition(atom_id),qderiv);
    1978      736314 :         if(chi2) {
    1979           0 :           chi2_atom_deriv[atom_id] += chi2_dq[k]*qderiv;
    1980             :         }
    1981             :       }
    1982             :     } else {
    1983      744246 :       for(unsigned i=0; i<beads_size; ++i) {
    1984             :         const Vector qderiv(bd_deriv[kdx+i][0],
    1985             :                             bd_deriv[kdx+i][1],
    1986      743316 :                             bd_deriv[kdx+i][2]);
    1987      743316 :         setAtomsDerivatives(val, i, qderiv);
    1988      743316 :         deriv_box += Tensor(getPosition(i),qderiv);
    1989      743316 :         if(chi2) {
    1990          18 :           chi2_atom_deriv[i] += chi2_dq[k]*qderiv;
    1991             :         }
    1992             :       }
    1993             :     }
    1994        1156 :     if(chi2) {
    1995          24 :       chi2_box_deriv += chi2_dq[k]*deriv_box;
    1996             :     }
    1997        1156 :     setBoxDerivatives(val, -deriv_box);
    1998             :   }
    1999             : 
    2000         307 :   if(getDoScore()) {
    2001             :     // derivative of the score with respect to the beads, from all the q values
    2002         210 :     std::vector<Vector> score_deriv(beads_size, Vector(0,0,0));
    2003         210 :     #pragma omp parallel for num_threads(OpenMP::getNumThreads())
    2004             :     for(unsigned i=0; i<beads_size; ++i) {
    2005             :       for(unsigned k=0; k<numq; ++k) {
    2006             :         score_deriv[i] += getMetaDer(k)*bd_deriv[k*beads_size+i];
    2007             :       }
    2008             :     }
    2009             :     // calculate_cpu does not sum the derivatives over the ranks with DOSCORE
    2010         210 :     if(!serial && comm.Get_size()>1) {
    2011         210 :       comm.Sum(&score_deriv[0][0], 3*score_deriv.size());
    2012             :     }
    2013         210 :     Value* val=getPntrToComponent("score");
    2014         210 :     Tensor deriv_box;
    2015       45612 :     for(unsigned atom_id=0; atom_id<size; ++atom_id) {
    2016       45402 :       const unsigned bead_id = onebead ? residue_atom[atom_id] : atom_id;
    2017             :       const Vector der(aa_deriv[atom_id][0]*score_deriv[bead_id][0],
    2018             :                        aa_deriv[atom_id][1]*score_deriv[bead_id][1],
    2019       45402 :                        aa_deriv[atom_id][2]*score_deriv[bead_id][2]);
    2020       45402 :       setAtomsDerivatives(val, atom_id, der);
    2021       90804 :       deriv_box += Tensor(getPosition(atom_id),der);
    2022             :     }
    2023         210 :     setBoxDerivatives(val, -deriv_box);
    2024         210 :   }
    2025             : 
    2026         307 :   if(chi2 && !getDoScore()) {
    2027           4 :     Value* chi2_val=getPntrToComponent("chi2");
    2028           4 :     Value* chi2red_val=getPntrToComponent("chi2red");
    2029           4 :     const double invdof=1./static_cast<double>(numq-1);
    2030          10 :     for(unsigned atom_id=0; atom_id<size; ++atom_id) {
    2031           6 :       setAtomsDerivatives(chi2_val, atom_id, chi2_atom_deriv[atom_id]);
    2032           6 :       setAtomsDerivatives(chi2red_val, atom_id, invdof*chi2_atom_deriv[atom_id]);
    2033             :     }
    2034           4 :     setBoxDerivatives(chi2_val, -chi2_box_deriv);
    2035           4 :     setBoxDerivatives(chi2red_val, -invdof*chi2_box_deriv);
    2036             :   }
    2037         614 : }
    2038             : 
    2039          23 : unsigned SAXS::getOnebeadMapping(const PDB &pdb, const std::vector<AtomNumber> &atoms) {
    2040          23 :   std::vector<std::string> chains;
    2041          23 :   pdb.getChainNames( chains );
    2042          23 :   std::vector<std::vector<std::string> > AtomResidueName;
    2043             : 
    2044          23 :   const unsigned n_map = std::max(atoms.size(), pdb.getPositions().size());
    2045          23 :   glyc_type.assign(n_map, -1);
    2046          23 :   glyc_bridge.assign(n_map, false);
    2047             :   // Atom numbers in TEMPLATE traversal order, one entry per atom, ions included.
    2048          23 :   std::vector<AtomNumber> atom_numbers;
    2049          23 :   atom_numbers.reserve(atoms.size());
    2050             :   // Audit trail. Accepting several spellings for the same residue is only safe if the
    2051             :   // user can see what each one was taken to mean, so every distinct residue name that
    2052             :   // reaches the glycan or alias path is recorded with its resolution and its count and
    2053             :   // printed below.
    2054             :   std::map<std::string, std::pair<int, unsigned> > glyc_seen;
    2055             :   std::map<std::string, std::pair<std::string, unsigned> > alias_seen;
    2056          23 :   std::vector<unsigned> glyc_count(NONEBEAD, 0);
    2057             :   unsigned glyc_nbridge = 0;
    2058             : 
    2059             :   // Heavy-atom positions of the TEMPLATE. They are used below to tell a glycosidic
    2060             :   // (bridging) oxygen from a free hydroxyl, which selects the LCPO atom class of
    2061             :   // every glycan oxygen. Note that the TEMPLATE is read with scale=1, so these
    2062             :   // coordinates are in Angstrom, like the LCPO radii.
    2063          23 :   const std::vector<Vector>     &tmpl_pos = pdb.getPositions();
    2064          23 :   const std::vector<AtomNumber> &tmpl_num = pdb.getAtomNumbers();
    2065          23 :   std::vector<bool> tmpl_heavy(tmpl_pos.size(), false);
    2066       70373 :   for(unsigned k=0; k<tmpl_num.size(); ++k) {
    2067       70350 :     std::string an = pdb.getAtomName(tmpl_num[k]);
    2068       70350 :     if(an.empty()) {
    2069             :       continue;
    2070             :     }
    2071       70350 :     char e = an.at(0);
    2072       70350 :     if(isdigit(e) && an.size()>1) {
    2073           0 :       e = an.at(1);
    2074             :     }
    2075       70350 :     tmpl_heavy[k] = (e!='H');
    2076             :   }
    2077             :   // Number of heavy atoms covalently bound to a: C-O and C-N bonds are ~1.4 Angstrom
    2078             :   // while the shortest non-bonded contacts are well above 2.2 Angstrom, so 1.8 is a
    2079             :   // safe threshold. Only glycan oxygens are queried, so the cost is negligible and
    2080             :   // it is paid once, at setup.
    2081          23 :   const double bond_cut = 1.8;
    2082           0 :   auto nHeavyBonded = [&](AtomNumber a) {
    2083           0 :     const Vector pa = pdb.getPosition(a);
    2084             :     unsigned nb = 0;
    2085           0 :     for(unsigned k=0; k<tmpl_pos.size(); ++k) {
    2086           0 :       if(!tmpl_heavy[k] || tmpl_num[k].index()==a.index()) {
    2087           0 :         continue;
    2088             :       }
    2089             :       const Vector d = tmpl_pos[k]-pa;
    2090           0 :       if(std::fabs(d[0])>bond_cut || std::fabs(d[1])>bond_cut || std::fabs(d[2])>bond_cut) {
    2091           0 :         continue;
    2092             :       }
    2093           0 :       if(d.modulo2() < bond_cut*bond_cut) {
    2094           0 :         nb++;
    2095             :       }
    2096             :     }
    2097           0 :     return nb;
    2098          23 :   };
    2099             :   // Same neighbourhood, but returning the template indices instead of the count.
    2100           0 :   auto listHeavyBonded = [&](AtomNumber a) {
    2101           0 :     const Vector pa = pdb.getPosition(a);
    2102           0 :     std::vector<unsigned> nb;
    2103           0 :     for(unsigned k=0; k<tmpl_pos.size(); ++k) {
    2104           0 :       if(!tmpl_heavy[k] || tmpl_num[k].index()==a.index()) {
    2105           0 :         continue;
    2106             :       }
    2107             :       const Vector d = tmpl_pos[k]-pa;
    2108           0 :       if(std::fabs(d[0])>bond_cut || std::fabs(d[1])>bond_cut || std::fabs(d[2])>bond_cut) {
    2109           0 :         continue;
    2110             :       }
    2111           0 :       if(d.modulo2() < bond_cut*bond_cut) {
    2112           0 :         nb.push_back(k);
    2113             :       }
    2114             :     }
    2115           0 :     return nb;
    2116           0 :   };
    2117             : 
    2118             :   // Every per-atom array is appended here and only here, so that they cannot drift
    2119             :   // out of step. Returns the running index of the atom just added.
    2120          23 :   AtomResidueName.resize(2);
    2121       70350 :   auto registerAtom = [&](AtomNumber a, const std::string &rname, double mass) {
    2122       70350 :     AtomResidueName[0].push_back(pdb.getAtomName(a));
    2123       70350 :     AtomResidueName[1].push_back(rname);
    2124       70350 :     atom_numbers.push_back(a);
    2125       70350 :     atoms_masses.push_back(mass);
    2126       70350 :     return AtomResidueName[0].size()-1;
    2127          23 :   };
    2128             : 
    2129             :   // cycle over chains
    2130          57 :   for(unsigned i=0; i<chains.size(); ++i) {
    2131          34 :     AtomResidueName.resize(2);
    2132             :     // cycle over the residues present in the chain
    2133             :     // (this works also with negative residue numbers and with gaps in the numbering)
    2134        4182 :     for(const int res : pdb.getResiduesInChain(chains[i])) {
    2135        4148 :       std::string Rname = pdb.getResidueName(res, chains[i]);
    2136        4148 :       Rname.erase(std::remove_if(Rname.begin(), Rname.end(), ::isspace),Rname.end());
    2137        4148 :       const std::string Rraw = Rname;
    2138        4148 :       Rname = onebeadResidueAlias(Rname);
    2139        4148 :       if(Rname!=Rraw) {
    2140           0 :         alias_seen[Rraw].first = Rname;
    2141           0 :         alias_seen[Rraw].second++;
    2142             :       }
    2143        4148 :       std::vector<AtomNumber> res_atoms = pdb.getAtomsInResidue(res, chains[i]);
    2144             :       // monoatomic ion: a single bead per ion, detected by residue name. We register the
    2145             :       // atom name/residue name (so readLCPOparam can recognise and skip it for SASA) and
    2146             :       // use the tabulated atomic mass. The mass is immaterial for a one-atom bead (the COM
    2147             :       // is the atom itself) but is set correctly for clarity.
    2148        4148 :       int ion = ionTypeFromResname(Rname);
    2149        4148 :       if(ion >= 0) {
    2150           3 :         if(res_atoms.size()!=1) {
    2151           0 :           error("Monoatomic ion residue "+Rname+" of chain "+chains[i]+" in the TEMPLATE must contain exactly one atom; found "+std::to_string(res_atoms.size())+".");
    2152             :         }
    2153           3 :         std::vector<double> a, b;
    2154             :         double c, v, bN, m;
    2155           3 :         getIonData(ion, a, b, c, v, bN, m);
    2156           6 :         for(unsigned a_i=0; a_i<res_atoms.size(); a_i++) {
    2157           3 :           registerAtom(res_atoms[a_i], Rname, m);
    2158           3 :           residue_atom.push_back(atoms_per_bead.size());
    2159             :         }
    2160           3 :         atoms_per_bead.push_back(res_atoms.size());
    2161             :         continue;
    2162             :       }
    2163             :       // Glycans: a monosaccharide is a single bead, like an amino acid. The presence
    2164             :       // of an amide nitrogen is what separates GlcNAc from Glc and GalNAc from Gal,
    2165             :       // so that both the PDB chemical-component codes (NAG/NDG, NGA/A2G) and the
    2166             :       // force-field conventions that keep the parent hexose name are handled.
    2167             :       bool res_hasN = false;
    2168        5061 :       for(unsigned a=0; a<res_atoms.size(); a++) {
    2169        5061 :         std::string an = pdb.getAtomName(res_atoms[a]);
    2170        5061 :         if(!an.empty() && an.at(0)=='N') {
    2171             :           res_hasN = true;
    2172             :           break;
    2173             :         }
    2174             :       }
    2175       74492 :       for(unsigned a=0; a<res_atoms.size(); a++) {
    2176      695209 :         for(unsigned b=a+1; b<res_atoms.size(); b++) {
    2177      624862 :           if(pdb.getAtomName(res_atoms[a])==pdb.getAtomName(res_atoms[b])) {
    2178           0 :             error("Atom "+pdb.getAtomName(res_atoms[a])+" appears more than once in residue "+
    2179           0 :                   Rname+" of chain "+chains[i]+" in the TEMPLATE. This usually means the file still "
    2180             :                   "contains alternate locations (altLoc) or several models. Keep one of each before "
    2181             :                   "running ONEBEAD.");
    2182             :           }
    2183             :         }
    2184             :       }
    2185        4145 :       const int glyc = glycanTypeFromResname(Rname, res_hasN);
    2186        4145 :       const bool is_onebead_res = (glyc>=0) || isOnebeadProteinResidue(pdb,Rname);
    2187             :       if(glyc>=0) {
    2188           0 :         glyc_count[glyc]++;
    2189           0 :         glyc_seen[Rraw].first = glyc;
    2190           0 :         glyc_seen[Rraw].second++;
    2191        4145 :       } else if(isUnsupportedGlycan(Rname)) {
    2192           0 :         error("Residue "+Rname+" is a monosaccharide for which no ONEBEAD parameters are "
    2193             :               "available. Remove it, or exclude it from ATOMS=.");
    2194             :       }
    2195        4145 :       std::vector<unsigned> tmp_residue_atom;
    2196        4145 :       tmp_residue_atom.resize(3,0);
    2197             :       // cycle over atoms
    2198       74492 :       for(unsigned a=0; a<res_atoms.size(); a++) {
    2199             :         // operations shared among all beads
    2200       70347 :         std::string Aname=pdb.getAtomName(res_atoms[a]);
    2201             :         char type;
    2202       70347 :         char first = Aname.at(0);
    2203             :         // We assume that element symbol is first letter, if not a number
    2204       70347 :         if (!isdigit(first)) {
    2205             :           type = first;
    2206             :           // otherwise is the second
    2207             :         } else {
    2208           0 :           type = Aname.at(1);
    2209             :         }
    2210             :         double amass = 0.;
    2211             :         if (type == 'H') {
    2212             :           amass = 1.008;
    2213             :         } else if(type == 'C') {
    2214             :           amass = 12.011;
    2215             :         } else if(type == 'N') {
    2216             :           amass = 14.007;
    2217             :         } else if(type == 'O') {
    2218             :           amass = 15.999;
    2219             :         } else if(type == 'S') {
    2220             :           amass = 32.065;
    2221             :         } else if(type == 'P') {
    2222             :           amass = 30.974;
    2223             :         } else {
    2224           0 :           error("Unknown element in mass extraction\n");
    2225             :         }
    2226       70347 :         const unsigned idx = registerAtom(res_atoms[a], Rname, amass);
    2227       70347 :         if(glyc>=0) {
    2228           0 :           glyc_type[idx] = glyc;
    2229             :           // a glycan oxygen bound to two heavy atoms is either the ring oxygen or
    2230             :           // a glycosidic bridge; both are ethers as far as LCPO is concerned
    2231           0 :           if(type=='O' && nHeavyBonded(res_atoms[a])>1) {
    2232             :             glyc_bridge[idx] = true;
    2233           0 :             glyc_nbridge++;
    2234             :           }
    2235           0 :           residue_atom.push_back(atoms_per_bead.size());
    2236       70347 :         } else if(isOnebeadProteinResidue(pdb,Rname)) {
    2237       68023 :           residue_atom.push_back(atoms_per_bead.size());
    2238             :         } else {
    2239             :           // check for nucleic acids
    2240             :           // Pentose bead
    2241        2246 :           if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  || Aname=="O3'"  ||
    2242        1934 :               Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  || Aname=="C1'"  || Aname=="H5'"  ||
    2243        1544 :               Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  || Aname=="H2'"  || Aname=="H2''" ||
    2244        1232 :               Aname=="H2'2" || Aname=="H1'"  || Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" ||
    2245        3386 :               Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T"  ||
    2246        1062 :               Aname=="H3T" ) {
    2247        1262 :             residue_atom.push_back(atoms_per_bead.size()+0);
    2248        1262 :             tmp_residue_atom[0]++;
    2249             :           }
    2250             :           // Nucleobase bead
    2251         984 :           else if(Aname=="N1"  || Aname=="N2"  || Aname=="N3"  || Aname=="N4"  || Aname=="N6"  ||
    2252         906 :                   Aname=="N7"  || Aname=="N9"  || Aname=="C2"  || Aname=="C4"  || Aname=="C5"  ||
    2253         672 :                   Aname=="C6"  || Aname=="C7"  || Aname=="C8"  || Aname=="O2"  || Aname=="O4"  ||
    2254         438 :                   Aname=="O6"  || Aname=="H1"  || Aname=="H2"  || Aname=="H3"  || Aname=="H5"  ||
    2255         282 :                   Aname=="H6"  || Aname=="H8"  || Aname=="H21" || Aname=="H22" || Aname=="H41" ||
    2256        1266 :                   Aname=="H42" || Aname=="H61" || Aname=="H62" || Aname=="H71" || Aname=="H72" ||
    2257         204 :                   Aname=="H73" ) {
    2258         858 :             residue_atom.push_back(atoms_per_bead.size()+1);
    2259         858 :             tmp_residue_atom[1]++;
    2260             :           }
    2261             :           // PO bead
    2262         136 :           else if(Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" || Aname=="O1P" ||
    2263         204 :                   Aname=="O2P" || Aname=="O3P" || Aname=="HP"  || Aname=="HOP3" ) {
    2264         204 :             residue_atom.push_back(atoms_per_bead.size()+2);
    2265         204 :             tmp_residue_atom[2]++;
    2266             :           }
    2267             :           // error
    2268             :           else {
    2269           0 :             error("Atom name "+Aname+" cannot be indexed to any bead. Check the PDB.");
    2270             :           }
    2271             :         }
    2272             :       }
    2273        4145 :       if(is_onebead_res) {
    2274        4067 :         atoms_per_bead.push_back(res_atoms.size());
    2275             :       } else {
    2276          78 :         if(tmp_residue_atom[0]==0) {
    2277           0 :           error("Nucleotide residue "+Rname+" of chain "+chains[i]+" in the TEMPLATE has no atoms assigned to the pentose bead.");
    2278             :         }
    2279          78 :         if(tmp_residue_atom[1]==0) {
    2280           0 :           error("Nucleotide residue "+Rname+" of chain "+chains[i]+" in the TEMPLATE has no atoms assigned to the nucleobase bead.");
    2281             :         }
    2282          78 :         atoms_per_bead.push_back(tmp_residue_atom[0]);
    2283          78 :         atoms_per_bead.push_back(tmp_residue_atom[1]);
    2284          78 :         if(tmp_residue_atom[2]>0) {
    2285          68 :           atoms_per_bead.push_back(tmp_residue_atom[2]);
    2286             :         }
    2287             :       }
    2288        4182 :     }
    2289             :   }
    2290             :   unsigned glyc_tot = 0;
    2291         207 :   for(unsigned s=GLYC_FUC; s<=GLYC_SIA; ++s) {
    2292         184 :     glyc_tot += glyc_count[s];
    2293             :   }
    2294             :   // Protein-glycan junction. The side-chain atom that receives the glycan loses its
    2295             :   // hydrogen and gains a heavy neighbour: ASN ND2 becomes a secondary amide, SER OG /
    2296             :   // THR OG1 / TYR OH become ethers. That is the same change of LCPO class as for a
    2297             :   // glycosidic oxygen, so the acceptor is flagged here and readLCPOparam() picks up
    2298             :   // the "_L" entry. The bead composition is untouched: the form factors are not
    2299             :   // affected, only the solvent-accessible surface.
    2300             :   unsigned nlink = 0;
    2301          23 :   if(glyc_tot>0) {
    2302           0 :     for(unsigned idx=0; idx<glyc_type.size() && idx<AtomResidueName[0].size(); ++idx) {
    2303           0 :       if(glyc_type[idx]<0) {
    2304           0 :         continue;
    2305             :       }
    2306             :       // the anomeric carbon is C1 in a pyranose and C2 in a sialic acid
    2307             :       const std::string &an = AtomResidueName[0][idx];
    2308           0 :       const bool anomeric = (glyc_type[idx]==GLYC_SIA) ? (an=="C2") : (an=="C1");
    2309           0 :       if(!anomeric || idx>=atom_numbers.size()) {
    2310           0 :         continue;
    2311             :       }
    2312           0 :       const std::vector<unsigned> nb = listHeavyBonded(atom_numbers[idx]);
    2313           0 :       for(unsigned n=0; n<nb.size(); ++n) {
    2314             :         // find the running index of the bonded atom
    2315           0 :         for(unsigned j=0; j<atom_numbers.size(); ++j) {
    2316           0 :           if(atom_numbers[j].index()!=tmpl_num[nb[n]].index()) {
    2317             :             continue;
    2318             :           }
    2319           0 :           if(glyc_type[j]<0 && j<glyc_bridge.size() && !glyc_bridge[j]) {
    2320             :             glyc_bridge[j] = true;
    2321           0 :             nlink++;
    2322             :           }
    2323             :           break;
    2324             :         }
    2325             :       }
    2326           0 :     }
    2327             :   }
    2328          23 :   if(!alias_seen.empty()) {
    2329           0 :     log.printf("  Residue-name aliases applied:\n");
    2330           0 :     for(std::map<std::string, std::pair<std::string, unsigned> >::const_iterator it=alias_seen.begin();
    2331           0 :         it!=alias_seen.end(); ++it) {
    2332           0 :       log.printf("    %-8s -> %-8s (%u residues)\n",
    2333           0 :                  it->first.c_str(), it->second.first.c_str(), it->second.second);
    2334             :     }
    2335             :   }
    2336          23 :   if(glyc_tot>0) {
    2337           0 :     const char* gname[8] = {"Fuc","Man(a)","Man(b)","Gal","Glc","GlcNAc","GalNAc","Neu5Ac"};
    2338           0 :     log.printf("  Glycan beads: %u (", glyc_tot);
    2339           0 :     for(unsigned s=GLYC_FUC; s<=GLYC_SIA; ++s) {
    2340           0 :       if(glyc_count[s]>0) {
    2341           0 :         log.printf(" %s:%u", gname[s-GLYC_FUC], glyc_count[s]);
    2342             :       }
    2343             :     }
    2344           0 :     log.printf(" ), %u bridging/ring oxygens, %u protein/nucleic linkages\n",
    2345             :                glyc_nbridge, nlink);
    2346           0 :     log.printf("  Glycan residue names as read, and the bead type each was resolved to:\n");
    2347           0 :     for(std::map<std::string, std::pair<int, unsigned> >::const_iterator it=glyc_seen.begin();
    2348           0 :         it!=glyc_seen.end(); ++it) {
    2349           0 :       log.printf("    %-8s -> %-8s (%u residues)\n", it->first.c_str(),
    2350           0 :                  gname[it->second.first-GLYC_FUC], it->second.second);
    2351             :     }
    2352             :   }
    2353             :   // the per-atom arrays are all appended by registerAtom(), so these can only fail if
    2354             :   // a future branch bypasses it
    2355          23 :   plumed_massert(atom_numbers.size()==AtomResidueName[0].size(),
    2356             :                  "getOnebeadMapping: atom_numbers and AtomResidueName out of step");
    2357          23 :   plumed_massert(atom_numbers.size()==AtomResidueName[1].size(),
    2358             :                  "getOnebeadMapping: AtomResidueName rows out of step");
    2359          23 :   plumed_massert(atom_numbers.size()==atoms_masses.size(),
    2360             :                  "getOnebeadMapping: atoms_masses out of step");
    2361          23 :   plumed_massert(atom_numbers.size()==residue_atom.size(),
    2362             :                  "getOnebeadMapping: residue_atom out of step");
    2363             : 
    2364          23 :   if(atom_numbers.size()!=atoms.size()) {
    2365           0 :     std::string msg = "The TEMPLATE describes " + std::to_string(atom_numbers.size()) +
    2366           0 :                       " atoms but ATOMS selects " + std::to_string(atoms.size()) + ". For ONEBEAD the "
    2367             :                       "TEMPLATE must contain exactly the atoms selected by ATOMS, in the same order. ";
    2368           0 :     if(atom_numbers.size()>atoms.size()) {
    2369             :       msg += "Remove from the TEMPLATE whatever is not in ATOMS (water, ions, other chains).";
    2370             :     } else {
    2371             :       msg += "The TEMPLATE is missing atoms that ATOMS selects.";
    2372             :     }
    2373           0 :     error(msg);
    2374             :   }
    2375       70373 :   for(unsigned i=0; i<atoms.size(); ++i) {
    2376       70350 :     if(atom_numbers[i].index()!=atoms[i].index()) {
    2377           0 :       error("TEMPLATE and ATOMS disagree at position " + std::to_string(i+1) + ": the TEMPLATE has atom " +
    2378           0 :             std::to_string(atom_numbers[i].serial()) + " (" + AtomResidueName[0][i] + " of " +
    2379           0 :             AtomResidueName[1][i] + ") where ATOMS has atom " + std::to_string(atoms[i].serial()) +
    2380             :             ". For ONEBEAD the two must list the same atoms in the same order; note that the TEMPLATE is "
    2381             :             "read chain by chain and, within a chain, by ascending residue number, so the atoms of each "
    2382             :             "chain must be contiguous and its residues in ascending order.");
    2383             :     }
    2384             :   }
    2385          23 :   readLCPOparam(AtomResidueName, atoms.size());
    2386          46 :   return atoms_per_bead.size();
    2387          46 : }
    2388             : 
    2389          12 : void SAXS::getMartiniFFparam(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter) {
    2390          12 :   parameter[ALA_BB].push_back(9.045);
    2391          12 :   parameter[ALA_BB].push_back(-0.098114);
    2392          12 :   parameter[ALA_BB].push_back(7.54281);
    2393          12 :   parameter[ALA_BB].push_back(-1.97438);
    2394          12 :   parameter[ALA_BB].push_back(-8.32689);
    2395          12 :   parameter[ALA_BB].push_back(6.09318);
    2396          12 :   parameter[ALA_BB].push_back(-1.18913);
    2397             : 
    2398          12 :   parameter[ARG_BB].push_back(10.729);
    2399          12 :   parameter[ARG_BB].push_back(-0.0392574);
    2400          12 :   parameter[ARG_BB].push_back(1.15382);
    2401          12 :   parameter[ARG_BB].push_back(-0.155999);
    2402          12 :   parameter[ARG_BB].push_back(-2.43619);
    2403          12 :   parameter[ARG_BB].push_back(1.72922);
    2404          12 :   parameter[ARG_BB].push_back(-0.33799);
    2405             : 
    2406          12 :   parameter[ARG_SC1].push_back(-2.796);
    2407          12 :   parameter[ARG_SC1].push_back(0.472403);
    2408          12 :   parameter[ARG_SC1].push_back(8.07424);
    2409          12 :   parameter[ARG_SC1].push_back(4.37299);
    2410          12 :   parameter[ARG_SC1].push_back(-10.7398);
    2411          12 :   parameter[ARG_SC1].push_back(4.95677);
    2412          12 :   parameter[ARG_SC1].push_back(-0.725797);
    2413             : 
    2414          12 :   parameter[ARG_SC2].push_back(15.396);
    2415          12 :   parameter[ARG_SC2].push_back(0.0636736);
    2416          12 :   parameter[ARG_SC2].push_back(-1.258);
    2417          12 :   parameter[ARG_SC2].push_back(1.93135);
    2418          12 :   parameter[ARG_SC2].push_back(-4.45031);
    2419          12 :   parameter[ARG_SC2].push_back(2.49356);
    2420          12 :   parameter[ARG_SC2].push_back(-0.410721);
    2421             : 
    2422          12 :   parameter[ASN_BB].push_back(10.738);
    2423          12 :   parameter[ASN_BB].push_back(-0.0402162);
    2424          12 :   parameter[ASN_BB].push_back(1.03007);
    2425          12 :   parameter[ASN_BB].push_back(-0.254174);
    2426          12 :   parameter[ASN_BB].push_back(-2.12015);
    2427          12 :   parameter[ASN_BB].push_back(1.55535);
    2428          12 :   parameter[ASN_BB].push_back(-0.30963);
    2429             : 
    2430          12 :   parameter[ASN_SC1].push_back(9.249);
    2431          12 :   parameter[ASN_SC1].push_back(-0.0148678);
    2432          12 :   parameter[ASN_SC1].push_back(5.52169);
    2433          12 :   parameter[ASN_SC1].push_back(0.00853212);
    2434          12 :   parameter[ASN_SC1].push_back(-6.71992);
    2435          12 :   parameter[ASN_SC1].push_back(3.93622);
    2436          12 :   parameter[ASN_SC1].push_back(-0.64973);
    2437             : 
    2438          12 :   parameter[ASP_BB].push_back(10.695);
    2439          12 :   parameter[ASP_BB].push_back(-0.0410247);
    2440          12 :   parameter[ASP_BB].push_back(1.03656);
    2441          12 :   parameter[ASP_BB].push_back(-0.298558);
    2442          12 :   parameter[ASP_BB].push_back(-2.06064);
    2443          12 :   parameter[ASP_BB].push_back(1.53495);
    2444          12 :   parameter[ASP_BB].push_back(-0.308365);
    2445             : 
    2446          12 :   parameter[ASP_SC1].push_back(9.476);
    2447          12 :   parameter[ASP_SC1].push_back(-0.0254664);
    2448          12 :   parameter[ASP_SC1].push_back(5.57899);
    2449          12 :   parameter[ASP_SC1].push_back(-0.395027);
    2450          12 :   parameter[ASP_SC1].push_back(-5.9407);
    2451          12 :   parameter[ASP_SC1].push_back(3.48836);
    2452          12 :   parameter[ASP_SC1].push_back(-0.569402);
    2453             : 
    2454          12 :   parameter[CYS_BB].push_back(10.698);
    2455          12 :   parameter[CYS_BB].push_back(-0.0233493);
    2456          12 :   parameter[CYS_BB].push_back(1.18257);
    2457          12 :   parameter[CYS_BB].push_back(0.0684464);
    2458          12 :   parameter[CYS_BB].push_back(-2.792);
    2459          12 :   parameter[CYS_BB].push_back(1.88995);
    2460          12 :   parameter[CYS_BB].push_back(-0.360229);
    2461             : 
    2462          12 :   parameter[CYS_SC1].push_back(8.199);
    2463          12 :   parameter[CYS_SC1].push_back(-0.0261569);
    2464          12 :   parameter[CYS_SC1].push_back(6.79677);
    2465          12 :   parameter[CYS_SC1].push_back(-0.343845);
    2466          12 :   parameter[CYS_SC1].push_back(-5.03578);
    2467          12 :   parameter[CYS_SC1].push_back(2.7076);
    2468          12 :   parameter[CYS_SC1].push_back(-0.420714);
    2469             : 
    2470          12 :   parameter[GLN_BB].push_back(10.728);
    2471          12 :   parameter[GLN_BB].push_back(-0.0391984);
    2472          12 :   parameter[GLN_BB].push_back(1.09264);
    2473          12 :   parameter[GLN_BB].push_back(-0.261555);
    2474          12 :   parameter[GLN_BB].push_back(-2.21245);
    2475          12 :   parameter[GLN_BB].push_back(1.62071);
    2476          12 :   parameter[GLN_BB].push_back(-0.322325);
    2477             : 
    2478          12 :   parameter[GLN_SC1].push_back(8.317);
    2479          12 :   parameter[GLN_SC1].push_back(-0.229045);
    2480          12 :   parameter[GLN_SC1].push_back(12.6338);
    2481          12 :   parameter[GLN_SC1].push_back(-7.6719);
    2482          12 :   parameter[GLN_SC1].push_back(-5.8376);
    2483          12 :   parameter[GLN_SC1].push_back(5.53784);
    2484          12 :   parameter[GLN_SC1].push_back(-1.12604);
    2485             : 
    2486          12 :   parameter[GLU_BB].push_back(10.694);
    2487          12 :   parameter[GLU_BB].push_back(-0.0521961);
    2488          12 :   parameter[GLU_BB].push_back(1.11153);
    2489          12 :   parameter[GLU_BB].push_back(-0.491995);
    2490          12 :   parameter[GLU_BB].push_back(-1.86236);
    2491          12 :   parameter[GLU_BB].push_back(1.45332);
    2492          12 :   parameter[GLU_BB].push_back(-0.29708);
    2493             : 
    2494          12 :   parameter[GLU_SC1].push_back(8.544);
    2495          12 :   parameter[GLU_SC1].push_back(-0.249555);
    2496          12 :   parameter[GLU_SC1].push_back(12.8031);
    2497          12 :   parameter[GLU_SC1].push_back(-8.42696);
    2498          12 :   parameter[GLU_SC1].push_back(-4.66486);
    2499          12 :   parameter[GLU_SC1].push_back(4.90004);
    2500          12 :   parameter[GLU_SC1].push_back(-1.01204);
    2501             : 
    2502          12 :   parameter[GLY_BB].push_back(9.977);
    2503          12 :   parameter[GLY_BB].push_back(-0.0285799);
    2504          12 :   parameter[GLY_BB].push_back(1.84236);
    2505          12 :   parameter[GLY_BB].push_back(-0.0315192);
    2506          12 :   parameter[GLY_BB].push_back(-2.88326);
    2507          12 :   parameter[GLY_BB].push_back(1.87323);
    2508          12 :   parameter[GLY_BB].push_back(-0.345773);
    2509             : 
    2510          12 :   parameter[HIS_BB].push_back(10.721);
    2511          12 :   parameter[HIS_BB].push_back(-0.0379337);
    2512          12 :   parameter[HIS_BB].push_back(1.06028);
    2513          12 :   parameter[HIS_BB].push_back(-0.236143);
    2514          12 :   parameter[HIS_BB].push_back(-2.17819);
    2515          12 :   parameter[HIS_BB].push_back(1.58357);
    2516          12 :   parameter[HIS_BB].push_back(-0.31345);
    2517             : 
    2518          12 :   parameter[HIS_SC1].push_back(-0.424);
    2519          12 :   parameter[HIS_SC1].push_back(0.665176);
    2520          12 :   parameter[HIS_SC1].push_back(3.4369);
    2521          12 :   parameter[HIS_SC1].push_back(2.93795);
    2522          12 :   parameter[HIS_SC1].push_back(-5.18288);
    2523          12 :   parameter[HIS_SC1].push_back(2.12381);
    2524          12 :   parameter[HIS_SC1].push_back(-0.284224);
    2525             : 
    2526          12 :   parameter[HIS_SC2].push_back(5.363);
    2527          12 :   parameter[HIS_SC2].push_back(-0.0176945);
    2528          12 :   parameter[HIS_SC2].push_back(2.9506);
    2529          12 :   parameter[HIS_SC2].push_back(-0.387018);
    2530          12 :   parameter[HIS_SC2].push_back(-1.83951);
    2531          12 :   parameter[HIS_SC2].push_back(0.9703);
    2532          12 :   parameter[HIS_SC2].push_back(-0.1458);
    2533             : 
    2534          12 :   parameter[HIS_SC3].push_back(5.784);
    2535          12 :   parameter[HIS_SC3].push_back(-0.0293129);
    2536          12 :   parameter[HIS_SC3].push_back(2.74167);
    2537          12 :   parameter[HIS_SC3].push_back(-0.520875);
    2538          12 :   parameter[HIS_SC3].push_back(-1.62949);
    2539          12 :   parameter[HIS_SC3].push_back(0.902379);
    2540          12 :   parameter[HIS_SC3].push_back(-0.139957);
    2541             : 
    2542          12 :   parameter[ILE_BB].push_back(10.699);
    2543          12 :   parameter[ILE_BB].push_back(-0.0188962);
    2544          12 :   parameter[ILE_BB].push_back(1.217);
    2545          12 :   parameter[ILE_BB].push_back(0.242481);
    2546          12 :   parameter[ILE_BB].push_back(-3.13898);
    2547          12 :   parameter[ILE_BB].push_back(2.07916);
    2548          12 :   parameter[ILE_BB].push_back(-0.392574);
    2549             : 
    2550          12 :   parameter[ILE_SC1].push_back(-4.448);
    2551          12 :   parameter[ILE_SC1].push_back(1.20996);
    2552          12 :   parameter[ILE_SC1].push_back(11.5141);
    2553          12 :   parameter[ILE_SC1].push_back(6.98895);
    2554          12 :   parameter[ILE_SC1].push_back(-19.1948);
    2555          12 :   parameter[ILE_SC1].push_back(9.89207);
    2556          12 :   parameter[ILE_SC1].push_back(-1.60877);
    2557             : 
    2558          12 :   parameter[LEU_BB].push_back(10.692);
    2559          12 :   parameter[LEU_BB].push_back(-0.0414917);
    2560          12 :   parameter[LEU_BB].push_back(1.1077);
    2561          12 :   parameter[LEU_BB].push_back(-0.288062);
    2562          12 :   parameter[LEU_BB].push_back(-2.17187);
    2563          12 :   parameter[LEU_BB].push_back(1.59879);
    2564          12 :   parameter[LEU_BB].push_back(-0.318545);
    2565             : 
    2566          12 :   parameter[LEU_SC1].push_back(-4.448);
    2567          12 :   parameter[LEU_SC1].push_back(2.1063);
    2568          12 :   parameter[LEU_SC1].push_back(6.72381);
    2569          12 :   parameter[LEU_SC1].push_back(14.6954);
    2570          12 :   parameter[LEU_SC1].push_back(-23.7197);
    2571          12 :   parameter[LEU_SC1].push_back(10.7247);
    2572          12 :   parameter[LEU_SC1].push_back(-1.59146);
    2573             : 
    2574          12 :   parameter[LYS_BB].push_back(10.706);
    2575          12 :   parameter[LYS_BB].push_back(-0.0468629);
    2576          12 :   parameter[LYS_BB].push_back(1.09477);
    2577          12 :   parameter[LYS_BB].push_back(-0.432751);
    2578          12 :   parameter[LYS_BB].push_back(-1.94335);
    2579          12 :   parameter[LYS_BB].push_back(1.49109);
    2580          12 :   parameter[LYS_BB].push_back(-0.302589);
    2581             : 
    2582          12 :   parameter[LYS_SC1].push_back(-2.796);
    2583          12 :   parameter[LYS_SC1].push_back(0.508044);
    2584          12 :   parameter[LYS_SC1].push_back(7.91436);
    2585          12 :   parameter[LYS_SC1].push_back(4.54097);
    2586          12 :   parameter[LYS_SC1].push_back(-10.8051);
    2587          12 :   parameter[LYS_SC1].push_back(4.96204);
    2588          12 :   parameter[LYS_SC1].push_back(-0.724414);
    2589             : 
    2590          12 :   parameter[LYS_SC2].push_back(3.070);
    2591          12 :   parameter[LYS_SC2].push_back(-0.0101448);
    2592          12 :   parameter[LYS_SC2].push_back(4.67994);
    2593          12 :   parameter[LYS_SC2].push_back(-0.792529);
    2594          12 :   parameter[LYS_SC2].push_back(-2.09142);
    2595          12 :   parameter[LYS_SC2].push_back(1.02933);
    2596          12 :   parameter[LYS_SC2].push_back(-0.137787);
    2597             : 
    2598          12 :   parameter[MET_BB].push_back(10.671);
    2599          12 :   parameter[MET_BB].push_back(-0.0433724);
    2600          12 :   parameter[MET_BB].push_back(1.13784);
    2601          12 :   parameter[MET_BB].push_back(-0.40768);
    2602          12 :   parameter[MET_BB].push_back(-2.00555);
    2603          12 :   parameter[MET_BB].push_back(1.51673);
    2604          12 :   parameter[MET_BB].push_back(-0.305547);
    2605             : 
    2606          12 :   parameter[MET_SC1].push_back(5.85);
    2607          12 :   parameter[MET_SC1].push_back(-0.0485798);
    2608          12 :   parameter[MET_SC1].push_back(17.0391);
    2609          12 :   parameter[MET_SC1].push_back(-3.65327);
    2610          12 :   parameter[MET_SC1].push_back(-13.174);
    2611          12 :   parameter[MET_SC1].push_back(8.68286);
    2612          12 :   parameter[MET_SC1].push_back(-1.56095);
    2613             : 
    2614          12 :   parameter[PHE_BB].push_back(10.741);
    2615          12 :   parameter[PHE_BB].push_back(-0.0317275);
    2616          12 :   parameter[PHE_BB].push_back(1.15599);
    2617          12 :   parameter[PHE_BB].push_back(0.0276187);
    2618          12 :   parameter[PHE_BB].push_back(-2.74757);
    2619          12 :   parameter[PHE_BB].push_back(1.88783);
    2620          12 :   parameter[PHE_BB].push_back(-0.363525);
    2621             : 
    2622          12 :   parameter[PHE_SC1].push_back(-0.636);
    2623          12 :   parameter[PHE_SC1].push_back(0.527882);
    2624          12 :   parameter[PHE_SC1].push_back(6.77612);
    2625          12 :   parameter[PHE_SC1].push_back(3.18508);
    2626          12 :   parameter[PHE_SC1].push_back(-8.92826);
    2627          12 :   parameter[PHE_SC1].push_back(4.29752);
    2628          12 :   parameter[PHE_SC1].push_back(-0.65187);
    2629             : 
    2630          12 :   parameter[PHE_SC2].push_back(-0.424);
    2631          12 :   parameter[PHE_SC2].push_back(0.389174);
    2632          12 :   parameter[PHE_SC2].push_back(4.11761);
    2633          12 :   parameter[PHE_SC2].push_back(2.29527);
    2634          12 :   parameter[PHE_SC2].push_back(-4.7652);
    2635          12 :   parameter[PHE_SC2].push_back(1.97023);
    2636          12 :   parameter[PHE_SC2].push_back(-0.262318);
    2637             : 
    2638          12 :   parameter[PHE_SC3].push_back(-0.424);
    2639          12 :   parameter[PHE_SC3].push_back(0.38927);
    2640          12 :   parameter[PHE_SC3].push_back(4.11708);
    2641          12 :   parameter[PHE_SC3].push_back(2.29623);
    2642          12 :   parameter[PHE_SC3].push_back(-4.76592);
    2643          12 :   parameter[PHE_SC3].push_back(1.97055);
    2644          12 :   parameter[PHE_SC3].push_back(-0.262381);
    2645             : 
    2646          12 :   parameter[PRO_BB].push_back(11.434);
    2647          12 :   parameter[PRO_BB].push_back(-0.033323);
    2648          12 :   parameter[PRO_BB].push_back(0.472014);
    2649          12 :   parameter[PRO_BB].push_back(-0.290854);
    2650          12 :   parameter[PRO_BB].push_back(-1.81409);
    2651          12 :   parameter[PRO_BB].push_back(1.39751);
    2652          12 :   parameter[PRO_BB].push_back(-0.280407);
    2653             : 
    2654          12 :   parameter[PRO_SC1].push_back(-2.796);
    2655          12 :   parameter[PRO_SC1].push_back(0.95668);
    2656          12 :   parameter[PRO_SC1].push_back(6.84197);
    2657          12 :   parameter[PRO_SC1].push_back(6.43774);
    2658          12 :   parameter[PRO_SC1].push_back(-12.5068);
    2659          12 :   parameter[PRO_SC1].push_back(5.64597);
    2660          12 :   parameter[PRO_SC1].push_back(-0.825206);
    2661             : 
    2662          12 :   parameter[SER_BB].push_back(10.699);
    2663          12 :   parameter[SER_BB].push_back(-0.0325828);
    2664          12 :   parameter[SER_BB].push_back(1.20329);
    2665          12 :   parameter[SER_BB].push_back(-0.0674351);
    2666          12 :   parameter[SER_BB].push_back(-2.60749);
    2667          12 :   parameter[SER_BB].push_back(1.80318);
    2668          12 :   parameter[SER_BB].push_back(-0.346803);
    2669             : 
    2670          12 :   parameter[SER_SC1].push_back(3.298);
    2671          12 :   parameter[SER_SC1].push_back(-0.0366801);
    2672          12 :   parameter[SER_SC1].push_back(5.11077);
    2673          12 :   parameter[SER_SC1].push_back(-1.46774);
    2674          12 :   parameter[SER_SC1].push_back(-1.48421);
    2675          12 :   parameter[SER_SC1].push_back(0.800326);
    2676          12 :   parameter[SER_SC1].push_back(-0.108314);
    2677             : 
    2678          12 :   parameter[THR_BB].push_back(10.697);
    2679          12 :   parameter[THR_BB].push_back(-0.0242955);
    2680          12 :   parameter[THR_BB].push_back(1.24671);
    2681          12 :   parameter[THR_BB].push_back(0.146423);
    2682          12 :   parameter[THR_BB].push_back(-2.97429);
    2683          12 :   parameter[THR_BB].push_back(1.97513);
    2684          12 :   parameter[THR_BB].push_back(-0.371479);
    2685             : 
    2686          12 :   parameter[THR_SC1].push_back(2.366);
    2687          12 :   parameter[THR_SC1].push_back(0.0297604);
    2688          12 :   parameter[THR_SC1].push_back(11.9216);
    2689          12 :   parameter[THR_SC1].push_back(-9.32503);
    2690          12 :   parameter[THR_SC1].push_back(1.9396);
    2691          12 :   parameter[THR_SC1].push_back(0.0804861);
    2692          12 :   parameter[THR_SC1].push_back(-0.0302721);
    2693             : 
    2694          12 :   parameter[TRP_BB].push_back(10.689);
    2695          12 :   parameter[TRP_BB].push_back(-0.0265879);
    2696          12 :   parameter[TRP_BB].push_back(1.17819);
    2697          12 :   parameter[TRP_BB].push_back(0.0386457);
    2698          12 :   parameter[TRP_BB].push_back(-2.75634);
    2699          12 :   parameter[TRP_BB].push_back(1.88065);
    2700          12 :   parameter[TRP_BB].push_back(-0.360217);
    2701             : 
    2702          12 :   parameter[TRP_SC1].push_back(0.084);
    2703          12 :   parameter[TRP_SC1].push_back(0.752407);
    2704          12 :   parameter[TRP_SC1].push_back(5.3802);
    2705          12 :   parameter[TRP_SC1].push_back(4.09281);
    2706          12 :   parameter[TRP_SC1].push_back(-9.28029);
    2707          12 :   parameter[TRP_SC1].push_back(4.45923);
    2708          12 :   parameter[TRP_SC1].push_back(-0.689008);
    2709             : 
    2710          12 :   parameter[TRP_SC2].push_back(5.739);
    2711          12 :   parameter[TRP_SC2].push_back(0.0298492);
    2712          12 :   parameter[TRP_SC2].push_back(4.60446);
    2713          12 :   parameter[TRP_SC2].push_back(1.34463);
    2714          12 :   parameter[TRP_SC2].push_back(-5.69968);
    2715          12 :   parameter[TRP_SC2].push_back(2.84924);
    2716          12 :   parameter[TRP_SC2].push_back(-0.433781);
    2717             : 
    2718          12 :   parameter[TRP_SC3].push_back(-0.424);
    2719          12 :   parameter[TRP_SC3].push_back(0.388576);
    2720          12 :   parameter[TRP_SC3].push_back(4.11859);
    2721          12 :   parameter[TRP_SC3].push_back(2.29485);
    2722          12 :   parameter[TRP_SC3].push_back(-4.76255);
    2723          12 :   parameter[TRP_SC3].push_back(1.96849);
    2724          12 :   parameter[TRP_SC3].push_back(-0.262015);
    2725             : 
    2726          12 :   parameter[TRP_SC4].push_back(-0.424);
    2727          12 :   parameter[TRP_SC4].push_back(0.387685);
    2728          12 :   parameter[TRP_SC4].push_back(4.12153);
    2729          12 :   parameter[TRP_SC4].push_back(2.29144);
    2730          12 :   parameter[TRP_SC4].push_back(-4.7589);
    2731          12 :   parameter[TRP_SC4].push_back(1.96686);
    2732          12 :   parameter[TRP_SC4].push_back(-0.261786);
    2733             : 
    2734          12 :   parameter[TYR_BB].push_back(10.689);
    2735          12 :   parameter[TYR_BB].push_back(-0.0193526);
    2736          12 :   parameter[TYR_BB].push_back(1.18241);
    2737          12 :   parameter[TYR_BB].push_back(0.207318);
    2738          12 :   parameter[TYR_BB].push_back(-3.0041);
    2739          12 :   parameter[TYR_BB].push_back(1.99335);
    2740          12 :   parameter[TYR_BB].push_back(-0.376482);
    2741             : 
    2742          12 :   parameter[TYR_SC1].push_back(-0.636);
    2743          12 :   parameter[TYR_SC1].push_back(0.528902);
    2744          12 :   parameter[TYR_SC1].push_back(6.78168);
    2745          12 :   parameter[TYR_SC1].push_back(3.17769);
    2746          12 :   parameter[TYR_SC1].push_back(-8.93667);
    2747          12 :   parameter[TYR_SC1].push_back(4.30692);
    2748          12 :   parameter[TYR_SC1].push_back(-0.653993);
    2749             : 
    2750          12 :   parameter[TYR_SC2].push_back(-0.424);
    2751          12 :   parameter[TYR_SC2].push_back(0.388811);
    2752          12 :   parameter[TYR_SC2].push_back(4.11851);
    2753          12 :   parameter[TYR_SC2].push_back(2.29545);
    2754          12 :   parameter[TYR_SC2].push_back(-4.7668);
    2755          12 :   parameter[TYR_SC2].push_back(1.97131);
    2756          12 :   parameter[TYR_SC2].push_back(-0.262534);
    2757             : 
    2758          12 :   parameter[TYR_SC3].push_back(4.526);
    2759          12 :   parameter[TYR_SC3].push_back(-0.00381305);
    2760          12 :   parameter[TYR_SC3].push_back(5.8567);
    2761          12 :   parameter[TYR_SC3].push_back(-0.214086);
    2762          12 :   parameter[TYR_SC3].push_back(-4.63649);
    2763          12 :   parameter[TYR_SC3].push_back(2.52869);
    2764          12 :   parameter[TYR_SC3].push_back(-0.39894);
    2765             : 
    2766          12 :   parameter[VAL_BB].push_back(10.691);
    2767          12 :   parameter[VAL_BB].push_back(-0.0162929);
    2768          12 :   parameter[VAL_BB].push_back(1.24446);
    2769          12 :   parameter[VAL_BB].push_back(0.307914);
    2770          12 :   parameter[VAL_BB].push_back(-3.27446);
    2771          12 :   parameter[VAL_BB].push_back(2.14788);
    2772          12 :   parameter[VAL_BB].push_back(-0.403259);
    2773             : 
    2774          12 :   parameter[VAL_SC1].push_back(-3.516);
    2775          12 :   parameter[VAL_SC1].push_back(1.62307);
    2776          12 :   parameter[VAL_SC1].push_back(5.43064);
    2777          12 :   parameter[VAL_SC1].push_back(9.28809);
    2778          12 :   parameter[VAL_SC1].push_back(-14.9927);
    2779          12 :   parameter[VAL_SC1].push_back(6.6133);
    2780          12 :   parameter[VAL_SC1].push_back(-0.964977);
    2781             : 
    2782          12 :   parameter[A_BB1].push_back(32.88500000);
    2783          12 :   parameter[A_BB1].push_back(0.08339900);
    2784          12 :   parameter[A_BB1].push_back(-7.36054400);
    2785          12 :   parameter[A_BB1].push_back(2.19220300);
    2786          12 :   parameter[A_BB1].push_back(-3.56523400);
    2787          12 :   parameter[A_BB1].push_back(2.33326900);
    2788          12 :   parameter[A_BB1].push_back(-0.39785500);
    2789             : 
    2790          12 :   parameter[A_BB2].push_back(3.80600000);
    2791          12 :   parameter[A_BB2].push_back(-0.10727600);
    2792          12 :   parameter[A_BB2].push_back(9.58854100);
    2793          12 :   parameter[A_BB2].push_back(-6.23740500);
    2794          12 :   parameter[A_BB2].push_back(-0.48267300);
    2795          12 :   parameter[A_BB2].push_back(1.14119500);
    2796          12 :   parameter[A_BB2].push_back(-0.21385600);
    2797             : 
    2798          12 :   parameter[A_BB3].push_back(3.59400000);
    2799          12 :   parameter[A_BB3].push_back(0.04537300);
    2800          12 :   parameter[A_BB3].push_back(9.59178900);
    2801          12 :   parameter[A_BB3].push_back(-1.29202200);
    2802          12 :   parameter[A_BB3].push_back(-7.10851000);
    2803          12 :   parameter[A_BB3].push_back(4.05571200);
    2804          12 :   parameter[A_BB3].push_back(-0.63372500);
    2805             : 
    2806          12 :   parameter[A_SC1].push_back(6.67100000);
    2807          12 :   parameter[A_SC1].push_back(-0.00855300);
    2808          12 :   parameter[A_SC1].push_back(1.63222400);
    2809          12 :   parameter[A_SC1].push_back(-0.06466200);
    2810          12 :   parameter[A_SC1].push_back(-1.48694200);
    2811          12 :   parameter[A_SC1].push_back(0.78544600);
    2812          12 :   parameter[A_SC1].push_back(-0.12083500);
    2813             : 
    2814          12 :   parameter[A_SC2].push_back(5.95100000);
    2815          12 :   parameter[A_SC2].push_back(-0.02606600);
    2816          12 :   parameter[A_SC2].push_back(2.54399900);
    2817          12 :   parameter[A_SC2].push_back(-0.48436900);
    2818          12 :   parameter[A_SC2].push_back(-1.55357400);
    2819          12 :   parameter[A_SC2].push_back(0.86466900);
    2820          12 :   parameter[A_SC2].push_back(-0.13509000);
    2821             : 
    2822          12 :   parameter[A_SC3].push_back(11.39400000);
    2823          12 :   parameter[A_SC3].push_back(0.00871300);
    2824          12 :   parameter[A_SC3].push_back(-0.23891300);
    2825          12 :   parameter[A_SC3].push_back(0.48919400);
    2826          12 :   parameter[A_SC3].push_back(-1.75289400);
    2827          12 :   parameter[A_SC3].push_back(0.99267500);
    2828          12 :   parameter[A_SC3].push_back(-0.16291300);
    2829             : 
    2830          12 :   parameter[A_SC4].push_back(6.45900000);
    2831          12 :   parameter[A_SC4].push_back(0.01990600);
    2832          12 :   parameter[A_SC4].push_back(4.17970400);
    2833          12 :   parameter[A_SC4].push_back(0.97629900);
    2834          12 :   parameter[A_SC4].push_back(-5.03297800);
    2835          12 :   parameter[A_SC4].push_back(2.55576700);
    2836          12 :   parameter[A_SC4].push_back(-0.39150500);
    2837             : 
    2838          12 :   parameter[A_3TE].push_back(4.23000000);
    2839          12 :   parameter[A_3TE].push_back(0.00064800);
    2840          12 :   parameter[A_3TE].push_back(0.92124600);
    2841          12 :   parameter[A_3TE].push_back(0.08064300);
    2842          12 :   parameter[A_3TE].push_back(-0.39054400);
    2843          12 :   parameter[A_3TE].push_back(0.12429100);
    2844          12 :   parameter[A_3TE].push_back(-0.01122700);
    2845             : 
    2846          12 :   parameter[A_5TE].push_back(4.23000000);
    2847          12 :   parameter[A_5TE].push_back(0.00039300);
    2848          12 :   parameter[A_5TE].push_back(0.92305100);
    2849          12 :   parameter[A_5TE].push_back(0.07747500);
    2850          12 :   parameter[A_5TE].push_back(-0.38792100);
    2851          12 :   parameter[A_5TE].push_back(0.12323800);
    2852          12 :   parameter[A_5TE].push_back(-0.01106600);
    2853             : 
    2854          12 :   parameter[A_TE3].push_back(7.82400000);
    2855          12 :   parameter[A_TE3].push_back(-0.04881000);
    2856          12 :   parameter[A_TE3].push_back(8.21557900);
    2857          12 :   parameter[A_TE3].push_back(-0.89491400);
    2858          12 :   parameter[A_TE3].push_back(-9.54293700);
    2859          12 :   parameter[A_TE3].push_back(6.33122200);
    2860          12 :   parameter[A_TE3].push_back(-1.16672900);
    2861             : 
    2862          12 :   parameter[A_TE5].push_back(8.03600000);
    2863          12 :   parameter[A_TE5].push_back(0.01641200);
    2864          12 :   parameter[A_TE5].push_back(5.14902200);
    2865          12 :   parameter[A_TE5].push_back(0.83419700);
    2866          12 :   parameter[A_TE5].push_back(-7.59068300);
    2867          12 :   parameter[A_TE5].push_back(4.52063200);
    2868          12 :   parameter[A_TE5].push_back(-0.78260800);
    2869             : 
    2870          12 :   parameter[C_BB1].push_back(32.88500000);
    2871          12 :   parameter[C_BB1].push_back(0.08311100);
    2872          12 :   parameter[C_BB1].push_back(-7.35432100);
    2873          12 :   parameter[C_BB1].push_back(2.18610000);
    2874          12 :   parameter[C_BB1].push_back(-3.55788300);
    2875          12 :   parameter[C_BB1].push_back(2.32918700);
    2876          12 :   parameter[C_BB1].push_back(-0.39720000);
    2877             : 
    2878          12 :   parameter[C_BB2].push_back(3.80600000);
    2879          12 :   parameter[C_BB2].push_back(-0.10808100);
    2880          12 :   parameter[C_BB2].push_back(9.61612600);
    2881          12 :   parameter[C_BB2].push_back(-6.28595400);
    2882          12 :   parameter[C_BB2].push_back(-0.45187000);
    2883          12 :   parameter[C_BB2].push_back(1.13326000);
    2884          12 :   parameter[C_BB2].push_back(-0.21320300);
    2885             : 
    2886          12 :   parameter[C_BB3].push_back(3.59400000);
    2887          12 :   parameter[C_BB3].push_back(0.04484200);
    2888          12 :   parameter[C_BB3].push_back(9.61919800);
    2889          12 :   parameter[C_BB3].push_back(-1.33582800);
    2890          12 :   parameter[C_BB3].push_back(-7.07200400);
    2891          12 :   parameter[C_BB3].push_back(4.03952900);
    2892          12 :   parameter[C_BB3].push_back(-0.63098200);
    2893             : 
    2894          12 :   parameter[C_SC1].push_back(5.95100000);
    2895          12 :   parameter[C_SC1].push_back(-0.02911300);
    2896          12 :   parameter[C_SC1].push_back(2.59700400);
    2897          12 :   parameter[C_SC1].push_back(-0.55507700);
    2898          12 :   parameter[C_SC1].push_back(-1.56344600);
    2899          12 :   parameter[C_SC1].push_back(0.88956200);
    2900          12 :   parameter[C_SC1].push_back(-0.14061300);
    2901             : 
    2902          12 :   parameter[C_SC2].push_back(11.62100000);
    2903          12 :   parameter[C_SC2].push_back(0.01366100);
    2904          12 :   parameter[C_SC2].push_back(-0.25959200);
    2905          12 :   parameter[C_SC2].push_back(0.48918300);
    2906          12 :   parameter[C_SC2].push_back(-1.52550500);
    2907          12 :   parameter[C_SC2].push_back(0.83644100);
    2908          12 :   parameter[C_SC2].push_back(-0.13407300);
    2909             : 
    2910          12 :   parameter[C_SC3].push_back(5.01900000);
    2911          12 :   parameter[C_SC3].push_back(-0.03276100);
    2912          12 :   parameter[C_SC3].push_back(5.53776900);
    2913          12 :   parameter[C_SC3].push_back(-0.95105000);
    2914          12 :   parameter[C_SC3].push_back(-3.71130800);
    2915          12 :   parameter[C_SC3].push_back(2.16146000);
    2916          12 :   parameter[C_SC3].push_back(-0.34918600);
    2917             : 
    2918          12 :   parameter[C_3TE].push_back(4.23000000);
    2919          12 :   parameter[C_3TE].push_back(0.00057300);
    2920          12 :   parameter[C_3TE].push_back(0.92174800);
    2921          12 :   parameter[C_3TE].push_back(0.07964500);
    2922          12 :   parameter[C_3TE].push_back(-0.38965700);
    2923          12 :   parameter[C_3TE].push_back(0.12392500);
    2924          12 :   parameter[C_3TE].push_back(-0.01117000);
    2925             : 
    2926          12 :   parameter[C_5TE].push_back(4.23000000);
    2927          12 :   parameter[C_5TE].push_back(0.00071000);
    2928          12 :   parameter[C_5TE].push_back(0.92082800);
    2929          12 :   parameter[C_5TE].push_back(0.08150600);
    2930          12 :   parameter[C_5TE].push_back(-0.39127000);
    2931          12 :   parameter[C_5TE].push_back(0.12455900);
    2932          12 :   parameter[C_5TE].push_back(-0.01126300);
    2933             : 
    2934          12 :   parameter[C_TE3].push_back(7.82400000);
    2935          12 :   parameter[C_TE3].push_back(-0.05848300);
    2936          12 :   parameter[C_TE3].push_back(8.29319900);
    2937          12 :   parameter[C_TE3].push_back(-1.12563800);
    2938          12 :   parameter[C_TE3].push_back(-9.42197600);
    2939          12 :   parameter[C_TE3].push_back(6.35441700);
    2940          12 :   parameter[C_TE3].push_back(-1.18356900);
    2941             : 
    2942          12 :   parameter[C_TE5].push_back(8.03600000);
    2943          12 :   parameter[C_TE5].push_back(0.00493500);
    2944          12 :   parameter[C_TE5].push_back(4.92622000);
    2945          12 :   parameter[C_TE5].push_back(0.64810700);
    2946          12 :   parameter[C_TE5].push_back(-7.05100000);
    2947          12 :   parameter[C_TE5].push_back(4.26064400);
    2948          12 :   parameter[C_TE5].push_back(-0.74819100);
    2949             : 
    2950          12 :   parameter[G_BB1].push_back(32.88500000);
    2951          12 :   parameter[G_BB1].push_back(0.08325400);
    2952          12 :   parameter[G_BB1].push_back(-7.35736000);
    2953          12 :   parameter[G_BB1].push_back(2.18914800);
    2954          12 :   parameter[G_BB1].push_back(-3.56154800);
    2955          12 :   parameter[G_BB1].push_back(2.33120600);
    2956          12 :   parameter[G_BB1].push_back(-0.39752300);
    2957             : 
    2958          12 :   parameter[G_BB2].push_back(3.80600000);
    2959          12 :   parameter[G_BB2].push_back(-0.10788300);
    2960          12 :   parameter[G_BB2].push_back(9.60930800);
    2961          12 :   parameter[G_BB2].push_back(-6.27402500);
    2962          12 :   parameter[G_BB2].push_back(-0.46192700);
    2963          12 :   parameter[G_BB2].push_back(1.13737000);
    2964          12 :   parameter[G_BB2].push_back(-0.21383100);
    2965             : 
    2966          12 :   parameter[G_BB3].push_back(3.59400000);
    2967          12 :   parameter[G_BB3].push_back(0.04514500);
    2968          12 :   parameter[G_BB3].push_back(9.61234700);
    2969          12 :   parameter[G_BB3].push_back(-1.31542100);
    2970          12 :   parameter[G_BB3].push_back(-7.09150500);
    2971          12 :   parameter[G_BB3].push_back(4.04706200);
    2972          12 :   parameter[G_BB3].push_back(-0.63201000);
    2973             : 
    2974          12 :   parameter[G_SC1].push_back(6.67100000);
    2975          12 :   parameter[G_SC1].push_back(-0.00863200);
    2976          12 :   parameter[G_SC1].push_back(1.63252300);
    2977          12 :   parameter[G_SC1].push_back(-0.06567200);
    2978          12 :   parameter[G_SC1].push_back(-1.48680500);
    2979          12 :   parameter[G_SC1].push_back(0.78565600);
    2980          12 :   parameter[G_SC1].push_back(-0.12088900);
    2981             : 
    2982          12 :   parameter[G_SC2].push_back(11.39400000);
    2983          12 :   parameter[G_SC2].push_back(0.00912200);
    2984          12 :   parameter[G_SC2].push_back(-0.22869000);
    2985          12 :   parameter[G_SC2].push_back(0.49616400);
    2986          12 :   parameter[G_SC2].push_back(-1.75039000);
    2987          12 :   parameter[G_SC2].push_back(0.98649200);
    2988          12 :   parameter[G_SC2].push_back(-0.16141600);
    2989             : 
    2990          12 :   parameter[G_SC3].push_back(10.90100000);
    2991          12 :   parameter[G_SC3].push_back(0.02208700);
    2992          12 :   parameter[G_SC3].push_back(0.17032800);
    2993          12 :   parameter[G_SC3].push_back(0.73280800);
    2994          12 :   parameter[G_SC3].push_back(-1.95292000);
    2995          12 :   parameter[G_SC3].push_back(0.98357600);
    2996          12 :   parameter[G_SC3].push_back(-0.14790900);
    2997             : 
    2998          12 :   parameter[G_SC4].push_back(6.45900000);
    2999          12 :   parameter[G_SC4].push_back(0.02023700);
    3000          12 :   parameter[G_SC4].push_back(4.17655400);
    3001          12 :   parameter[G_SC4].push_back(0.98731800);
    3002          12 :   parameter[G_SC4].push_back(-5.04352800);
    3003          12 :   parameter[G_SC4].push_back(2.56059400);
    3004          12 :   parameter[G_SC4].push_back(-0.39234300);
    3005             : 
    3006          12 :   parameter[G_3TE].push_back(4.23000000);
    3007          12 :   parameter[G_3TE].push_back(0.00066300);
    3008          12 :   parameter[G_3TE].push_back(0.92118800);
    3009          12 :   parameter[G_3TE].push_back(0.08062700);
    3010          12 :   parameter[G_3TE].push_back(-0.39041600);
    3011          12 :   parameter[G_3TE].push_back(0.12419400);
    3012          12 :   parameter[G_3TE].push_back(-0.01120500);
    3013             : 
    3014          12 :   parameter[G_5TE].push_back(4.23000000);
    3015          12 :   parameter[G_5TE].push_back(0.00062800);
    3016          12 :   parameter[G_5TE].push_back(0.92133500);
    3017          12 :   parameter[G_5TE].push_back(0.08029900);
    3018          12 :   parameter[G_5TE].push_back(-0.39015300);
    3019          12 :   parameter[G_5TE].push_back(0.12411600);
    3020          12 :   parameter[G_5TE].push_back(-0.01119900);
    3021             : 
    3022          12 :   parameter[G_TE3].push_back(7.82400000);
    3023          12 :   parameter[G_TE3].push_back(-0.05177400);
    3024          12 :   parameter[G_TE3].push_back(8.34606700);
    3025          12 :   parameter[G_TE3].push_back(-1.02936300);
    3026          12 :   parameter[G_TE3].push_back(-9.55211900);
    3027          12 :   parameter[G_TE3].push_back(6.37776600);
    3028          12 :   parameter[G_TE3].push_back(-1.17898000);
    3029             : 
    3030          12 :   parameter[G_TE5].push_back(8.03600000);
    3031          12 :   parameter[G_TE5].push_back(0.00525100);
    3032          12 :   parameter[G_TE5].push_back(4.71070600);
    3033          12 :   parameter[G_TE5].push_back(0.66746900);
    3034          12 :   parameter[G_TE5].push_back(-6.72538700);
    3035          12 :   parameter[G_TE5].push_back(4.03644100);
    3036          12 :   parameter[G_TE5].push_back(-0.70605700);
    3037             : 
    3038          12 :   parameter[U_BB1].push_back(32.88500000);
    3039          12 :   parameter[U_BB1].push_back(0.08321400);
    3040          12 :   parameter[U_BB1].push_back(-7.35634900);
    3041          12 :   parameter[U_BB1].push_back(2.18826800);
    3042          12 :   parameter[U_BB1].push_back(-3.56047400);
    3043          12 :   parameter[U_BB1].push_back(2.33064700);
    3044          12 :   parameter[U_BB1].push_back(-0.39744000);
    3045             : 
    3046          12 :   parameter[U_BB2].push_back(3.80600000);
    3047          12 :   parameter[U_BB2].push_back(-0.10773100);
    3048          12 :   parameter[U_BB2].push_back(9.60099900);
    3049          12 :   parameter[U_BB2].push_back(-6.26131900);
    3050          12 :   parameter[U_BB2].push_back(-0.46668300);
    3051          12 :   parameter[U_BB2].push_back(1.13698100);
    3052          12 :   parameter[U_BB2].push_back(-0.21351600);
    3053             : 
    3054          12 :   parameter[U_BB3].push_back(3.59400000);
    3055          12 :   parameter[U_BB3].push_back(0.04544300);
    3056          12 :   parameter[U_BB3].push_back(9.59625900);
    3057          12 :   parameter[U_BB3].push_back(-1.29222200);
    3058          12 :   parameter[U_BB3].push_back(-7.11143200);
    3059          12 :   parameter[U_BB3].push_back(4.05687700);
    3060          12 :   parameter[U_BB3].push_back(-0.63382800);
    3061             : 
    3062          12 :   parameter[U_SC1].push_back(5.95100000);
    3063          12 :   parameter[U_SC1].push_back(-0.02924500);
    3064          12 :   parameter[U_SC1].push_back(2.59668700);
    3065          12 :   parameter[U_SC1].push_back(-0.56118700);
    3066          12 :   parameter[U_SC1].push_back(-1.56477100);
    3067          12 :   parameter[U_SC1].push_back(0.89265100);
    3068          12 :   parameter[U_SC1].push_back(-0.14130800);
    3069             : 
    3070          12 :   parameter[U_SC2].push_back(10.90100000);
    3071          12 :   parameter[U_SC2].push_back(0.02178900);
    3072          12 :   parameter[U_SC2].push_back(0.18839000);
    3073          12 :   parameter[U_SC2].push_back(0.72223100);
    3074          12 :   parameter[U_SC2].push_back(-1.92581600);
    3075          12 :   parameter[U_SC2].push_back(0.96654300);
    3076          12 :   parameter[U_SC2].push_back(-0.14501300);
    3077             : 
    3078          12 :   parameter[U_SC3].push_back(5.24600000);
    3079          12 :   parameter[U_SC3].push_back(-0.04586500);
    3080          12 :   parameter[U_SC3].push_back(5.89978100);
    3081          12 :   parameter[U_SC3].push_back(-1.50664700);
    3082          12 :   parameter[U_SC3].push_back(-3.17054400);
    3083          12 :   parameter[U_SC3].push_back(1.93717100);
    3084          12 :   parameter[U_SC3].push_back(-0.31701000);
    3085             : 
    3086          12 :   parameter[U_3TE].push_back(4.23000000);
    3087          12 :   parameter[U_3TE].push_back(0.00067500);
    3088          12 :   parameter[U_3TE].push_back(0.92102300);
    3089          12 :   parameter[U_3TE].push_back(0.08100800);
    3090          12 :   parameter[U_3TE].push_back(-0.39084300);
    3091          12 :   parameter[U_3TE].push_back(0.12441900);
    3092          12 :   parameter[U_3TE].push_back(-0.01124900);
    3093             : 
    3094          12 :   parameter[U_5TE].push_back(4.23000000);
    3095          12 :   parameter[U_5TE].push_back(0.00059000);
    3096          12 :   parameter[U_5TE].push_back(0.92154600);
    3097          12 :   parameter[U_5TE].push_back(0.07968200);
    3098          12 :   parameter[U_5TE].push_back(-0.38950100);
    3099          12 :   parameter[U_5TE].push_back(0.12382500);
    3100          12 :   parameter[U_5TE].push_back(-0.01115100);
    3101             : 
    3102          12 :   parameter[U_TE3].push_back(7.82400000);
    3103          12 :   parameter[U_TE3].push_back(-0.02968100);
    3104          12 :   parameter[U_TE3].push_back(7.93783200);
    3105          12 :   parameter[U_TE3].push_back(-0.33078100);
    3106          12 :   parameter[U_TE3].push_back(-10.14120200);
    3107          12 :   parameter[U_TE3].push_back(6.63334700);
    3108          12 :   parameter[U_TE3].push_back(-1.22111200);
    3109             : 
    3110          12 :   parameter[U_TE5].push_back(8.03600000);
    3111          12 :   parameter[U_TE5].push_back(-0.00909700);
    3112          12 :   parameter[U_TE5].push_back(4.33193500);
    3113          12 :   parameter[U_TE5].push_back(0.43416500);
    3114          12 :   parameter[U_TE5].push_back(-5.80831400);
    3115          12 :   parameter[U_TE5].push_back(3.52438800);
    3116          12 :   parameter[U_TE5].push_back(-0.62382400);
    3117             : 
    3118          12 :   parameter[DA_BB1].push_back(32.88500000);
    3119          12 :   parameter[DA_BB1].push_back(0.08179900);
    3120          12 :   parameter[DA_BB1].push_back(-7.31735900);
    3121          12 :   parameter[DA_BB1].push_back(2.15614500);
    3122          12 :   parameter[DA_BB1].push_back(-3.52263200);
    3123          12 :   parameter[DA_BB1].push_back(2.30604700);
    3124          12 :   parameter[DA_BB1].push_back(-0.39270100);
    3125             : 
    3126          12 :   parameter[DA_BB2].push_back(3.80600000);
    3127          12 :   parameter[DA_BB2].push_back(-0.10597700);
    3128          12 :   parameter[DA_BB2].push_back(9.52537500);
    3129          12 :   parameter[DA_BB2].push_back(-6.12991000);
    3130          12 :   parameter[DA_BB2].push_back(-0.54092600);
    3131          12 :   parameter[DA_BB2].push_back(1.15429100);
    3132          12 :   parameter[DA_BB2].push_back(-0.21503500);
    3133             : 
    3134          12 :   parameter[DA_BB3].push_back(-1.35600000);
    3135          12 :   parameter[DA_BB3].push_back(0.58928300);
    3136          12 :   parameter[DA_BB3].push_back(6.71894100);
    3137          12 :   parameter[DA_BB3].push_back(4.14050900);
    3138          12 :   parameter[DA_BB3].push_back(-9.65859900);
    3139          12 :   parameter[DA_BB3].push_back(4.43185000);
    3140          12 :   parameter[DA_BB3].push_back(-0.64657300);
    3141             : 
    3142          12 :   parameter[DA_SC1].push_back(6.67100000);
    3143          12 :   parameter[DA_SC1].push_back(-0.00871400);
    3144          12 :   parameter[DA_SC1].push_back(1.63289100);
    3145          12 :   parameter[DA_SC1].push_back(-0.06637700);
    3146          12 :   parameter[DA_SC1].push_back(-1.48632900);
    3147          12 :   parameter[DA_SC1].push_back(0.78551800);
    3148          12 :   parameter[DA_SC1].push_back(-0.12087300);
    3149             : 
    3150          12 :   parameter[DA_SC2].push_back(5.95100000);
    3151          12 :   parameter[DA_SC2].push_back(-0.02634300);
    3152          12 :   parameter[DA_SC2].push_back(2.54864300);
    3153          12 :   parameter[DA_SC2].push_back(-0.49015800);
    3154          12 :   parameter[DA_SC2].push_back(-1.55386900);
    3155          12 :   parameter[DA_SC2].push_back(0.86630200);
    3156          12 :   parameter[DA_SC2].push_back(-0.13546200);
    3157             : 
    3158          12 :   parameter[DA_SC3].push_back(11.39400000);
    3159          12 :   parameter[DA_SC3].push_back(0.00859500);
    3160          12 :   parameter[DA_SC3].push_back(-0.25471400);
    3161          12 :   parameter[DA_SC3].push_back(0.48718800);
    3162          12 :   parameter[DA_SC3].push_back(-1.74520000);
    3163          12 :   parameter[DA_SC3].push_back(0.99246200);
    3164          12 :   parameter[DA_SC3].push_back(-0.16351900);
    3165             : 
    3166          12 :   parameter[DA_SC4].push_back(6.45900000);
    3167          12 :   parameter[DA_SC4].push_back(0.01991800);
    3168          12 :   parameter[DA_SC4].push_back(4.17962300);
    3169          12 :   parameter[DA_SC4].push_back(0.97469100);
    3170          12 :   parameter[DA_SC4].push_back(-5.02950400);
    3171          12 :   parameter[DA_SC4].push_back(2.55371800);
    3172          12 :   parameter[DA_SC4].push_back(-0.39113400);
    3173             : 
    3174          12 :   parameter[DA_3TE].push_back(4.23000000);
    3175          12 :   parameter[DA_3TE].push_back(0.00062600);
    3176          12 :   parameter[DA_3TE].push_back(0.92142000);
    3177          12 :   parameter[DA_3TE].push_back(0.08016400);
    3178          12 :   parameter[DA_3TE].push_back(-0.39000300);
    3179          12 :   parameter[DA_3TE].push_back(0.12402500);
    3180          12 :   parameter[DA_3TE].push_back(-0.01117900);
    3181             : 
    3182          12 :   parameter[DA_5TE].push_back(4.23000000);
    3183          12 :   parameter[DA_5TE].push_back(0.00055500);
    3184          12 :   parameter[DA_5TE].push_back(0.92183900);
    3185          12 :   parameter[DA_5TE].push_back(0.07907600);
    3186          12 :   parameter[DA_5TE].push_back(-0.38895100);
    3187          12 :   parameter[DA_5TE].push_back(0.12359600);
    3188          12 :   parameter[DA_5TE].push_back(-0.01111600);
    3189             : 
    3190          12 :   parameter[DA_TE3].push_back(2.87400000);
    3191          12 :   parameter[DA_TE3].push_back(0.00112900);
    3192          12 :   parameter[DA_TE3].push_back(12.51167200);
    3193          12 :   parameter[DA_TE3].push_back(-7.67548000);
    3194          12 :   parameter[DA_TE3].push_back(-2.02234000);
    3195          12 :   parameter[DA_TE3].push_back(2.50837100);
    3196          12 :   parameter[DA_TE3].push_back(-0.49458500);
    3197             : 
    3198          12 :   parameter[DA_TE5].push_back(8.03600000);
    3199          12 :   parameter[DA_TE5].push_back(0.00473100);
    3200          12 :   parameter[DA_TE5].push_back(4.65554400);
    3201          12 :   parameter[DA_TE5].push_back(0.66424100);
    3202          12 :   parameter[DA_TE5].push_back(-6.62131300);
    3203          12 :   parameter[DA_TE5].push_back(3.96107400);
    3204          12 :   parameter[DA_TE5].push_back(-0.69075800);
    3205             : 
    3206          12 :   parameter[DC_BB1].push_back(32.88500000);
    3207          12 :   parameter[DC_BB1].push_back(0.08189900);
    3208          12 :   parameter[DC_BB1].push_back(-7.32493500);
    3209          12 :   parameter[DC_BB1].push_back(2.15976900);
    3210          12 :   parameter[DC_BB1].push_back(-3.52612100);
    3211          12 :   parameter[DC_BB1].push_back(2.31058600);
    3212          12 :   parameter[DC_BB1].push_back(-0.39402700);
    3213             : 
    3214          12 :   parameter[DC_BB2].push_back(3.80600000);
    3215          12 :   parameter[DC_BB2].push_back(-0.10559800);
    3216          12 :   parameter[DC_BB2].push_back(9.52527700);
    3217          12 :   parameter[DC_BB2].push_back(-6.12131700);
    3218          12 :   parameter[DC_BB2].push_back(-0.54899400);
    3219          12 :   parameter[DC_BB2].push_back(1.15592900);
    3220          12 :   parameter[DC_BB2].push_back(-0.21494500);
    3221             : 
    3222          12 :   parameter[DC_BB3].push_back(-1.35600000);
    3223          12 :   parameter[DC_BB3].push_back(0.55525700);
    3224          12 :   parameter[DC_BB3].push_back(6.80305500);
    3225          12 :   parameter[DC_BB3].push_back(4.05924700);
    3226          12 :   parameter[DC_BB3].push_back(-9.61034700);
    3227          12 :   parameter[DC_BB3].push_back(4.41253800);
    3228          12 :   parameter[DC_BB3].push_back(-0.64315100);
    3229             : 
    3230          12 :   parameter[DC_SC1].push_back(5.95100000);
    3231          12 :   parameter[DC_SC1].push_back(-0.02899900);
    3232          12 :   parameter[DC_SC1].push_back(2.59587800);
    3233          12 :   parameter[DC_SC1].push_back(-0.55388300);
    3234          12 :   parameter[DC_SC1].push_back(-1.56395100);
    3235          12 :   parameter[DC_SC1].push_back(0.88967400);
    3236          12 :   parameter[DC_SC1].push_back(-0.14062500);
    3237             : 
    3238          12 :   parameter[DC_SC2].push_back(11.62100000);
    3239          12 :   parameter[DC_SC2].push_back(0.01358100);
    3240          12 :   parameter[DC_SC2].push_back(-0.24913000);
    3241          12 :   parameter[DC_SC2].push_back(0.48787200);
    3242          12 :   parameter[DC_SC2].push_back(-1.52867300);
    3243          12 :   parameter[DC_SC2].push_back(0.83694900);
    3244          12 :   parameter[DC_SC2].push_back(-0.13395300);
    3245             : 
    3246          12 :   parameter[DC_SC3].push_back(5.01900000);
    3247          12 :   parameter[DC_SC3].push_back(-0.03298400);
    3248          12 :   parameter[DC_SC3].push_back(5.54242800);
    3249          12 :   parameter[DC_SC3].push_back(-0.96081500);
    3250          12 :   parameter[DC_SC3].push_back(-3.71051600);
    3251          12 :   parameter[DC_SC3].push_back(2.16500200);
    3252          12 :   parameter[DC_SC3].push_back(-0.35023400);
    3253             : 
    3254          12 :   parameter[DC_3TE].push_back(4.23000000);
    3255          12 :   parameter[DC_3TE].push_back(0.00055700);
    3256          12 :   parameter[DC_3TE].push_back(0.92181400);
    3257          12 :   parameter[DC_3TE].push_back(0.07924000);
    3258          12 :   parameter[DC_3TE].push_back(-0.38916400);
    3259          12 :   parameter[DC_3TE].push_back(0.12369900);
    3260          12 :   parameter[DC_3TE].push_back(-0.01113300);
    3261             : 
    3262          12 :   parameter[DC_5TE].push_back(4.23000000);
    3263          12 :   parameter[DC_5TE].push_back(0.00066500);
    3264          12 :   parameter[DC_5TE].push_back(0.92103900);
    3265          12 :   parameter[DC_5TE].push_back(0.08064600);
    3266          12 :   parameter[DC_5TE].push_back(-0.39034900);
    3267          12 :   parameter[DC_5TE].push_back(0.12417600);
    3268          12 :   parameter[DC_5TE].push_back(-0.01120600);
    3269             : 
    3270          12 :   parameter[DC_TE3].push_back(2.87400000);
    3271          12 :   parameter[DC_TE3].push_back(-0.05235500);
    3272          12 :   parameter[DC_TE3].push_back(13.09201200);
    3273          12 :   parameter[DC_TE3].push_back(-9.48128200);
    3274          12 :   parameter[DC_TE3].push_back(-0.14958600);
    3275          12 :   parameter[DC_TE3].push_back(1.75537200);
    3276          12 :   parameter[DC_TE3].push_back(-0.39347500);
    3277             : 
    3278          12 :   parameter[DC_TE5].push_back(8.03600000);
    3279          12 :   parameter[DC_TE5].push_back(-0.00513600);
    3280          12 :   parameter[DC_TE5].push_back(4.67705700);
    3281          12 :   parameter[DC_TE5].push_back(0.48333300);
    3282          12 :   parameter[DC_TE5].push_back(-6.34511000);
    3283          12 :   parameter[DC_TE5].push_back(3.83388500);
    3284          12 :   parameter[DC_TE5].push_back(-0.67367800);
    3285             : 
    3286          12 :   parameter[DG_BB1].push_back(32.88500000);
    3287          12 :   parameter[DG_BB1].push_back(0.08182900);
    3288          12 :   parameter[DG_BB1].push_back(-7.32133900);
    3289          12 :   parameter[DG_BB1].push_back(2.15767900);
    3290          12 :   parameter[DG_BB1].push_back(-3.52369700);
    3291          12 :   parameter[DG_BB1].push_back(2.30839600);
    3292          12 :   parameter[DG_BB1].push_back(-0.39348300);
    3293             : 
    3294          12 :   parameter[DG_BB2].push_back(3.80600000);
    3295          12 :   parameter[DG_BB2].push_back(-0.10618100);
    3296          12 :   parameter[DG_BB2].push_back(9.54169000);
    3297          12 :   parameter[DG_BB2].push_back(-6.15177600);
    3298          12 :   parameter[DG_BB2].push_back(-0.53462400);
    3299          12 :   parameter[DG_BB2].push_back(1.15581300);
    3300          12 :   parameter[DG_BB2].push_back(-0.21567000);
    3301             : 
    3302          12 :   parameter[DG_BB3].push_back(-1.35600000);
    3303          12 :   parameter[DG_BB3].push_back(0.57489100);
    3304          12 :   parameter[DG_BB3].push_back(6.75164700);
    3305          12 :   parameter[DG_BB3].push_back(4.11300900);
    3306          12 :   parameter[DG_BB3].push_back(-9.63394600);
    3307          12 :   parameter[DG_BB3].push_back(4.41675400);
    3308          12 :   parameter[DG_BB3].push_back(-0.64339900);
    3309             : 
    3310          12 :   parameter[DG_SC1].push_back(6.67100000);
    3311          12 :   parameter[DG_SC1].push_back(-0.00886600);
    3312          12 :   parameter[DG_SC1].push_back(1.63333000);
    3313          12 :   parameter[DG_SC1].push_back(-0.06892100);
    3314          12 :   parameter[DG_SC1].push_back(-1.48683500);
    3315          12 :   parameter[DG_SC1].push_back(0.78670800);
    3316          12 :   parameter[DG_SC1].push_back(-0.12113900);
    3317             : 
    3318          12 :   parameter[DG_SC2].push_back(11.39400000);
    3319          12 :   parameter[DG_SC2].push_back(0.00907900);
    3320          12 :   parameter[DG_SC2].push_back(-0.22475500);
    3321          12 :   parameter[DG_SC2].push_back(0.49535100);
    3322          12 :   parameter[DG_SC2].push_back(-1.75324900);
    3323          12 :   parameter[DG_SC2].push_back(0.98767400);
    3324          12 :   parameter[DG_SC2].push_back(-0.16150800);
    3325             : 
    3326          12 :   parameter[DG_SC3].push_back(10.90100000);
    3327          12 :   parameter[DG_SC3].push_back(0.02207600);
    3328          12 :   parameter[DG_SC3].push_back(0.17932200);
    3329          12 :   parameter[DG_SC3].push_back(0.73253200);
    3330          12 :   parameter[DG_SC3].push_back(-1.95554900);
    3331          12 :   parameter[DG_SC3].push_back(0.98339900);
    3332          12 :   parameter[DG_SC3].push_back(-0.14763600);
    3333             : 
    3334          12 :   parameter[DG_SC4].push_back(6.45900000);
    3335          12 :   parameter[DG_SC4].push_back(0.02018400);
    3336          12 :   parameter[DG_SC4].push_back(4.17705400);
    3337          12 :   parameter[DG_SC4].push_back(0.98531700);
    3338          12 :   parameter[DG_SC4].push_back(-5.04354900);
    3339          12 :   parameter[DG_SC4].push_back(2.56123700);
    3340          12 :   parameter[DG_SC4].push_back(-0.39249300);
    3341             : 
    3342          12 :   parameter[DG_3TE].push_back(4.23000000);
    3343          12 :   parameter[DG_3TE].push_back(0.00061700);
    3344          12 :   parameter[DG_3TE].push_back(0.92140100);
    3345          12 :   parameter[DG_3TE].push_back(0.08016400);
    3346          12 :   parameter[DG_3TE].push_back(-0.39003500);
    3347          12 :   parameter[DG_3TE].push_back(0.12406900);
    3348          12 :   parameter[DG_3TE].push_back(-0.01119200);
    3349             : 
    3350          12 :   parameter[DG_5TE].push_back(4.23000000);
    3351          12 :   parameter[DG_5TE].push_back(0.00064900);
    3352          12 :   parameter[DG_5TE].push_back(0.92110500);
    3353          12 :   parameter[DG_5TE].push_back(0.08031500);
    3354          12 :   parameter[DG_5TE].push_back(-0.38997000);
    3355          12 :   parameter[DG_5TE].push_back(0.12401200);
    3356          12 :   parameter[DG_5TE].push_back(-0.01118100);
    3357             : 
    3358          12 :   parameter[DG_TE3].push_back(2.87400000);
    3359          12 :   parameter[DG_TE3].push_back(0.00182000);
    3360          12 :   parameter[DG_TE3].push_back(12.41507000);
    3361          12 :   parameter[DG_TE3].push_back(-7.47384800);
    3362          12 :   parameter[DG_TE3].push_back(-2.11864700);
    3363          12 :   parameter[DG_TE3].push_back(2.50112600);
    3364          12 :   parameter[DG_TE3].push_back(-0.48652200);
    3365             : 
    3366          12 :   parameter[DG_TE5].push_back(8.03600000);
    3367          12 :   parameter[DG_TE5].push_back(0.00676400);
    3368          12 :   parameter[DG_TE5].push_back(4.65989200);
    3369          12 :   parameter[DG_TE5].push_back(0.78482500);
    3370          12 :   parameter[DG_TE5].push_back(-6.86460600);
    3371          12 :   parameter[DG_TE5].push_back(4.11675400);
    3372          12 :   parameter[DG_TE5].push_back(-0.72249100);
    3373             : 
    3374          12 :   parameter[DT_BB1].push_back(32.88500000);
    3375          12 :   parameter[DT_BB1].push_back(0.08220100);
    3376          12 :   parameter[DT_BB1].push_back(-7.33006800);
    3377          12 :   parameter[DT_BB1].push_back(2.16636500);
    3378          12 :   parameter[DT_BB1].push_back(-3.53465700);
    3379          12 :   parameter[DT_BB1].push_back(2.31447600);
    3380          12 :   parameter[DT_BB1].push_back(-0.39445400);
    3381             : 
    3382          12 :   parameter[DT_BB2].push_back(3.80600000);
    3383          12 :   parameter[DT_BB2].push_back(-0.10723000);
    3384          12 :   parameter[DT_BB2].push_back(9.56675000);
    3385          12 :   parameter[DT_BB2].push_back(-6.20236100);
    3386          12 :   parameter[DT_BB2].push_back(-0.49550400);
    3387          12 :   parameter[DT_BB2].push_back(1.14300600);
    3388          12 :   parameter[DT_BB2].push_back(-0.21420000);
    3389             : 
    3390          12 :   parameter[DT_BB3].push_back(-1.35600000);
    3391          12 :   parameter[DT_BB3].push_back(0.56737900);
    3392          12 :   parameter[DT_BB3].push_back(6.76595400);
    3393          12 :   parameter[DT_BB3].push_back(4.08976100);
    3394          12 :   parameter[DT_BB3].push_back(-9.61512500);
    3395          12 :   parameter[DT_BB3].push_back(4.40975100);
    3396          12 :   parameter[DT_BB3].push_back(-0.64239800);
    3397             : 
    3398          12 :   parameter[DT_SC1].push_back(5.95100000);
    3399          12 :   parameter[DT_SC1].push_back(-0.02926500);
    3400          12 :   parameter[DT_SC1].push_back(2.59630300);
    3401          12 :   parameter[DT_SC1].push_back(-0.56152200);
    3402          12 :   parameter[DT_SC1].push_back(-1.56532600);
    3403          12 :   parameter[DT_SC1].push_back(0.89322800);
    3404          12 :   parameter[DT_SC1].push_back(-0.14142900);
    3405             : 
    3406          12 :   parameter[DT_SC2].push_back(10.90100000);
    3407          12 :   parameter[DT_SC2].push_back(0.02183400);
    3408          12 :   parameter[DT_SC2].push_back(0.19463000);
    3409          12 :   parameter[DT_SC2].push_back(0.72393000);
    3410          12 :   parameter[DT_SC2].push_back(-1.93199500);
    3411          12 :   parameter[DT_SC2].push_back(0.96856300);
    3412          12 :   parameter[DT_SC2].push_back(-0.14512600);
    3413             : 
    3414          12 :   parameter[DT_SC3].push_back(4.31400000);
    3415          12 :   parameter[DT_SC3].push_back(-0.07745600);
    3416          12 :   parameter[DT_SC3].push_back(12.49820300);
    3417          12 :   parameter[DT_SC3].push_back(-7.64994200);
    3418          12 :   parameter[DT_SC3].push_back(-3.00359600);
    3419          12 :   parameter[DT_SC3].push_back(3.26263300);
    3420          12 :   parameter[DT_SC3].push_back(-0.64498600);
    3421             : 
    3422          12 :   parameter[DT_3TE].push_back(4.23000000);
    3423          12 :   parameter[DT_3TE].push_back(0.00062000);
    3424          12 :   parameter[DT_3TE].push_back(0.92141100);
    3425          12 :   parameter[DT_3TE].push_back(0.08030900);
    3426          12 :   parameter[DT_3TE].push_back(-0.39021500);
    3427          12 :   parameter[DT_3TE].push_back(0.12414000);
    3428          12 :   parameter[DT_3TE].push_back(-0.01120100);
    3429             : 
    3430          12 :   parameter[DT_5TE].push_back(4.23000000);
    3431          12 :   parameter[DT_5TE].push_back(0.00063700);
    3432          12 :   parameter[DT_5TE].push_back(0.92130800);
    3433          12 :   parameter[DT_5TE].push_back(0.08026900);
    3434          12 :   parameter[DT_5TE].push_back(-0.39007500);
    3435          12 :   parameter[DT_5TE].push_back(0.12406600);
    3436          12 :   parameter[DT_5TE].push_back(-0.01118800);
    3437             : 
    3438          12 :   parameter[DT_TE3].push_back(2.87400000);
    3439          12 :   parameter[DT_TE3].push_back(-0.00251200);
    3440          12 :   parameter[DT_TE3].push_back(12.43576400);
    3441          12 :   parameter[DT_TE3].push_back(-7.55343800);
    3442          12 :   parameter[DT_TE3].push_back(-2.07363500);
    3443          12 :   parameter[DT_TE3].push_back(2.51279300);
    3444          12 :   parameter[DT_TE3].push_back(-0.49437100);
    3445             : 
    3446          12 :   parameter[DT_TE5].push_back(8.03600000);
    3447          12 :   parameter[DT_TE5].push_back(0.00119900);
    3448          12 :   parameter[DT_TE5].push_back(4.91762300);
    3449          12 :   parameter[DT_TE5].push_back(0.65637000);
    3450          12 :   parameter[DT_TE5].push_back(-7.23392500);
    3451          12 :   parameter[DT_TE5].push_back(4.44636600);
    3452          12 :   parameter[DT_TE5].push_back(-0.79467800);
    3453             : 
    3454          12 :   auto* moldat=plumed.getActionSet().selectLatest<GenericMolInfo*>(this);
    3455          12 :   if( moldat ) {
    3456        9824 :     for(unsigned i=0; i<atoms.size(); ++i) {
    3457        9812 :       std::string Aname = moldat->getAtomName(atoms[i]);
    3458        9812 :       std::string Rname = moldat->getResidueName(atoms[i]);
    3459        9812 :       if(Rname=="ALA") {
    3460          96 :         if(Aname=="BB") {
    3461          96 :           atoi[i]=ALA_BB;
    3462             :         } else {
    3463           0 :           error("Atom name not known: "+Aname);
    3464             :         }
    3465        9716 :       } else if(Rname=="ARG") {
    3466         516 :         if(Aname=="BB") {
    3467         172 :           atoi[i]=ARG_BB;
    3468         344 :         } else if(Aname=="SC1") {
    3469         172 :           atoi[i]=ARG_SC1;
    3470         172 :         } else if(Aname=="SC2") {
    3471         172 :           atoi[i]=ARG_SC2;
    3472             :         } else {
    3473           0 :           error("Atom name not known: "+Aname);
    3474             :         }
    3475        9200 :       } else if(Rname=="ASN") {
    3476         272 :         if(Aname=="BB") {
    3477         136 :           atoi[i]=ASN_BB;
    3478         136 :         } else if(Aname=="SC1") {
    3479         136 :           atoi[i]=ASN_SC1;
    3480             :         } else {
    3481           0 :           error("Atom name not known: "+Aname);
    3482             :         }
    3483        8928 :       } else if(Rname=="ASP") {
    3484         448 :         if(Aname=="BB") {
    3485         224 :           atoi[i]=ASP_BB;
    3486         224 :         } else if(Aname=="SC1") {
    3487         224 :           atoi[i]=ASP_SC1;
    3488             :         } else {
    3489           0 :           error("Atom name not known: "+Aname);
    3490             :         }
    3491        8480 :       } else if(Rname=="CYS") {
    3492          16 :         if(Aname=="BB") {
    3493           8 :           atoi[i]=CYS_BB;
    3494           8 :         } else if(Aname=="SC1") {
    3495           8 :           atoi[i]=CYS_SC1;
    3496             :         } else {
    3497           0 :           error("Atom name not known: "+Aname);
    3498             :         }
    3499        8464 :       } else if(Rname=="GLN") {
    3500         320 :         if(Aname=="BB") {
    3501         160 :           atoi[i]=GLN_BB;
    3502         160 :         } else if(Aname=="SC1") {
    3503         160 :           atoi[i]=GLN_SC1;
    3504             :         } else {
    3505           0 :           error("Atom name not known: "+Aname);
    3506             :         }
    3507        8144 :       } else if(Rname=="GLU") {
    3508         576 :         if(Aname=="BB") {
    3509         288 :           atoi[i]=GLU_BB;
    3510         288 :         } else if(Aname=="SC1") {
    3511         288 :           atoi[i]=GLU_SC1;
    3512             :         } else {
    3513           0 :           error("Atom name not known: "+Aname);
    3514             :         }
    3515        7568 :       } else if(Rname=="GLY") {
    3516         168 :         if(Aname=="BB") {
    3517         168 :           atoi[i]=GLY_BB;
    3518             :         } else {
    3519           0 :           error("Atom name not known: "+Aname);
    3520             :         }
    3521        7400 :       } else if(Rname=="HIS") {
    3522         704 :         if(Aname=="BB") {
    3523         176 :           atoi[i]=HIS_BB;
    3524         528 :         } else if(Aname=="SC1") {
    3525         176 :           atoi[i]=HIS_SC1;
    3526         352 :         } else if(Aname=="SC2") {
    3527         176 :           atoi[i]=HIS_SC2;
    3528         176 :         } else if(Aname=="SC3") {
    3529         176 :           atoi[i]=HIS_SC3;
    3530             :         } else {
    3531           0 :           error("Atom name not known: "+Aname);
    3532             :         }
    3533        6696 :       } else if(Rname=="ILE") {
    3534         696 :         if(Aname=="BB") {
    3535         348 :           atoi[i]=ILE_BB;
    3536         348 :         } else if(Aname=="SC1") {
    3537         348 :           atoi[i]=ILE_SC1;
    3538             :         } else {
    3539           0 :           error("Atom name not known: "+Aname);
    3540             :         }
    3541        6000 :       } else if(Rname=="LEU") {
    3542         592 :         if(Aname=="BB") {
    3543         296 :           atoi[i]=LEU_BB;
    3544         296 :         } else if(Aname=="SC1") {
    3545         296 :           atoi[i]=LEU_SC1;
    3546             :         } else {
    3547           0 :           error("Atom name not known: "+Aname);
    3548             :         }
    3549        5408 :       } else if(Rname=="LYS") {
    3550         960 :         if(Aname=="BB") {
    3551         320 :           atoi[i]=LYS_BB;
    3552         640 :         } else if(Aname=="SC1") {
    3553         320 :           atoi[i]=LYS_SC1;
    3554         320 :         } else if(Aname=="SC2") {
    3555         320 :           atoi[i]=LYS_SC2;
    3556             :         } else {
    3557           0 :           error("Atom name not known: "+Aname);
    3558             :         }
    3559        4448 :       } else if(Rname=="MET") {
    3560          96 :         if(Aname=="BB") {
    3561          48 :           atoi[i]=MET_BB;
    3562          48 :         } else if(Aname=="SC1") {
    3563          48 :           atoi[i]=MET_SC1;
    3564             :         } else {
    3565           0 :           error("Atom name not known: "+Aname);
    3566             :         }
    3567        4352 :       } else if(Rname=="PHE") {
    3568         576 :         if(Aname=="BB") {
    3569         144 :           atoi[i]=PHE_BB;
    3570         432 :         } else if(Aname=="SC1") {
    3571         144 :           atoi[i]=PHE_SC1;
    3572         288 :         } else if(Aname=="SC2") {
    3573         144 :           atoi[i]=PHE_SC2;
    3574         144 :         } else if(Aname=="SC3") {
    3575         144 :           atoi[i]=PHE_SC3;
    3576             :         } else {
    3577           0 :           error("Atom name not known: "+Aname);
    3578             :         }
    3579        3776 :       } else if(Rname=="PRO") {
    3580         176 :         if(Aname=="BB") {
    3581          88 :           atoi[i]=PRO_BB;
    3582          88 :         } else if(Aname=="SC1") {
    3583          88 :           atoi[i]=PRO_SC1;
    3584             :         } else {
    3585           0 :           error("Atom name not known: "+Aname);
    3586             :         }
    3587        3600 :       } else if(Rname=="SER") {
    3588         304 :         if(Aname=="BB") {
    3589         152 :           atoi[i]=SER_BB;
    3590         152 :         } else if(Aname=="SC1") {
    3591         152 :           atoi[i]=SER_SC1;
    3592             :         } else {
    3593           0 :           error("Atom name not known: "+Aname);
    3594             :         }
    3595        3296 :       } else if(Rname=="THR") {
    3596         400 :         if(Aname=="BB") {
    3597         200 :           atoi[i]=THR_BB;
    3598         200 :         } else if(Aname=="SC1") {
    3599         200 :           atoi[i]=THR_SC1;
    3600             :         } else {
    3601           0 :           error("Atom name not known: "+Aname);
    3602             :         }
    3603        2896 :       } else if(Rname=="TRP") {
    3604           0 :         if(Aname=="BB") {
    3605           0 :           atoi[i]=TRP_BB;
    3606           0 :         } else if(Aname=="SC1") {
    3607           0 :           atoi[i]=TRP_SC1;
    3608           0 :         } else if(Aname=="SC2") {
    3609           0 :           atoi[i]=TRP_SC2;
    3610           0 :         } else if(Aname=="SC3") {
    3611           0 :           atoi[i]=TRP_SC3;
    3612           0 :         } else if(Aname=="SC4") {
    3613           0 :           atoi[i]=TRP_SC4;
    3614             :         } else {
    3615           0 :           error("Atom name not known: "+Aname);
    3616             :         }
    3617        2896 :       } else if(Rname=="TYR") {
    3618         576 :         if(Aname=="BB") {
    3619         144 :           atoi[i]=TYR_BB;
    3620         432 :         } else if(Aname=="SC1") {
    3621         144 :           atoi[i]=TYR_SC1;
    3622         288 :         } else if(Aname=="SC2") {
    3623         144 :           atoi[i]=TYR_SC2;
    3624         144 :         } else if(Aname=="SC3") {
    3625         144 :           atoi[i]=TYR_SC3;
    3626             :         } else {
    3627           0 :           error("Atom name not known: "+Aname);
    3628             :         }
    3629        2320 :       } else if(Rname=="VAL") {
    3630         352 :         if(Aname=="BB") {
    3631         176 :           atoi[i]=VAL_BB;
    3632         176 :         } else if(Aname=="SC1") {
    3633         176 :           atoi[i]=VAL_SC1;
    3634             :         } else {
    3635           0 :           error("Atom name not known: "+Aname);
    3636             :         }
    3637        1968 :       } else if(Rname=="  A") {
    3638           0 :         if(Aname=="BB1") {
    3639           0 :           atoi[i]=A_BB1;
    3640           0 :         } else if(Aname=="BB2") {
    3641           0 :           atoi[i]=A_BB2;
    3642           0 :         } else if(Aname=="BB3") {
    3643           0 :           atoi[i]=A_BB3;
    3644           0 :         } else if(Aname=="SC1") {
    3645           0 :           atoi[i]=A_SC1;
    3646           0 :         } else if(Aname=="SC2") {
    3647           0 :           atoi[i]=A_SC2;
    3648           0 :         } else if(Aname=="SC3") {
    3649           0 :           atoi[i]=A_SC3;
    3650           0 :         } else if(Aname=="SC4") {
    3651           0 :           atoi[i]=A_SC4;
    3652           0 :         } else if(Aname=="3TE") {
    3653           0 :           atoi[i]=A_3TE;
    3654           0 :         } else if(Aname=="5TE") {
    3655           0 :           atoi[i]=A_5TE;
    3656           0 :         } else if(Aname=="TE3") {
    3657           0 :           atoi[i]=A_TE3;
    3658           0 :         } else if(Aname=="TE5") {
    3659           0 :           atoi[i]=A_TE5;
    3660             :         } else {
    3661           0 :           error("Atom name not known: "+Aname);
    3662             :         }
    3663        1968 :       } else if(Rname=="  C") {
    3664           0 :         if(Aname=="BB1") {
    3665           0 :           atoi[i]=C_BB1;
    3666           0 :         } else if(Aname=="BB2") {
    3667           0 :           atoi[i]=C_BB2;
    3668           0 :         } else if(Aname=="BB3") {
    3669           0 :           atoi[i]=C_BB3;
    3670           0 :         } else if(Aname=="SC1") {
    3671           0 :           atoi[i]=C_SC1;
    3672           0 :         } else if(Aname=="SC2") {
    3673           0 :           atoi[i]=C_SC2;
    3674           0 :         } else if(Aname=="SC3") {
    3675           0 :           atoi[i]=C_SC3;
    3676           0 :         } else if(Aname=="3TE") {
    3677           0 :           atoi[i]=C_3TE;
    3678           0 :         } else if(Aname=="5TE") {
    3679           0 :           atoi[i]=C_5TE;
    3680           0 :         } else if(Aname=="TE3") {
    3681           0 :           atoi[i]=C_TE3;
    3682           0 :         } else if(Aname=="TE5") {
    3683           0 :           atoi[i]=C_TE5;
    3684             :         } else {
    3685           0 :           error("Atom name not known: "+Aname);
    3686             :         }
    3687        1968 :       } else if(Rname=="  G") {
    3688           0 :         if(Aname=="BB1") {
    3689           0 :           atoi[i]=G_BB1;
    3690           0 :         } else if(Aname=="BB2") {
    3691           0 :           atoi[i]=G_BB2;
    3692           0 :         } else if(Aname=="BB3") {
    3693           0 :           atoi[i]=G_BB3;
    3694           0 :         } else if(Aname=="SC1") {
    3695           0 :           atoi[i]=G_SC1;
    3696           0 :         } else if(Aname=="SC2") {
    3697           0 :           atoi[i]=G_SC2;
    3698           0 :         } else if(Aname=="SC3") {
    3699           0 :           atoi[i]=G_SC3;
    3700           0 :         } else if(Aname=="SC4") {
    3701           0 :           atoi[i]=G_SC4;
    3702           0 :         } else if(Aname=="3TE") {
    3703           0 :           atoi[i]=G_3TE;
    3704           0 :         } else if(Aname=="5TE") {
    3705           0 :           atoi[i]=G_5TE;
    3706           0 :         } else if(Aname=="TE3") {
    3707           0 :           atoi[i]=G_TE3;
    3708           0 :         } else if(Aname=="TE5") {
    3709           0 :           atoi[i]=G_TE5;
    3710             :         } else {
    3711           0 :           error("Atom name not known: "+Aname);
    3712             :         }
    3713        1968 :       } else if(Rname=="  U") {
    3714           0 :         if(Aname=="BB1") {
    3715           0 :           atoi[i]=U_BB1;
    3716           0 :         } else if(Aname=="BB2") {
    3717           0 :           atoi[i]=U_BB2;
    3718           0 :         } else if(Aname=="BB3") {
    3719           0 :           atoi[i]=U_BB3;
    3720           0 :         } else if(Aname=="SC1") {
    3721           0 :           atoi[i]=U_SC1;
    3722           0 :         } else if(Aname=="SC2") {
    3723           0 :           atoi[i]=U_SC2;
    3724           0 :         } else if(Aname=="SC3") {
    3725           0 :           atoi[i]=U_SC3;
    3726           0 :         } else if(Aname=="3TE") {
    3727           0 :           atoi[i]=U_3TE;
    3728           0 :         } else if(Aname=="5TE") {
    3729           0 :           atoi[i]=U_5TE;
    3730           0 :         } else if(Aname=="TE3") {
    3731           0 :           atoi[i]=U_TE3;
    3732           0 :         } else if(Aname=="TE5") {
    3733           0 :           atoi[i]=U_TE5;
    3734             :         } else {
    3735           0 :           error("Atom name not known: "+Aname);
    3736             :         }
    3737        1968 :       } else if(Rname==" DA") {
    3738         696 :         if(Aname=="BB1") {
    3739          96 :           atoi[i]=DA_BB1;
    3740         600 :         } else if(Aname=="BB2") {
    3741          96 :           atoi[i]=DA_BB2;
    3742         504 :         } else if(Aname=="BB3") {
    3743          96 :           atoi[i]=DA_BB3;
    3744         408 :         } else if(Aname=="SC1") {
    3745         100 :           atoi[i]=DA_SC1;
    3746         308 :         } else if(Aname=="SC2") {
    3747         100 :           atoi[i]=DA_SC2;
    3748         208 :         } else if(Aname=="SC3") {
    3749         100 :           atoi[i]=DA_SC3;
    3750         108 :         } else if(Aname=="SC4") {
    3751         100 :           atoi[i]=DA_SC4;
    3752           8 :         } else if(Aname=="3TE") {
    3753           0 :           atoi[i]=DA_3TE;
    3754           8 :         } else if(Aname=="5TE") {
    3755           0 :           atoi[i]=DA_5TE;
    3756           8 :         } else if(Aname=="TE3") {
    3757           4 :           atoi[i]=DA_TE3;
    3758           4 :         } else if(Aname=="TE5") {
    3759           4 :           atoi[i]=DA_TE5;
    3760             :         } else {
    3761           0 :           error("Atom name not known: "+Aname);
    3762             :         }
    3763        1272 :       } else if(Rname==" DC") {
    3764         312 :         if(Aname=="BB1") {
    3765          52 :           atoi[i]=DC_BB1;
    3766         260 :         } else if(Aname=="BB2") {
    3767          52 :           atoi[i]=DC_BB2;
    3768         208 :         } else if(Aname=="BB3") {
    3769          52 :           atoi[i]=DC_BB3;
    3770         156 :         } else if(Aname=="SC1") {
    3771          52 :           atoi[i]=DC_SC1;
    3772         104 :         } else if(Aname=="SC2") {
    3773          52 :           atoi[i]=DC_SC2;
    3774          52 :         } else if(Aname=="SC3") {
    3775          52 :           atoi[i]=DC_SC3;
    3776           0 :         } else if(Aname=="3TE") {
    3777           0 :           atoi[i]=DC_3TE;
    3778           0 :         } else if(Aname=="5TE") {
    3779           0 :           atoi[i]=DC_5TE;
    3780           0 :         } else if(Aname=="TE3") {
    3781           0 :           atoi[i]=DC_TE3;
    3782           0 :         } else if(Aname=="TE5") {
    3783           0 :           atoi[i]=DC_TE5;
    3784             :         } else {
    3785           0 :           error("Atom name not known: "+Aname);
    3786             :         }
    3787         960 :       } else if(Rname==" DG") {
    3788         364 :         if(Aname=="BB1") {
    3789          52 :           atoi[i]=DG_BB1;
    3790         312 :         } else if(Aname=="BB2") {
    3791          52 :           atoi[i]=DG_BB2;
    3792         260 :         } else if(Aname=="BB3") {
    3793          52 :           atoi[i]=DG_BB3;
    3794         208 :         } else if(Aname=="SC1") {
    3795          52 :           atoi[i]=DG_SC1;
    3796         156 :         } else if(Aname=="SC2") {
    3797          52 :           atoi[i]=DG_SC2;
    3798         104 :         } else if(Aname=="SC3") {
    3799          52 :           atoi[i]=DG_SC3;
    3800          52 :         } else if(Aname=="SC4") {
    3801          52 :           atoi[i]=DG_SC4;
    3802           0 :         } else if(Aname=="3TE") {
    3803           0 :           atoi[i]=DG_3TE;
    3804           0 :         } else if(Aname=="5TE") {
    3805           0 :           atoi[i]=DG_5TE;
    3806           0 :         } else if(Aname=="TE3") {
    3807           0 :           atoi[i]=DG_TE3;
    3808           0 :         } else if(Aname=="TE5") {
    3809           0 :           atoi[i]=DG_TE5;
    3810             :         } else {
    3811           0 :           error("Atom name not known: "+Aname);
    3812             :         }
    3813         596 :       } else if(Rname==" DT") {
    3814         596 :         if(Aname=="BB1") {
    3815          96 :           atoi[i]=DT_BB1;
    3816         500 :         } else if(Aname=="BB2") {
    3817          96 :           atoi[i]=DT_BB2;
    3818         404 :         } else if(Aname=="BB3") {
    3819          96 :           atoi[i]=DT_BB3;
    3820         308 :         } else if(Aname=="SC1") {
    3821         100 :           atoi[i]=DT_SC1;
    3822         208 :         } else if(Aname=="SC2") {
    3823         100 :           atoi[i]=DT_SC2;
    3824         108 :         } else if(Aname=="SC3") {
    3825         100 :           atoi[i]=DT_SC3;
    3826           8 :         } else if(Aname=="3TE") {
    3827           0 :           atoi[i]=DT_3TE;
    3828           8 :         } else if(Aname=="5TE") {
    3829           0 :           atoi[i]=DT_5TE;
    3830           8 :         } else if(Aname=="TE3") {
    3831           4 :           atoi[i]=DT_TE3;
    3832           4 :         } else if(Aname=="TE5") {
    3833           4 :           atoi[i]=DT_TE5;
    3834             :         } else {
    3835           0 :           error("Atom name not known: "+Aname);
    3836             :         }
    3837             :       } else {
    3838           0 :         error("Residue not known: "+Rname);
    3839             :       }
    3840             :     }
    3841             :   } else {
    3842           0 :     error("MOLINFO DATA not found\n");
    3843             :   }
    3844          12 : }
    3845             : 
    3846           4 : void SAXS::getMartiniFFparam_v3(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter) {
    3847             :   // Kept separate from the Martini 2.2 table in getMartiniFFparam because the coefficients
    3848             :   // differ and the Martini 3 protein topology adds beads absent in 2.2 (ALA_SC1, TRP_SC5,
    3849             :   // TYR_SC4). The 7-coefficient / degree-6-in-q form is deliberately unchanged so the same
    3850             :   // downstream polynomial evaluator serves both MARTINI_FF versions. See the Martini 3
    3851             :   // form-factor paper in the bibliography for how the coefficients were derived.
    3852           4 :   parameter[ALA_BB] = {10.643806846255465, 0.0, 2.0616371683115733, 0.7872168906775016, -5.080460379455372, 3.222662883174488, -0.5960016057238122};
    3853           4 :   parameter[ALA_SC1] = {-1.7010874177132265, 0.0, 7.118764019567526, 1.1145464157804394, -5.950013175357564, 2.8714126567294755, -0.42838104934301313};
    3854             : 
    3855           4 :   parameter[ARG_BB] = {10.64380122599819, 0.0, 2.061637183212542, 0.7872187072333622, -5.080459366793695, 3.2226607845095225, -0.5960010250566496};
    3856           4 :   parameter[ARG_SC1] = {-2.582459965203611, 0.0, 16.093491676712716, 1.1997535742302685, -15.212231100907612, 8.324901545777502, -1.3612064124992838};
    3857           4 :   parameter[ARG_SC2] = {14.428248841779087, 0.0, -0.5306373105617507, 1.6708928597353037, -4.220821223435202, 2.340601736383018, -0.3836111601465304};
    3858             : 
    3859           4 :   parameter[ASN_BB] = {10.64380637290148, 0.0, 2.0616383733664607, 0.7872206653851905, -5.080466495994918, 3.2226654178553917, -0.5960019074982035};
    3860           4 :   parameter[ASN_SC1] = {9.305752980758708, 0.0, 8.028095134281596, -2.3099183822637563, -6.632212819638959, 4.4228155805014255, -0.7764062905424147};
    3861             : 
    3862           4 :   parameter[ASP_BB] = {10.643806310047486, 0.0, 2.06163743145317, 0.787217929242442, -5.080461918557475, 3.222663478750303, -0.5960016686083391};
    3863           4 :   parameter[ASP_SC1] = {10.498866776432472, 0.0, 7.536374464512118, -2.8556236565791147, -5.4787540182953105, 3.815664106474512, -0.67328443867979};
    3864             : 
    3865           4 :   parameter[CYS_BB] = {10.643806815155962, 0.0, 2.0616371622877585, 0.7872168883774691, -5.080460364611164, 3.222662873758418, -0.5960016039823965};
    3866           4 :   parameter[CYS_SC1] = {7.84213323319376, 0.0, 9.953170739451108, -1.2903802262350998, -7.207970655489376, 4.191794051784442, -0.688509627116269};
    3867             : 
    3868           4 :   parameter[GLN_BB] = {10.643801955137343, 0.0, 2.061635484428877, 0.7872153749124453, -5.080458169900939, 3.2226625571952128, -0.5960016907141563};
    3869           4 :   parameter[GLN_SC1] = {8.444221071382211, 0.0, 17.678600522511136, -15.30698404588629, -1.7525725905064409, 4.726896859211768, -1.1004371797545023};
    3870             : 
    3871           4 :   parameter[GLU_BB] = {10.643804801462782, 0.0, 2.0616367722480975, 0.7872167394450527, -5.080459403443487, 3.2226622640656624, -0.5960014912253735};
    3872           4 :   parameter[GLU_SC1] = {9.637509830770533, 0.0, 16.9079134467359, -14.850360181614349, -1.4743561994477412, 4.367483853252233, -1.011774253849401};
    3873             : 
    3874           4 :   parameter[GLY_BB] = {10.030507380458893, 0.0, 3.8641270986545533, 0.5938012695810033, -6.486785053096451, 4.045479409708778, -0.7318132454163564};
    3875             : 
    3876           4 :   parameter[HIS_BB] = {10.643806239423265, 0.0, 2.061636403138179, 0.7872153348214171, -5.080458934227526, 3.222662755527101, -0.5960016737782905};
    3877           4 :   parameter[HIS_SC1] = {-0.3510341202994483, 0.0, 7.193968257062204, 1.0071445792130653, -5.966246573308775, 2.857512357903082, -0.4182231235167757};
    3878           4 :   parameter[HIS_SC2] = {5.208533893792252, 0.0, 3.8539382664534454, -0.7578802642311985, -2.104343630945438, 1.154962103610813, -0.17552755823901833};
    3879           4 :   parameter[HIS_SC3] = {5.917304757860416, 0.0, 3.4514167501354183, -0.7996735949256304, -1.9263229210885686, 1.0965585639684268, -0.17072583342582792};
    3880             : 
    3881           4 :   parameter[ILE_BB] = {10.64380615454994, 0.0, 2.0616374013343046, 0.7872179177418046, -5.080461844335988, 3.2226634316697726, -0.5960016599012332};
    3882           4 :   parameter[ILE_SC1] = {-2.8097860782245627, 0.0, 17.343971902022577, -0.23891906441869626, -15.000405961544278, 8.58845914300296, -1.441332654688594};
    3883             : 
    3884           4 :   parameter[LEU_BB] = {10.643806213809782, 0.0, 2.061633435208698, 0.7872076376318345, -5.080448157052189, 3.222659304574193, -0.5960014675554544};
    3885           4 :   parameter[LEU_SC1] = {-4.5114171929323135, 0.0, 25.86498421391297, -0.3593827525321407, -25.217858321420422, 15.064085710903564, -2.607530763046867};
    3886             : 
    3887           4 :   parameter[LYS_BB] = {10.64380376754201, 0.0, 2.0616367677184795, 0.7872172380281511, -5.080459867292311, 3.222662355248592, -0.5960014828825799};
    3888           4 :   parameter[LYS_SC1] = {-2.5824810746850932, 0.0, 16.13252189664475, 1.128748246295519, -15.254770450814124, 8.38659674454396, -1.375867210865735};
    3889           4 :   parameter[LYS_SC2] = {2.1875912973408798, 0.0, 7.73920607666854, -0.27554644744459345, -5.278638129524195, 2.7078403428197415, -0.40648308930112886};
    3890             : 
    3891           4 :   parameter[MET_BB] = {10.643805945882942, 0.0, 2.061638855896697, 0.7872212846351714, -5.080465329413779, 3.2226637799383036, -0.5960014813592833};
    3892           4 :   parameter[MET_SC1] = {5.941578575762451, 0.0, 27.196511296595972, -14.885385896082838, -11.454742034363008, 10.47605161022688, -2.1101041439081705};
    3893             : 
    3894           4 :   parameter[PHE_BB] = {10.643806006706622, 0.0, 2.0616372014304547, 0.7872174036368966, -5.080460936081678, 3.2226630332083683, -0.596001608264948};
    3895           4 :   parameter[PHE_SC1] = {-0.8462636496033878, 0.0, 14.839441617245123, 2.2004608533314522, -16.95606436299522, 9.510075608290261, -1.5946587656311024};
    3896           4 :   parameter[PHE_SC2] = {-0.742231268614823, 0.0, 10.63643103868057, 1.7786090791808593, -10.450445500864703, 5.373874846922616, -0.8428947987047763};
    3897           4 :   parameter[PHE_SC3] = {-0.7422313155110873, 0.0, 10.636434560542588, 1.7789447792708137, -10.451993220972495, 5.374862813071748, -0.8430703179386754};
    3898             : 
    3899           4 :   parameter[PRO_BB] = {10.643806843833374, 0.0, 2.0616339242389112, 0.7872087624627253, -5.080450252830959, 3.2226602532621835, -0.5960015957447156};
    3900           4 :   parameter[PRO_SC1] = {-2.5823799290163008, 0.0, 15.935745257970094, 1.5755615408846868, -15.321956596666128, 8.243503230527706, -1.3306121395565977};
    3901             : 
    3902           4 :   parameter[SER_BB] = {10.643806777864874, 0.0, 2.0616387389176625, 0.7872199109819031, -5.080462650852676, 3.222662175078477, -0.5960011782019041};
    3903           4 :   parameter[SER_SC1] = {3.4162901978899263, 0.0, 7.046526576582673, -0.7405001447742399, -4.171626396336101, 2.17896359910637, -0.3261396940578125};
    3904             : 
    3905           4 :   parameter[THR_BB] = {10.643806692667567, 0.0, 2.0616395632827773, 0.7872229931327475, -5.080468438252067, 3.2226651681904412, -0.596001665635775};
    3906           4 :   parameter[THR_SC1] = {2.3286130028844063, 0.0, 15.22075528248213, -7.075948421013035, -4.803271805624368, 3.801442540603149, -0.6738285661353789};
    3907             : 
    3908           4 :   parameter[TRP_BB] = {10.6438056642156, 0.0, 2.0616365723567625, 0.7872157250296694, -5.080458020204383, 3.222661767357874, -0.5960014466255745};
    3909           4 :   parameter[TRP_SC1] = {-0.351034177345441, 0.0, 7.194381667728987, 1.0062737316596095, -5.967563386286029, 2.8587212292759863, -0.41846073110281257};
    3910           4 :   parameter[TRP_SC2] = {5.2085335935035015, 0.0, 3.846414533476574, -0.7548987022087086, -2.1045634954549053, 1.1551370044816633, -0.17558936197499975};
    3911           4 :   parameter[TRP_SC3] = {1.0191615583089166, 0.0, 4.052957128215075, 0.9232332263552776, -3.327471251075115, 1.4497288158043133, -0.19659298783187706};
    3912           4 :   parameter[TRP_SC4] = {-0.4946782468748683, 0.0, 6.9061019054469925, 1.4448598321835506, -6.077337073118115, 2.8277650354743824, -0.40813950611040006};
    3913           4 :   parameter[TRP_SC5] = {-0.49467887303237984, 0.0, 6.906755828716037, 1.4448532336312239, -6.084567814617669, 2.83287175092946, -0.4090847242312874};
    3914             : 
    3915           4 :   parameter[TYR_BB] = {10.643806827500029, 0.0, 2.061632625815723, 0.7872057392672824, -5.080447933834761, 3.2226603604678723, -0.5960017988956865};
    3916           4 :   parameter[TYR_SC1] = {-0.3510348934006665, 0.0, 7.198047296937748, 0.9985596099204095, -5.979206265377417, 2.869439868998658, -0.4205709369357118};
    3917           4 :   parameter[TYR_SC2] = {-0.49467730589685305, 0.0, 6.905064702126387, 1.4448572769420103, -6.0657993256015255, 2.8196314526492494, -0.4066356099898165};
    3918           4 :   parameter[TYR_SC3] = {-0.49467728298728963, 0.0, 6.905040827851511, 1.444857019166638, -6.065533022896432, 2.8194439448562316, -0.4066009631311269};
    3919           4 :   parameter[TYR_SC4] = {4.7864749265977435, 0.0, 3.379084515901221, 0.457435669705735, -2.6386732256533407, 1.184403517784809, -0.16175671046904316};
    3920             : 
    3921           4 :   parameter[VAL_BB] = {10.643806849587198, 0.0, 2.061631159601996, 0.7872024303709435, -5.080444479262741, 3.2226600061868638, -0.5960019731764394};
    3922           4 :   parameter[VAL_SC1] = {-3.650489697568667, 0.0, 20.152880104569256, -1.3077717593059774, -16.48666338249699, 9.710777748612122, -1.654724631578258};
    3923             : 
    3924             :   // Resolve beads by (residue, bead) name rather than by input order so the coefficients
    3925             :   // stay correct regardless of how the user ordered ATOMS. An unrecognised name means the
    3926             :   // topology is not Martini 3, so we error out early instead of silently applying the wrong
    3927             :   // form factor and producing a plausible-looking but incorrect intensity.
    3928           4 :   auto* moldat=plumed.getActionSet().selectLatest<GenericMolInfo*>(this);
    3929           4 :   if( moldat ) {
    3930        1220 :     for(unsigned i=0; i<atoms.size(); ++i) {
    3931        1216 :       std::string Aname = moldat->getAtomName(atoms[i]);
    3932        1216 :       std::string Rname = moldat->getResidueName(atoms[i]);
    3933        1216 :       if(Rname=="ALA") {
    3934          96 :         if(Aname=="BB") {
    3935          48 :           atoi[i]=ALA_BB;
    3936          48 :         } else if(Aname=="SC1") {
    3937          48 :           atoi[i]=ALA_SC1;
    3938             :         } else {
    3939           0 :           error("Atom name not known: "+Aname);
    3940             :         }
    3941        1120 :       } else if(Rname=="ARG") {
    3942         132 :         if(Aname=="BB") {
    3943          44 :           atoi[i]=ARG_BB;
    3944          88 :         } else if(Aname=="SC1") {
    3945          44 :           atoi[i]=ARG_SC1;
    3946          44 :         } else if(Aname=="SC2") {
    3947          44 :           atoi[i]=ARG_SC2;
    3948             :         } else {
    3949           0 :           error("Atom name not known: "+Aname);
    3950             :         }
    3951         988 :       } else if(Rname=="ASN") {
    3952         112 :         if(Aname=="BB") {
    3953          56 :           atoi[i]=ASN_BB;
    3954          56 :         } else if(Aname=="SC1") {
    3955          56 :           atoi[i]=ASN_SC1;
    3956             :         } else {
    3957           0 :           error("Atom name not known: "+Aname);
    3958             :         }
    3959         876 :       } else if(Rname=="ASP") {
    3960          56 :         if(Aname=="BB") {
    3961          28 :           atoi[i]=ASP_BB;
    3962          28 :         } else if(Aname=="SC1") {
    3963          28 :           atoi[i]=ASP_SC1;
    3964             :         } else {
    3965           0 :           error("Atom name not known: "+Aname);
    3966             :         }
    3967         820 :       } else if(Rname=="CYS") {
    3968          64 :         if(Aname=="BB") {
    3969          32 :           atoi[i]=CYS_BB;
    3970          32 :         } else if(Aname=="SC1") {
    3971          32 :           atoi[i]=CYS_SC1;
    3972             :         } else {
    3973           0 :           error("Atom name not known: "+Aname);
    3974             :         }
    3975         756 :       } else if(Rname=="GLN") {
    3976          24 :         if(Aname=="BB") {
    3977          12 :           atoi[i]=GLN_BB;
    3978          12 :         } else if(Aname=="SC1") {
    3979          12 :           atoi[i]=GLN_SC1;
    3980             :         } else {
    3981           0 :           error("Atom name not known: "+Aname);
    3982             :         }
    3983         732 :       } else if(Rname=="GLU") {
    3984          16 :         if(Aname=="BB") {
    3985           8 :           atoi[i]=GLU_BB;
    3986           8 :         } else if(Aname=="SC1") {
    3987           8 :           atoi[i]=GLU_SC1;
    3988             :         } else {
    3989           0 :           error("Atom name not known: "+Aname);
    3990             :         }
    3991         716 :       } else if(Rname=="GLY") {
    3992          48 :         if(Aname=="BB") {
    3993          48 :           atoi[i]=GLY_BB;
    3994             :         } else {
    3995           0 :           error("Atom name not known: "+Aname);
    3996             :         }
    3997         668 :       } else if(Rname=="HIS") {
    3998          16 :         if(Aname=="BB") {
    3999           4 :           atoi[i]=HIS_BB;
    4000          12 :         } else if(Aname=="SC1") {
    4001           4 :           atoi[i]=HIS_SC1;
    4002           8 :         } else if(Aname=="SC2") {
    4003           4 :           atoi[i]=HIS_SC2;
    4004           4 :         } else if(Aname=="SC3") {
    4005           4 :           atoi[i]=HIS_SC3;
    4006             :         } else {
    4007           0 :           error("Atom name not known: "+Aname);
    4008             :         }
    4009         652 :       } else if(Rname=="ILE") {
    4010          48 :         if(Aname=="BB") {
    4011          24 :           atoi[i]=ILE_BB;
    4012          24 :         } else if(Aname=="SC1") {
    4013          24 :           atoi[i]=ILE_SC1;
    4014             :         } else {
    4015           0 :           error("Atom name not known: "+Aname);
    4016             :         }
    4017         604 :       } else if(Rname=="LEU") {
    4018          64 :         if(Aname=="BB") {
    4019          32 :           atoi[i]=LEU_BB;
    4020          32 :         } else if(Aname=="SC1") {
    4021          32 :           atoi[i]=LEU_SC1;
    4022             :         } else {
    4023           0 :           error("Atom name not known: "+Aname);
    4024             :         }
    4025         540 :       } else if(Rname=="LYS") {
    4026          72 :         if(Aname=="BB") {
    4027          24 :           atoi[i]=LYS_BB;
    4028          48 :         } else if(Aname=="SC1") {
    4029          24 :           atoi[i]=LYS_SC1;
    4030          24 :         } else if(Aname=="SC2") {
    4031          24 :           atoi[i]=LYS_SC2;
    4032             :         } else {
    4033           0 :           error("Atom name not known: "+Aname);
    4034             :         }
    4035         468 :       } else if(Rname=="MET") {
    4036          16 :         if(Aname=="BB") {
    4037           8 :           atoi[i]=MET_BB;
    4038           8 :         } else if(Aname=="SC1") {
    4039           8 :           atoi[i]=MET_SC1;
    4040             :         } else {
    4041           0 :           error("Atom name not known: "+Aname);
    4042             :         }
    4043         452 :       } else if(Rname=="PHE") {
    4044          48 :         if(Aname=="BB") {
    4045          12 :           atoi[i]=PHE_BB;
    4046          36 :         } else if(Aname=="SC1") {
    4047          12 :           atoi[i]=PHE_SC1;
    4048          24 :         } else if(Aname=="SC2") {
    4049          12 :           atoi[i]=PHE_SC2;
    4050          12 :         } else if(Aname=="SC3") {
    4051          12 :           atoi[i]=PHE_SC3;
    4052             :         } else {
    4053           0 :           error("Atom name not known: "+Aname);
    4054             :         }
    4055         404 :       } else if(Rname=="PRO") {
    4056          16 :         if(Aname=="BB") {
    4057           8 :           atoi[i]=PRO_BB;
    4058           8 :         } else if(Aname=="SC1") {
    4059           8 :           atoi[i]=PRO_SC1;
    4060             :         } else {
    4061           0 :           error("Atom name not known: "+Aname);
    4062             :         }
    4063         388 :       } else if(Rname=="SER") {
    4064          80 :         if(Aname=="BB") {
    4065          40 :           atoi[i]=SER_BB;
    4066          40 :         } else if(Aname=="SC1") {
    4067          40 :           atoi[i]=SER_SC1;
    4068             :         } else {
    4069           0 :           error("Atom name not known: "+Aname);
    4070             :         }
    4071         308 :       } else if(Rname=="THR") {
    4072          56 :         if(Aname=="BB") {
    4073          28 :           atoi[i]=THR_BB;
    4074          28 :         } else if(Aname=="SC1") {
    4075          28 :           atoi[i]=THR_SC1;
    4076             :         } else {
    4077           0 :           error("Atom name not known: "+Aname);
    4078             :         }
    4079         252 :       } else if(Rname=="TRP") {
    4080         144 :         if(Aname=="BB") {
    4081          24 :           atoi[i]=TRP_BB;
    4082         120 :         } else if(Aname=="SC1") {
    4083          24 :           atoi[i]=TRP_SC1;
    4084          96 :         } else if(Aname=="SC2") {
    4085          24 :           atoi[i]=TRP_SC2;
    4086          72 :         } else if(Aname=="SC3") {
    4087          24 :           atoi[i]=TRP_SC3;
    4088          48 :         } else if(Aname=="SC4") {
    4089          24 :           atoi[i]=TRP_SC4;
    4090          24 :         } else if(Aname=="SC5") {
    4091          24 :           atoi[i]=TRP_SC5;
    4092             :         } else {
    4093           0 :           error("Atom name not known: "+Aname);
    4094             :         }
    4095         108 :       } else if(Rname=="TYR") {
    4096          60 :         if(Aname=="BB") {
    4097          12 :           atoi[i]=TYR_BB;
    4098          48 :         } else if(Aname=="SC1") {
    4099          12 :           atoi[i]=TYR_SC1;
    4100          36 :         } else if(Aname=="SC2") {
    4101          12 :           atoi[i]=TYR_SC2;
    4102          24 :         } else if(Aname=="SC3") {
    4103          12 :           atoi[i]=TYR_SC3;
    4104          12 :         } else if(Aname=="SC4") {
    4105          12 :           atoi[i]=TYR_SC4;
    4106             :         } else {
    4107           0 :           error("Atom name not known: "+Aname);
    4108             :         }
    4109          48 :       } else if(Rname=="VAL") {
    4110          48 :         if(Aname=="BB") {
    4111          24 :           atoi[i]=VAL_BB;
    4112          24 :         } else if(Aname=="SC1") {
    4113          24 :           atoi[i]=VAL_SC1;
    4114             :         } else {
    4115           0 :           error("Atom name not known: "+Aname);
    4116             :         }
    4117             :       } else {
    4118           0 :         error("Residue not known: "+Rname);
    4119             :       }
    4120             :     }
    4121             :   } else {
    4122           0 :     error("MOLINFO DATA not found");
    4123             :   }
    4124           4 : }
    4125             : 
    4126          12 : void SAXS::getOnebeadparam(const PDB &pdb, const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter_vac, std::vector<std::vector<long double> > &parameter_mix, std::vector<std::vector<long double> > &parameter_solv, const std::vector<unsigned> & residue_atoms) {
    4127             : 
    4128          12 :   parameter_solv[TRP].push_back(60737.60249988003);
    4129          12 :   parameter_solv[TRP].push_back(-77.75716755173752);
    4130          12 :   parameter_solv[TRP].push_back(-205962.98557711052);
    4131          12 :   parameter_solv[TRP].push_back(-62013.46984155453);
    4132          12 :   parameter_solv[TRP].push_back(680710.7592231638);
    4133          12 :   parameter_solv[TRP].push_back(-681336.8777362367);
    4134          12 :   parameter_solv[TRP].push_back(211473.65530642506);
    4135             : 
    4136          12 :   parameter_solv[TYR].push_back(46250.80359987982);
    4137          12 :   parameter_solv[TYR].push_back(-45.8287864681578);
    4138          12 :   parameter_solv[TYR].push_back(-143872.91752817619);
    4139          12 :   parameter_solv[TYR].push_back(-39049.68736409533);
    4140          12 :   parameter_solv[TYR].push_back(441321.71874090104);
    4141          12 :   parameter_solv[TYR].push_back(-434478.0972346327);
    4142          12 :   parameter_solv[TYR].push_back(133179.3694641212);
    4143             : 
    4144          12 :   parameter_solv[PHE].push_back(42407.164900118914);
    4145          12 :   parameter_solv[PHE].push_back(-159.1980754191431);
    4146          12 :   parameter_solv[PHE].push_back(-123847.86192757386);
    4147          12 :   parameter_solv[PHE].push_back(-41797.69041575073);
    4148          12 :   parameter_solv[PHE].push_back(380283.7035277073);
    4149          12 :   parameter_solv[PHE].push_back(-361432.67247521743);
    4150          12 :   parameter_solv[PHE].push_back(107750.64978068044);
    4151             : 
    4152          12 :   parameter_solv[HIP].push_back(24473.47360011923);
    4153          12 :   parameter_solv[HIP].push_back(-111.64156672747428);
    4154          12 :   parameter_solv[HIP].push_back(-65826.16993707925);
    4155          12 :   parameter_solv[HIP].push_back(-23305.91329798928);
    4156          12 :   parameter_solv[HIP].push_back(194795.11911635034);
    4157          12 :   parameter_solv[HIP].push_back(-180454.49458095312);
    4158          12 :   parameter_solv[HIP].push_back(52699.374196745615);
    4159             : 
    4160          12 :   parameter_solv[ARG].push_back(34106.70239988039);
    4161          12 :   parameter_solv[ARG].push_back(152.7472727640246);
    4162          12 :   parameter_solv[ARG].push_back(-117086.49392248681);
    4163          12 :   parameter_solv[ARG].push_back(-19664.229479267167);
    4164          12 :   parameter_solv[ARG].push_back(364454.0909203641);
    4165          12 :   parameter_solv[ARG].push_back(-382075.8018312776);
    4166          12 :   parameter_solv[ARG].push_back(122775.75036605193);
    4167             : 
    4168          12 :   parameter_solv[LYS].push_back(32292.090000118922);
    4169          12 :   parameter_solv[LYS].push_back(-111.97371180593888);
    4170          12 :   parameter_solv[LYS].push_back(-91953.10997619898);
    4171          12 :   parameter_solv[LYS].push_back(-30690.807047993283);
    4172          12 :   parameter_solv[LYS].push_back(282092.40760143084);
    4173          12 :   parameter_solv[LYS].push_back(-269503.2592457489);
    4174          12 :   parameter_solv[LYS].push_back(80777.81552915688);
    4175             : 
    4176          12 :   parameter_solv[CYS].push_back(11352.902500119093);
    4177          12 :   parameter_solv[CYS].push_back(-45.5226331859686);
    4178          12 :   parameter_solv[CYS].push_back(-20925.085562607524);
    4179          12 :   parameter_solv[CYS].push_back(-5662.685408989286);
    4180          12 :   parameter_solv[CYS].push_back(38559.10376731146);
    4181          12 :   parameter_solv[CYS].push_back(-27885.23426006181);
    4182          12 :   parameter_solv[CYS].push_back(6280.15058191397);
    4183             : 
    4184          12 :   parameter_solv[CYX].push_back(10281.960000119348);
    4185          12 :   parameter_solv[CYX].push_back(-42.315998754511);
    4186          12 :   parameter_solv[CYX].push_back(-19328.174487327480);
    4187          12 :   parameter_solv[CYX].push_back(-5523.191775626829);
    4188          12 :   parameter_solv[CYX].push_back(38185.463172673335);
    4189          12 :   parameter_solv[CYX].push_back(-28940.174693042034);
    4190          12 :   parameter_solv[CYX].push_back(6925.390014187676);
    4191             : 
    4192          12 :   parameter_solv[ASP].push_back(13511.73760011933);
    4193          12 :   parameter_solv[ASP].push_back(-59.929111107656595);
    4194          12 :   parameter_solv[ASP].push_back(-25849.869639655575);
    4195          12 :   parameter_solv[ASP].push_back(-7541.669448872824);
    4196          12 :   parameter_solv[ASP].push_back(50760.92045144903);
    4197          12 :   parameter_solv[ASP].push_back(-37677.87583269734);
    4198          12 :   parameter_solv[ASP].push_back(8745.7056219399);
    4199             : 
    4200          12 :   parameter_solv[GLU].push_back(20443.280400119456);
    4201          12 :   parameter_solv[GLU].push_back(-113.77561814283207);
    4202          12 :   parameter_solv[GLU].push_back(-45587.79314626863);
    4203          12 :   parameter_solv[GLU].push_back(-16187.556837331254);
    4204          12 :   parameter_solv[GLU].push_back(112609.65830609271);
    4205          12 :   parameter_solv[GLU].push_back(-93362.05323205091);
    4206          12 :   parameter_solv[GLU].push_back(24519.557866124724);
    4207             : 
    4208          12 :   parameter_solv[ILE].push_back(27858.948100119596);
    4209          12 :   parameter_solv[ILE].push_back(-159.27355145839834);
    4210          12 :   parameter_solv[ILE].push_back(-61571.43463039565);
    4211          12 :   parameter_solv[ILE].push_back(-21324.879474559468);
    4212          12 :   parameter_solv[ILE].push_back(144070.7572894681);
    4213          12 :   parameter_solv[ILE].push_back(-115021.81959095894);
    4214          12 :   parameter_solv[ILE].push_back(28939.085108838968);
    4215             : 
    4216          12 :   parameter_solv[LEU].push_back(27858.948100119596);
    4217          12 :   parameter_solv[LEU].push_back(-165.61892007509647);
    4218          12 :   parameter_solv[LEU].push_back(-62564.568746500125);
    4219          12 :   parameter_solv[LEU].push_back(-22465.332149768525);
    4220          12 :   parameter_solv[LEU].push_back(151616.79489291538);
    4221          12 :   parameter_solv[LEU].push_back(-122905.6119395393);
    4222          12 :   parameter_solv[LEU].push_back(31436.664377885514);
    4223             : 
    4224          12 :   parameter_solv[MET].push_back(25609.60090011981);
    4225          12 :   parameter_solv[MET].push_back(-135.38857843066708);
    4226          12 :   parameter_solv[MET].push_back(-67771.01108177133);
    4227          12 :   parameter_solv[MET].push_back(-25228.934337676077);
    4228          12 :   parameter_solv[MET].push_back(199649.95030712147);
    4229          12 :   parameter_solv[MET].push_back(-182251.94895101967);
    4230          12 :   parameter_solv[MET].push_back(52502.88444247481);
    4231             : 
    4232          12 :   parameter_solv[ASN].push_back(14376.010000119095);
    4233          12 :   parameter_solv[ASN].push_back(-67.65579048748472);
    4234          12 :   parameter_solv[ASN].push_back(-28302.87809850141);
    4235          12 :   parameter_solv[ASN].push_back(-8577.439830985548);
    4236          12 :   parameter_solv[ASN].push_back(57532.879075695324);
    4237          12 :   parameter_solv[ASN].push_back(-43261.79286366774);
    4238          12 :   parameter_solv[ASN].push_back(10186.448634149085);
    4239             : 
    4240          12 :   parameter_solv[PRO].push_back(16866.21690011944);
    4241          12 :   parameter_solv[PRO].push_back(-70.84327801054884);
    4242          12 :   parameter_solv[PRO].push_back(-31465.84064925844);
    4243          12 :   parameter_solv[PRO].push_back(-8653.3693368317);
    4244          12 :   parameter_solv[PRO].push_back(58032.28250733714);
    4245          12 :   parameter_solv[PRO].push_back(-41521.01146771431);
    4246          12 :   parameter_solv[PRO].push_back(9184.530596102064);
    4247             : 
    4248          12 :   parameter_solv[GLN].push_back(21503.289600119);
    4249          12 :   parameter_solv[GLN].push_back(-121.30164008960246);
    4250          12 :   parameter_solv[GLN].push_back(-50468.580981118175);
    4251          12 :   parameter_solv[GLN].push_back(-18462.49098408308);
    4252          12 :   parameter_solv[GLN].push_back(132718.44904081387);
    4253          12 :   parameter_solv[GLN].push_back(-113787.22666510186);
    4254          12 :   parameter_solv[GLN].push_back(30920.348610969988);
    4255             : 
    4256          12 :   parameter_solv[SER].push_back(9181.472400119354);
    4257          12 :   parameter_solv[SER].push_back(-28.77519915767741);
    4258          12 :   parameter_solv[SER].push_back(-15205.543144104717);
    4259          12 :   parameter_solv[SER].push_back(-3377.782176346411);
    4260          12 :   parameter_solv[SER].push_back(23345.555771001076);
    4261          12 :   parameter_solv[SER].push_back(-15312.694356014094);
    4262          12 :   parameter_solv[SER].push_back(3013.8428466148);
    4263             : 
    4264          12 :   parameter_solv[THR].push_back(15020.953600119403);
    4265          12 :   parameter_solv[THR].push_back(-61.91004832631006);
    4266          12 :   parameter_solv[THR].push_back(-27814.537889259853);
    4267          12 :   parameter_solv[THR].push_back(-7532.227289701552);
    4268          12 :   parameter_solv[THR].push_back(50586.30566118166);
    4269          12 :   parameter_solv[THR].push_back(-35943.866131120165);
    4270          12 :   parameter_solv[THR].push_back(7880.093558764326);
    4271             : 
    4272          12 :   parameter_solv[VAL].push_back(19647.628900119355);
    4273          12 :   parameter_solv[VAL].push_back(-89.04983250107853);
    4274          12 :   parameter_solv[VAL].push_back(-38050.09958470928);
    4275          12 :   parameter_solv[VAL].push_back(-10921.427112288537);
    4276          12 :   parameter_solv[VAL].push_back(72774.32322962297);
    4277          12 :   parameter_solv[VAL].push_back(-52689.060152305225);
    4278          12 :   parameter_solv[VAL].push_back(11806.492503632868);
    4279             : 
    4280          12 :   parameter_solv[ALA].push_back(7515.156100119276);
    4281          12 :   parameter_solv[ALA].push_back(-20.226381685697746);
    4282          12 :   parameter_solv[ALA].push_back(-11761.841094237716);
    4283          12 :   parameter_solv[ALA].push_back(-2341.4929468980367);
    4284          12 :   parameter_solv[ALA].push_back(16545.385777961936);
    4285          12 :   parameter_solv[ALA].push_back(-10397.175253025776);
    4286          12 :   parameter_solv[ALA].push_back(1921.5264606725107);
    4287             : 
    4288          12 :   parameter_solv[GLY].push_back(3594.002500119159);
    4289          12 :   parameter_solv[GLY].push_back(-6.910836154887606);
    4290          12 :   parameter_solv[GLY].push_back(-4937.354220666574);
    4291          12 :   parameter_solv[GLY].push_back(-785.4549468992149);
    4292          12 :   parameter_solv[GLY].push_back(5852.854429532936);
    4293          12 :   parameter_solv[GLY].push_back(-3391.2927115487832);
    4294          12 :   parameter_solv[GLY].push_back(552.3280571490722);
    4295             : 
    4296          12 :   parameter_solv[HIS].push_back(22888.664100119073);
    4297          12 :   parameter_solv[HIS].push_back(-133.86265270962434);
    4298          12 :   parameter_solv[HIS].push_back(-57533.51591635819);
    4299          12 :   parameter_solv[HIS].push_back(-21767.293192014684);
    4300          12 :   parameter_solv[HIS].push_back(161255.14120001195);
    4301          12 :   parameter_solv[HIS].push_back(-142176.64081149307);
    4302          12 :   parameter_solv[HIS].push_back(39642.61185646193);
    4303             : 
    4304          12 :   parameter_mix[TRP].push_back(48294.0117571196);
    4305          12 :   parameter_mix[TRP].push_back(-205.45879626487798);
    4306          12 :   parameter_mix[TRP].push_back(-148816.1858118254);
    4307          12 :   parameter_mix[TRP].push_back(-54968.030079609875);
    4308          12 :   parameter_mix[TRP].push_back(491793.79967057955);
    4309          12 :   parameter_mix[TRP].push_back(-476312.9117969879);
    4310          12 :   parameter_mix[TRP].push_back(144159.96165644142);
    4311             : 
    4312          12 :   parameter_mix[TYR].push_back(36984.20240312081);
    4313          12 :   parameter_mix[TYR].push_back(-83.86380083812203);
    4314          12 :   parameter_mix[TYR].push_back(-108820.52211887162);
    4315          12 :   parameter_mix[TYR].push_back(-33934.69818901515);
    4316          12 :   parameter_mix[TYR].push_back(341504.736372253);
    4317          12 :   parameter_mix[TYR].push_back(-334008.1748614056);
    4318          12 :   parameter_mix[TYR].push_back(102033.08077851454);
    4319             : 
    4320          12 :   parameter_mix[PHE].push_back(32119.469231338233);
    4321          12 :   parameter_mix[PHE].push_back(-172.96940450568917);
    4322          12 :   parameter_mix[PHE].push_back(-85831.4326887122);
    4323          12 :   parameter_mix[PHE].push_back(-33193.32405438845);
    4324          12 :   parameter_mix[PHE].push_back(262940.64471909316);
    4325          12 :   parameter_mix[PHE].push_back(-243540.06898907054);
    4326          12 :   parameter_mix[PHE].push_back(71084.54387480798);
    4327             : 
    4328          12 :   parameter_mix[HIP].push_back(22833.36414923898);
    4329          12 :   parameter_mix[HIP].push_back(-134.0493955562186);
    4330          12 :   parameter_mix[HIP].push_back(-55325.55607328898);
    4331          12 :   parameter_mix[HIP].push_back(-21898.314938881984);
    4332          12 :   parameter_mix[HIP].push_back(159995.6912885654);
    4333          12 :   parameter_mix[HIP].push_back(-142968.19796084083);
    4334          12 :   parameter_mix[HIP].push_back(40417.44581470003);
    4335             : 
    4336          12 :   parameter_mix[ARG].push_back(31385.401600920715);
    4337          12 :   parameter_mix[ARG].push_back(36.114094042884254);
    4338          12 :   parameter_mix[ARG].push_back(-103730.44467490204);
    4339          12 :   parameter_mix[ARG].push_back(-27036.249157905615);
    4340          12 :   parameter_mix[ARG].push_back(347011.0339314942);
    4341          12 :   parameter_mix[ARG].push_back(-358879.9736802336);
    4342          12 :   parameter_mix[ARG].push_back(114432.18361399164);
    4343             : 
    4344          12 :   parameter_mix[LYS].push_back(25511.35812671878);
    4345          12 :   parameter_mix[LYS].push_back(-130.4381491986372);
    4346          12 :   parameter_mix[LYS].push_back(-69258.61236879184);
    4347          12 :   parameter_mix[LYS].push_back(-27066.36783798707);
    4348          12 :   parameter_mix[LYS].push_back(220092.65231165203);
    4349          12 :   parameter_mix[LYS].push_back(-207794.5056092443);
    4350          12 :   parameter_mix[LYS].push_back(61665.57004630315);
    4351             : 
    4352          12 :   parameter_mix[CYS].push_back(11505.517261618916);
    4353          12 :   parameter_mix[CYS].push_back(-33.60468076978334);
    4354          12 :   parameter_mix[CYS].push_back(-18328.882710004465);
    4355          12 :   parameter_mix[CYS].push_back(-3956.9113649567626);
    4356          12 :   parameter_mix[CYS].push_back(27546.35146501212);
    4357          12 :   parameter_mix[CYS].push_back(-18024.826330595406);
    4358          12 :   parameter_mix[CYS].push_back(3551.2207387570024);
    4359             : 
    4360          12 :   parameter_mix[CYX].push_back(10746.617793719070);
    4361          12 :   parameter_mix[CYX].push_back(-37.082746200650);
    4362          12 :   parameter_mix[CYX].push_back(-17871.552278655203);
    4363          12 :   parameter_mix[CYX].push_back(-4512.203184574789);
    4364          12 :   parameter_mix[CYX].push_back(30605.726711712588);
    4365          12 :   parameter_mix[CYX].push_back(-21530.684072275839);
    4366          12 :   parameter_mix[CYX].push_back(4694.601090758420);
    4367             : 
    4368          12 :   parameter_mix[ASP].push_back(13713.858501879382);
    4369          12 :   parameter_mix[ASP].push_back(-51.33286241257164);
    4370          12 :   parameter_mix[ASP].push_back(-23807.8549764091);
    4371          12 :   parameter_mix[ASP].push_back(-6153.667315935503);
    4372          12 :   parameter_mix[ASP].push_back(41296.118377286424);
    4373          12 :   parameter_mix[ASP].push_back(-28740.28391184026);
    4374          12 :   parameter_mix[ASP].push_back(6132.671533319127);
    4375             : 
    4376          12 :   parameter_mix[GLU].push_back(19156.03660739947);
    4377          12 :   parameter_mix[GLU].push_back(-110.90600703589246);
    4378          12 :   parameter_mix[GLU].push_back(-40319.3351514524);
    4379          12 :   parameter_mix[GLU].push_back(-14679.813393816446);
    4380          12 :   parameter_mix[GLU].push_back(96769.28565573556);
    4381          12 :   parameter_mix[GLU].push_back(-77909.09315520026);
    4382          12 :   parameter_mix[GLU].push_back(19770.047062759568);
    4383             : 
    4384          12 :   parameter_mix[ILE].push_back(20693.06215917923);
    4385          12 :   parameter_mix[ILE].push_back(-102.87208880594848);
    4386          12 :   parameter_mix[ILE].push_back(-41080.44036311675);
    4387          12 :   parameter_mix[ILE].push_back(-12874.439649378206);
    4388          12 :   parameter_mix[ILE].push_back(84947.33147117581);
    4389          12 :   parameter_mix[ILE].push_back(-63779.07871450237);
    4390          12 :   parameter_mix[ILE].push_back(14938.919981690511);
    4391             : 
    4392          12 :   parameter_mix[LEU].push_back(20693.062159179233);
    4393          12 :   parameter_mix[LEU].push_back(-114.09539845409269);
    4394          12 :   parameter_mix[LEU].push_back(-42417.3431074524);
    4395          12 :   parameter_mix[LEU].push_back(-14393.801090829746);
    4396          12 :   parameter_mix[LEU].push_back(93640.48403643962);
    4397          12 :   parameter_mix[LEU].push_back(-71990.10354816525);
    4398          12 :   parameter_mix[LEU].push_back(17299.01082057651);
    4399             : 
    4400          12 :   parameter_mix[MET].push_back(22400.800002738917);
    4401          12 :   parameter_mix[MET].push_back(-138.14469221559762);
    4402          12 :   parameter_mix[MET].push_back(-53013.97694299946);
    4403          12 :   parameter_mix[MET].push_back(-21079.899452619244);
    4404          12 :   parameter_mix[MET].push_back(148607.1089339919);
    4405          12 :   parameter_mix[MET].push_back(-129827.63962878387);
    4406          12 :   parameter_mix[MET].push_back(35882.3297822684);
    4407             : 
    4408          12 :   parameter_mix[ASN].push_back(14384.287416519475);
    4409          12 :   parameter_mix[ASN].push_back(-55.24976731179147);
    4410          12 :   parameter_mix[ASN].push_back(-25372.978199926372);
    4411          12 :   parameter_mix[ASN].push_back(-6646.452004616925);
    4412          12 :   parameter_mix[ASN].push_back(44594.5027556148);
    4413          12 :   parameter_mix[ASN].push_back(-31202.511764907107);
    4414          12 :   parameter_mix[ASN].push_back(6703.764135873442);
    4415             : 
    4416          12 :   parameter_mix[PRO].push_back(13503.797145659117);
    4417          12 :   parameter_mix[PRO].push_back(-38.58316011847087);
    4418          12 :   parameter_mix[PRO].push_back(-21446.17847324053);
    4419          12 :   parameter_mix[PRO].push_back(-4480.55896170459);
    4420          12 :   parameter_mix[PRO].push_back(31274.287350083254);
    4421          12 :   parameter_mix[PRO].push_back(-19984.249229169505);
    4422          12 :   parameter_mix[PRO].push_back(3782.272312712745);
    4423             : 
    4424          12 :   parameter_mix[GLN].push_back(19938.23724683901);
    4425          12 :   parameter_mix[GLN].push_back(-121.24884503048865);
    4426          12 :   parameter_mix[GLN].push_back(-43928.589472297834);
    4427          12 :   parameter_mix[GLN].push_back(-16805.069757865473);
    4428          12 :   parameter_mix[GLN].push_back(112831.61348476357);
    4429          12 :   parameter_mix[GLN].push_back(-93979.08819184235);
    4430          12 :   parameter_mix[GLN].push_back(24741.563493163732);
    4431             : 
    4432          12 :   parameter_mix[SER].push_back(8813.67020471935);
    4433          12 :   parameter_mix[SER].push_back(-18.291615317790175);
    4434          12 :   parameter_mix[SER].push_back(-12585.074732466266);
    4435          12 :   parameter_mix[SER].push_back(-2064.454891600786);
    4436          12 :   parameter_mix[SER].push_back(15273.905065790364);
    4437          12 :   parameter_mix[SER].push_back(-8813.056005263466);
    4438          12 :   parameter_mix[SER].push_back(1404.9812302289881);
    4439             : 
    4440          12 :   parameter_mix[THR].push_back(13233.997179639062);
    4441          12 :   parameter_mix[THR].push_back(-39.40454157416847);
    4442          12 :   parameter_mix[THR].push_back(-21430.58717233547);
    4443          12 :   parameter_mix[THR].push_back(-4566.332853710876);
    4444          12 :   parameter_mix[THR].push_back(31717.497780073558);
    4445          12 :   parameter_mix[THR].push_back(-20299.614304281313);
    4446          12 :   parameter_mix[THR].push_back(3837.207224537505);
    4447             : 
    4448          12 :   parameter_mix[VAL].push_back(15135.438016299158);
    4449          12 :   parameter_mix[VAL].push_back(-51.415141550353205);
    4450          12 :   parameter_mix[VAL].push_back(-25859.078442379723);
    4451          12 :   parameter_mix[VAL].push_back(-6007.697291593915);
    4452          12 :   parameter_mix[VAL].push_back(40997.969600345634);
    4453          12 :   parameter_mix[VAL].push_back(-27036.257386814148);
    4454          12 :   parameter_mix[VAL].push_back(5328.922363811635);
    4455             : 
    4456          12 :   parameter_mix[ALA].push_back(6586.942863819189);
    4457          12 :   parameter_mix[ALA].push_back(-10.96713559950907);
    4458          12 :   parameter_mix[ALA].push_back(-8758.836131731925);
    4459          12 :   parameter_mix[ALA].push_back(-1223.1723720922605);
    4460          12 :   parameter_mix[ALA].push_back(9475.182453543037);
    4461          12 :   parameter_mix[ALA].push_back(-5124.611191433804);
    4462          12 :   parameter_mix[ALA].push_back(721.7625962949869);
    4463             : 
    4464          12 :   parameter_mix[GLY].push_back(3596.0718542192762);
    4465          12 :   parameter_mix[GLY].push_back(-4.079285964028122);
    4466          12 :   parameter_mix[GLY].push_back(-4089.4217504382686);
    4467          12 :   parameter_mix[GLY].push_back(-450.9650932154967);
    4468          12 :   parameter_mix[GLY].push_back(3737.026778223427);
    4469          12 :   parameter_mix[GLY].push_back(-1862.9856575810572);
    4470          12 :   parameter_mix[GLY].push_back(222.97288276257262);
    4471             : 
    4472          12 :   parameter_mix[HIS].push_back(21779.124723299232);
    4473          12 :   parameter_mix[HIS].push_back(-131.4603421188538);
    4474          12 :   parameter_mix[HIS].push_back(-49068.74667421681);
    4475          12 :   parameter_mix[HIS].push_back(-18685.909496392127);
    4476          12 :   parameter_mix[HIS].push_back(127724.60792384286);
    4477          12 :   parameter_mix[HIS].push_back(-107419.22159440348);
    4478          12 :   parameter_mix[HIS].push_back(28577.228634530744);
    4479             : 
    4480          12 :   parameter_vac[TRP].push_back(9599.949107368187);
    4481          12 :   parameter_vac[TRP].push_back(-66.35331786175249);
    4482          12 :   parameter_vac[TRP].push_back(-26311.640290970638);
    4483          12 :   parameter_vac[TRP].push_back(-11577.314600529338);
    4484          12 :   parameter_vac[TRP].push_back(85847.52554160352);
    4485          12 :   parameter_vac[TRP].push_back(-79417.17065742958);
    4486          12 :   parameter_vac[TRP].push_back(23090.348430572863);
    4487             : 
    4488          12 :   parameter_vac[TYR].push_back(7393.553846412945);
    4489          12 :   parameter_vac[TYR].push_back(-27.51954035778316);
    4490          12 :   parameter_vac[TYR].push_back(-20329.10485615286);
    4491          12 :   parameter_vac[TYR].push_back(-7444.276340508767);
    4492          12 :   parameter_vac[TYR].push_back(66343.22315132803);
    4493          12 :   parameter_vac[TYR].push_back(-64470.58721639446);
    4494          12 :   parameter_vac[TYR].push_back(19614.63563898146);
    4495             : 
    4496          12 :   parameter_vac[PHE].push_back(6081.874997705279);
    4497          12 :   parameter_vac[PHE].push_back(-40.474695969500104);
    4498          12 :   parameter_vac[PHE].push_back(-14354.627390498901);
    4499          12 :   parameter_vac[PHE].push_back(-6156.69750315959);
    4500          12 :   parameter_vac[PHE].push_back(42580.84239395237);
    4501          12 :   parameter_vac[PHE].push_back(-37704.09749809582);
    4502          12 :   parameter_vac[PHE].push_back(10543.005717478625);
    4503             : 
    4504          12 :   parameter_vac[HIP].push_back(5325.791987063724);
    4505          12 :   parameter_vac[HIP].push_back(-35.512112257530156);
    4506          12 :   parameter_vac[HIP].push_back(-11488.443296477566);
    4507          12 :   parameter_vac[HIP].push_back(-4916.724935318093);
    4508          12 :   parameter_vac[HIP].push_back(32134.338675979947);
    4509          12 :   parameter_vac[HIP].push_back(-27388.387595464188);
    4510          12 :   parameter_vac[HIP].push_back(7359.899986748838);
    4511             : 
    4512          12 :   parameter_vac[ARG].push_back(7220.306892248294);
    4513          12 :   parameter_vac[ARG].push_back(-20.65912886190997);
    4514          12 :   parameter_vac[ARG].push_back(-22700.70129646048);
    4515          12 :   parameter_vac[ARG].push_back(-8696.901551172636);
    4516          12 :   parameter_vac[ARG].push_back(83641.36257312517);
    4517          12 :   parameter_vac[ARG].push_back(-85237.33676336925);
    4518          12 :   parameter_vac[ARG].push_back(26899.162688310953);
    4519             : 
    4520          12 :   parameter_vac[LYS].push_back(5038.613120729022);
    4521          12 :   parameter_vac[LYS].push_back(-34.08366887546492);
    4522          12 :   parameter_vac[LYS].push_back(-12812.921120433106);
    4523          12 :   parameter_vac[LYS].push_back(-5843.761329082788);
    4524          12 :   parameter_vac[LYS].push_back(42419.08427856609);
    4525          12 :   parameter_vac[LYS].push_back(-39460.49038159249);
    4526          12 :   parameter_vac[LYS].push_back(11542.320830663035);
    4527             : 
    4528          12 :   parameter_vac[CYS].push_back(2915.0458981763995);
    4529          12 :   parameter_vac[CYS].push_back(-5.380571839804511);
    4530          12 :   parameter_vac[CYS].push_back(-3865.366285883624);
    4531          12 :   parameter_vac[CYS].push_back(-602.3275271136284);
    4532          12 :   parameter_vac[CYS].push_back(4524.133086072617);
    4533          12 :   parameter_vac[CYS].push_back(-2537.87137720241);
    4534          12 :   parameter_vac[CYS].push_back(381.52870758240016);
    4535             : 
    4536          12 :   parameter_vac[CYX].push_back(2808.068549348085);
    4537          12 :   parameter_vac[CYX].push_back(-7.372260063948);
    4538          12 :   parameter_vac[CYX].push_back(-4017.492317531980);
    4539          12 :   parameter_vac[CYX].push_back(-840.151815748375);
    4540          12 :   parameter_vac[CYX].push_back(5800.074437790741);
    4541          12 :   parameter_vac[CYX].push_back(-3637.868824045027);
    4542          12 :   parameter_vac[CYX].push_back(659.528934122407);
    4543             : 
    4544          12 :   parameter_vac[ASP].push_back(3479.750728224898);
    4545          12 :   parameter_vac[ASP].push_back(-10.33897891836596);
    4546          12 :   parameter_vac[ASP].push_back(-5382.628188436401);
    4547          12 :   parameter_vac[ASP].push_back(-1183.8060939576694);
    4548          12 :   parameter_vac[ASP].push_back(8100.082378727997);
    4549          12 :   parameter_vac[ASP].push_back(-5162.630696148773);
    4550          12 :   parameter_vac[ASP].push_back(958.993022379732);
    4551             : 
    4552          12 :   parameter_vac[GLU].push_back(4487.461543955491);
    4553          12 :   parameter_vac[GLU].push_back(-26.671865751817936);
    4554          12 :   parameter_vac[GLU].push_back(-8829.738168429001);
    4555          12 :   parameter_vac[GLU].push_back(-3297.668395415257);
    4556          12 :   parameter_vac[GLU].push_back(20686.457747123466);
    4557          12 :   parameter_vac[GLU].push_back(-16030.814134196151);
    4558          12 :   parameter_vac[GLU].push_back(3858.4457728083275);
    4559             : 
    4560          12 :   parameter_vac[ILE].push_back(3842.5968201937776);
    4561          12 :   parameter_vac[ILE].push_back(-13.848165050578492);
    4562          12 :   parameter_vac[ILE].push_back(-6480.062699452774);
    4563          12 :   parameter_vac[ILE].push_back(-1636.3888925440413);
    4564          12 :   parameter_vac[ILE].push_back(10967.333210698738);
    4565          12 :   parameter_vac[ILE].push_back(-7483.704914714421);
    4566          12 :   parameter_vac[ILE].push_back(1548.5696047594895);
    4567             : 
    4568          12 :   parameter_vac[LEU].push_back(3842.5968201937785);
    4569          12 :   parameter_vac[LEU].push_back(-16.2745108270949);
    4570          12 :   parameter_vac[LEU].push_back(-6807.110269770606);
    4571          12 :   parameter_vac[LEU].push_back(-1926.6303434106014);
    4572          12 :   parameter_vac[LEU].push_back(12577.952756390941);
    4573          12 :   parameter_vac[LEU].push_back(-8829.40489330961);
    4574          12 :   parameter_vac[LEU].push_back(1882.919316016889);
    4575             : 
    4576          12 :   parameter_vac[MET].push_back(4898.512892967389);
    4577          12 :   parameter_vac[MET].push_back(-30.588244886468207);
    4578          12 :   parameter_vac[MET].push_back(-10159.093665859045);
    4579          12 :   parameter_vac[MET].push_back(-4025.0261508449653);
    4580          12 :   parameter_vac[MET].push_back(26007.394369425827);
    4581          12 :   parameter_vac[MET].push_back(-21199.218680206573);
    4582          12 :   parameter_vac[MET].push_back(5423.004225853842);
    4583             : 
    4584          12 :   parameter_vac[ASN].push_back(3598.1423998115492);
    4585          12 :   parameter_vac[ASN].push_back(-10.357995638888545);
    4586          12 :   parameter_vac[ASN].push_back(-5565.603011562138);
    4587          12 :   parameter_vac[ASN].push_back(-1190.3294930971967);
    4588          12 :   parameter_vac[ASN].push_back(8227.920711951123);
    4589          12 :   parameter_vac[ASN].push_back(-5222.61541118056);
    4590          12 :   parameter_vac[ASN].push_back(968.593406702772);
    4591             : 
    4592          12 :   parameter_vac[PRO].push_back(2702.925890807494);
    4593          12 :   parameter_vac[PRO].push_back(-4.11690159421177);
    4594          12 :   parameter_vac[PRO].push_back(-3395.325331307625);
    4595          12 :   parameter_vac[PRO].push_back(-458.95242128002894);
    4596          12 :   parameter_vac[PRO].push_back(3584.3640448715823);
    4597          12 :   parameter_vac[PRO].push_back(-1921.4140769384692);
    4598          12 :   parameter_vac[PRO].push_back(267.08577848319516);
    4599             : 
    4600          12 :   parameter_vac[GLN].push_back(4621.773132292556);
    4601          12 :   parameter_vac[GLN].push_back(-29.511778489038818);
    4602          12 :   parameter_vac[GLN].push_back(-9486.077450010192);
    4603          12 :   parameter_vac[GLN].push_back(-3768.5756897489828);
    4604          12 :   parameter_vac[GLN].push_back(23828.07111260487);
    4605          12 :   parameter_vac[GLN].push_back(-19110.205836780202);
    4606          12 :   parameter_vac[GLN].push_back(4791.718204894083);
    4607             : 
    4608          12 :   parameter_vac[SER].push_back(2115.1504654043965);
    4609          12 :   parameter_vac[SER].push_back(-2.4158378234251234);
    4610          12 :   parameter_vac[SER].push_back(-2488.1131972903822);
    4611          12 :   parameter_vac[SER].push_back(-263.64072945387693);
    4612          12 :   parameter_vac[SER].push_back(2251.376687850687);
    4613          12 :   parameter_vac[SER].push_back(-1066.0790768852626);
    4614          12 :   parameter_vac[SER].push_back(105.5155397911316);
    4615             : 
    4616          12 :   parameter_vac[THR].push_back(2914.9061707158835);
    4617          12 :   parameter_vac[THR].push_back(-5.032844592364407);
    4618          12 :   parameter_vac[THR].push_back(-3903.2546253886653);
    4619          12 :   parameter_vac[THR].push_back(-559.4734271244915);
    4620          12 :   parameter_vac[THR].push_back(4315.044828297787);
    4621          12 :   parameter_vac[THR].push_back(-2331.211908177365);
    4622          12 :   parameter_vac[THR].push_back(323.76849758109853);
    4623             : 
    4624          12 :   parameter_vac[VAL].push_back(2914.8744247581953);
    4625          12 :   parameter_vac[VAL].push_back(-5.847217106105881);
    4626          12 :   parameter_vac[VAL].push_back(-4096.370479502377);
    4627          12 :   parameter_vac[VAL].push_back(-655.2917606620404);
    4628          12 :   parameter_vac[VAL].push_back(4888.77261250007);
    4629          12 :   parameter_vac[VAL].push_back(-2765.7552774385167);
    4630          12 :   parameter_vac[VAL].push_back(421.9081598033515);
    4631             : 
    4632          12 :   parameter_vac[ALA].push_back(1443.3438146824446);
    4633          12 :   parameter_vac[ALA].push_back(-1.1234573178567506);
    4634          12 :   parameter_vac[ALA].push_back(-1492.4547663363514);
    4635          12 :   parameter_vac[ALA].push_back(-121.47935619968672);
    4636          12 :   parameter_vac[ALA].push_back(1139.689871538201);
    4637          12 :   parameter_vac[ALA].push_back(-483.8336547914466);
    4638          12 :   parameter_vac[ALA].push_back(32.48231950404626);
    4639             : 
    4640          12 :   parameter_vac[GLY].push_back(899.5356000422925);
    4641          12 :   parameter_vac[GLY].push_back(-0.5200880084066986);
    4642          12 :   parameter_vac[GLY].push_back(-787.5892053280859);
    4643          12 :   parameter_vac[GLY].push_back(-56.07596224884467);
    4644          12 :   parameter_vac[GLY].push_back(546.4212287680981);
    4645          12 :   parameter_vac[GLY].push_back(-222.2667666932616);
    4646          12 :   parameter_vac[GLY].push_back(12.474587265791476);
    4647             : 
    4648          12 :   parameter_vac[HIS].push_back(5180.842705000207);
    4649          12 :   parameter_vac[HIS].push_back(-29.578973475252766);
    4650          12 :   parameter_vac[HIS].push_back(-10323.417251934066);
    4651          12 :   parameter_vac[HIS].push_back(-3788.977215582307);
    4652          12 :   parameter_vac[HIS].push_back(24427.720792289427);
    4653          12 :   parameter_vac[HIS].push_back(-19307.35836837878);
    4654          12 :   parameter_vac[HIS].push_back(4780.831414992477);
    4655             : 
    4656             :   // NUCLEIC ACIDS
    4657          12 :   parameter_solv[BB_PO3].push_back(1464.5929001192262);
    4658          12 :   parameter_solv[BB_PO3].push_back(-2.316908934494931);
    4659          12 :   parameter_solv[BB_PO3].push_back(-1882.4844584696532);
    4660          12 :   parameter_solv[BB_PO3].push_back(-258.8660305554736);
    4661          12 :   parameter_solv[BB_PO3].push_back(2007.5216385943972);
    4662          12 :   parameter_solv[BB_PO3].push_back(-1087.6423562424877);
    4663          12 :   parameter_solv[BB_PO3].push_back(154.89236486681165);
    4664             : 
    4665          12 :   parameter_solv[BB_PO2].push_back(575.5201001192197);
    4666          12 :   parameter_solv[BB_PO2].push_back(-0.6126595489733868);
    4667          12 :   parameter_solv[BB_PO2].push_back(-623.3371092254897);
    4668          12 :   parameter_solv[BB_PO2].push_back(-68.05795957022156);
    4669          12 :   parameter_solv[BB_PO2].push_back(561.8052621243662);
    4670          12 :   parameter_solv[BB_PO2].push_back(-283.39573309540344);
    4671          12 :   parameter_solv[BB_PO2].push_back(35.55001698010027);
    4672             : 
    4673          12 :   parameter_solv[BB_DNA].push_back(21211.009600118316);
    4674          12 :   parameter_solv[BB_DNA].push_back(-90.18805990529991);
    4675          12 :   parameter_solv[BB_DNA].push_back(-39731.1337351215);
    4676          12 :   parameter_solv[BB_DNA].push_back(-10920.373563712878);
    4677          12 :   parameter_solv[BB_DNA].push_back(72882.21702424977);
    4678          12 :   parameter_solv[BB_DNA].push_back(-51747.487078112754);
    4679          12 :   parameter_solv[BB_DNA].push_back(11308.67842901876);
    4680             : 
    4681          12 :   parameter_solv[BB_DNA_5].push_back(22737.624100119025);
    4682          12 :   parameter_solv[BB_DNA_5].push_back(-102.72714886664163);
    4683          12 :   parameter_solv[BB_DNA_5].push_back(-43685.329677789705);
    4684          12 :   parameter_solv[BB_DNA_5].push_back(-12564.259374093454);
    4685          12 :   parameter_solv[BB_DNA_5].push_back(83454.87540484876);
    4686          12 :   parameter_solv[BB_DNA_5].push_back(-60367.15652138888);
    4687          12 :   parameter_solv[BB_DNA_5].push_back(13507.33372986899);
    4688             : 
    4689          12 :   parameter_solv[BB_DNA_3].push_back(22737.62410011902);
    4690          12 :   parameter_solv[BB_DNA_3].push_back(-101.57816684452263);
    4691          12 :   parameter_solv[BB_DNA_3].push_back(-43488.53670557616);
    4692          12 :   parameter_solv[BB_DNA_3].push_back(-12345.056184958417);
    4693          12 :   parameter_solv[BB_DNA_3].push_back(81963.5236411489);
    4694          12 :   parameter_solv[BB_DNA_3].push_back(-58791.59443618196);
    4695          12 :   parameter_solv[BB_DNA_3].push_back(13003.199362335576);
    4696             : 
    4697          12 :   parameter_solv[BB_RNA].push_back(23953.752900120977);
    4698          12 :   parameter_solv[BB_RNA].push_back(-117.35779348824401);
    4699          12 :   parameter_solv[BB_RNA].push_back(-47644.41735332837);
    4700          12 :   parameter_solv[BB_RNA].push_back(-14641.556643789863);
    4701          12 :   parameter_solv[BB_RNA].push_back(96893.48627050382);
    4702          12 :   parameter_solv[BB_RNA].push_back(-72249.62534169314);
    4703          12 :   parameter_solv[BB_RNA].push_back(16792.05552105538);
    4704             : 
    4705          12 :   parameter_solv[BB_RNA_5].push_back(25574.406400119024);
    4706          12 :   parameter_solv[BB_RNA_5].push_back(-131.99642772933734);
    4707          12 :   parameter_solv[BB_RNA_5].push_back(-52136.51404531249);
    4708          12 :   parameter_solv[BB_RNA_5].push_back(-16682.14273917604);
    4709          12 :   parameter_solv[BB_RNA_5].push_back(110278.019216394);
    4710          12 :   parameter_solv[BB_RNA_5].push_back(-83715.92027818545);
    4711          12 :   parameter_solv[BB_RNA_5].push_back(19875.891337706045);
    4712             : 
    4713          12 :   parameter_solv[BB_RNA_3].push_back(25574.406400119024);
    4714          12 :   parameter_solv[BB_RNA_3].push_back(-127.96875237036166);
    4715          12 :   parameter_solv[BB_RNA_3].push_back(-51407.183917584385);
    4716          12 :   parameter_solv[BB_RNA_3].push_back(-15922.900669975606);
    4717          12 :   parameter_solv[BB_RNA_3].push_back(105078.58889106264);
    4718          12 :   parameter_solv[BB_RNA_3].push_back(-78289.16276190648);
    4719          12 :   parameter_solv[BB_RNA_3].push_back(18156.83214344118);
    4720             : 
    4721          12 :   parameter_solv[BASE_A].push_back(13282.562500119211);
    4722          12 :   parameter_solv[BASE_A].push_back(-76.45124168404048);
    4723          12 :   parameter_solv[BASE_A].push_back(-28376.06994108963);
    4724          12 :   parameter_solv[BASE_A].push_back(-9972.910773722022);
    4725          12 :   parameter_solv[BASE_A].push_back(65873.86341939073);
    4726          12 :   parameter_solv[BASE_A].push_back(-52064.33492910885);
    4727          12 :   parameter_solv[BASE_A].push_back(12931.608989412513);
    4728             : 
    4729          12 :   parameter_solv[BASE_C].push_back(10600.76160011891);
    4730          12 :   parameter_solv[BASE_C].push_back(-49.1670871249108);
    4731          12 :   parameter_solv[BASE_C].push_back(-20239.818742072875);
    4732          12 :   parameter_solv[BASE_C].push_back(-6020.278780090207);
    4733          12 :   parameter_solv[BASE_C].push_back(39632.13288981881);
    4734          12 :   parameter_solv[BASE_C].push_back(-28954.779736165576);
    4735          12 :   parameter_solv[BASE_C].push_back(6551.541109526305);
    4736             : 
    4737          12 :   parameter_solv[BASE_G].push_back(15470.384400119934);
    4738          12 :   parameter_solv[BASE_G].push_back(-93.8013620200972);
    4739          12 :   parameter_solv[BASE_G].push_back(-36188.29687013545);
    4740          12 :   parameter_solv[BASE_G].push_back(-13717.685098209471);
    4741          12 :   parameter_solv[BASE_G].push_back(95658.18473657136);
    4742          12 :   parameter_solv[BASE_G].push_back(-81262.37811451119);
    4743          12 :   parameter_solv[BASE_G].push_back(21841.903930943085);
    4744             : 
    4745          12 :   parameter_solv[BASE_T].push_back(17210.81610011936);
    4746          12 :   parameter_solv[BASE_T].push_back(-93.10189802920208);
    4747          12 :   parameter_solv[BASE_T].push_back(-36466.51927689957);
    4748          12 :   parameter_solv[BASE_T].push_back(-12425.55615716932);
    4749          12 :   parameter_solv[BASE_T].push_back(83847.427808925);
    4750          12 :   parameter_solv[BASE_T].push_back(-66735.64997846584);
    4751          12 :   parameter_solv[BASE_T].push_back(16757.3463987507);
    4752             : 
    4753          12 :   parameter_solv[BASE_U].push_back(10909.802500119395);
    4754          12 :   parameter_solv[BASE_U].push_back(-46.17712672768298);
    4755          12 :   parameter_solv[BASE_U].push_back(-20149.67695512526);
    4756          12 :   parameter_solv[BASE_U].push_back(-5590.242961204435);
    4757          12 :   parameter_solv[BASE_U].push_back(37169.2740983132);
    4758          12 :   parameter_solv[BASE_U].push_back(-26475.631627167604);
    4759          12 :   parameter_solv[BASE_U].push_back(5808.201015156168);
    4760             : 
    4761          12 :   parameter_mix[BB_PO3].push_back(3061.4050527391964);
    4762          12 :   parameter_mix[BB_PO3].push_back(-2.022452986623699);
    4763          12 :   parameter_mix[BB_PO3].push_back(-2998.2603666141363);
    4764          12 :   parameter_mix[BB_PO3].push_back(-218.44256405859076);
    4765          12 :   parameter_mix[BB_PO3].push_back(2113.3633950628328);
    4766          12 :   parameter_mix[BB_PO3].push_back(-868.4021757095805);
    4767          12 :   parameter_mix[BB_PO3].push_back(52.19052064107954);
    4768             : 
    4769          12 :   parameter_mix[BB_PO2].push_back(1487.2888381188868);
    4770          12 :   parameter_mix[BB_PO2].push_back(-0.6155376265599789);
    4771          12 :   parameter_mix[BB_PO2].push_back(-1181.5076027691764);
    4772          12 :   parameter_mix[BB_PO2].push_back(-66.25027450710594);
    4773          12 :   parameter_mix[BB_PO2].push_back(697.0421991965113);
    4774          12 :   parameter_mix[BB_PO2].push_back(-261.8559466354847);
    4775          12 :   parameter_mix[BB_PO2].push_back(9.974337082362194);
    4776             : 
    4777          12 :   parameter_mix[BB_DNA].push_back(17766.29474499878);
    4778          12 :   parameter_mix[BB_DNA].push_back(-48.97330188566253);
    4779          12 :   parameter_mix[BB_DNA].push_back(-28199.563596327207);
    4780          12 :   parameter_mix[BB_DNA].push_back(-5623.82085602494);
    4781          12 :   parameter_mix[BB_DNA].push_back(39646.22954828498);
    4782          12 :   parameter_mix[BB_DNA].push_back(-24658.81157651943);
    4783          12 :   parameter_mix[BB_DNA].push_back(4453.73906293146);
    4784             : 
    4785          12 :   parameter_mix[BB_DNA_5].push_back(18696.09744203927);
    4786          12 :   parameter_mix[BB_DNA_5].push_back(-56.29408880833802);
    4787          12 :   parameter_mix[BB_DNA_5].push_back(-30486.108599707608);
    4788          12 :   parameter_mix[BB_DNA_5].push_back(-6524.195857141158);
    4789          12 :   parameter_mix[BB_DNA_5].push_back(45280.80142686446);
    4790          12 :   parameter_mix[BB_DNA_5].push_back(-29007.98616567993);
    4791          12 :   parameter_mix[BB_DNA_5].push_back(5488.566965501818);
    4792             : 
    4793          12 :   parameter_mix[BB_DNA_3].push_back(18696.097442039274);
    4794          12 :   parameter_mix[BB_DNA_3].push_back(-55.5645003501971);
    4795          12 :   parameter_mix[BB_DNA_3].push_back(-30422.262113654506);
    4796          12 :   parameter_mix[BB_DNA_3].push_back(-6409.659659309089);
    4797          12 :   parameter_mix[BB_DNA_3].push_back(44605.76043515699);
    4798          12 :   parameter_mix[BB_DNA_3].push_back(-28295.62152988411);
    4799          12 :   parameter_mix[BB_DNA_3].push_back(5262.5765863484);
    4800             : 
    4801          12 :   parameter_mix[BB_RNA].push_back(21356.177105457366);
    4802          12 :   parameter_mix[BB_RNA].push_back(-76.73490647754872);
    4803          12 :   parameter_mix[BB_RNA].push_back(-36845.234814782816);
    4804          12 :   parameter_mix[BB_RNA].push_back(-9066.559625582728);
    4805          12 :   parameter_mix[BB_RNA].push_back(61167.998793390485);
    4806          12 :   parameter_mix[BB_RNA].push_back(-41467.23384423218);
    4807          12 :   parameter_mix[BB_RNA].push_back(8518.937793863257);
    4808             : 
    4809          12 :   parameter_mix[BB_RNA_5].push_back(22386.63276427916);
    4810          12 :   parameter_mix[BB_RNA_5].push_back(-85.70426456933487);
    4811          12 :   parameter_mix[BB_RNA_5].push_back(-39490.50298502025);
    4812          12 :   parameter_mix[BB_RNA_5].push_back(-10223.702594972712);
    4813          12 :   parameter_mix[BB_RNA_5].push_back(68450.60459618448);
    4814          12 :   parameter_mix[BB_RNA_5].push_back(-47409.91098159006);
    4815          12 :   parameter_mix[BB_RNA_5].push_back(10031.136138513202);
    4816             : 
    4817          12 :   parameter_mix[BB_RNA_3].push_back(22386.63276427916);
    4818          12 :   parameter_mix[BB_RNA_3].push_back(-81.93760812351479);
    4819          12 :   parameter_mix[BB_RNA_3].push_back(-39031.70571520093);
    4820          12 :   parameter_mix[BB_RNA_3].push_back(-9666.316086142708);
    4821          12 :   parameter_mix[BB_RNA_3].push_back(65120.07128126262);
    4822          12 :   parameter_mix[BB_RNA_3].push_back(-44110.13603681317);
    4823          12 :   parameter_mix[BB_RNA_3].push_back(9036.76498256983);
    4824             : 
    4825          12 :   parameter_mix[BASE_A].push_back(15897.31116611889);
    4826          12 :   parameter_mix[BASE_A].push_back(-67.86385832953485);
    4827          12 :   parameter_mix[BASE_A].push_back(-28851.754660951636);
    4828          12 :   parameter_mix[BASE_A].push_back(-8144.431687170413);
    4829          12 :   parameter_mix[BASE_A].push_back(53606.39082954489);
    4830          12 :   parameter_mix[BASE_A].push_back(-38083.51243782253);
    4831          12 :   parameter_mix[BASE_A].push_back(8293.47107993253);
    4832             : 
    4833          12 :   parameter_mix[BASE_C].push_back(11733.2828871599);
    4834          12 :   parameter_mix[BASE_C].push_back(-38.76775400274115);
    4835          12 :   parameter_mix[BASE_C].push_back(-19318.84666423464);
    4836          12 :   parameter_mix[BASE_C].push_back(-4507.915522704176);
    4837          12 :   parameter_mix[BASE_C].push_back(30576.57671286052);
    4838          12 :   parameter_mix[BASE_C].push_back(-20132.46696910844);
    4839          12 :   parameter_mix[BASE_C].push_back(3947.8727087996162);
    4840             : 
    4841          12 :   parameter_mix[BASE_G].push_back(19146.612417237808);
    4842          12 :   parameter_mix[BASE_G].push_back(-102.37046638004914);
    4843          12 :   parameter_mix[BASE_G].push_back(-38718.96478190546);
    4844          12 :   parameter_mix[BASE_G].push_back(-13238.106081860074);
    4845          12 :   parameter_mix[BASE_G].push_back(87309.07460288722);
    4846          12 :   parameter_mix[BASE_G].push_back(-68364.82442984737);
    4847          12 :   parameter_mix[BASE_G].push_back(16815.362401369);
    4848             : 
    4849          12 :   parameter_mix[BASE_T].push_back(17050.440260819163);
    4850          12 :   parameter_mix[BASE_T].push_back(-76.33750600643376);
    4851          12 :   parameter_mix[BASE_T].push_back(-31849.539096715005);
    4852          12 :   parameter_mix[BASE_T].push_back(-9484.498992751434);
    4853          12 :   parameter_mix[BASE_T].push_back(62881.895771680494);
    4854          12 :   parameter_mix[BASE_T].push_back(-46531.948557759024);
    4855          12 :   parameter_mix[BASE_T].push_back(10734.196329884822);
    4856             : 
    4857          12 :   parameter_mix[BASE_U].push_back(11904.095265219023);
    4858          12 :   parameter_mix[BASE_U].push_back(-34.67511054915295);
    4859          12 :   parameter_mix[BASE_U].push_back(-18842.275003104005);
    4860          12 :   parameter_mix[BASE_U].push_back(-3993.1174764890684);
    4861          12 :   parameter_mix[BASE_U].push_back(27663.625106762345);
    4862          12 :   parameter_mix[BASE_U].push_back(-17577.387831701515);
    4863          12 :   parameter_mix[BASE_U].push_back(3273.183903219142);
    4864             : 
    4865          12 :   parameter_vac[BB_PO3].push_back(1599.7962466063982);
    4866          12 :   parameter_vac[BB_PO3].push_back(-0.2734304923675441);
    4867          12 :   parameter_vac[BB_PO3].push_back(-1023.9448073303214);
    4868          12 :   parameter_vac[BB_PO3].push_back(-28.78655166266909);
    4869          12 :   parameter_vac[BB_PO3].push_back(426.4382937268249);
    4870          12 :   parameter_vac[BB_PO3].push_back(-109.57771615730755);
    4871          12 :   parameter_vac[BB_PO3].push_back(-10.244595559424265);
    4872             : 
    4873          12 :   parameter_vac[BB_PO2].push_back(960.8822037291127);
    4874          12 :   parameter_vac[BB_PO2].push_back(-0.09312135742159174);
    4875          12 :   parameter_vac[BB_PO2].push_back(-469.39643497461844);
    4876          12 :   parameter_vac[BB_PO2].push_back(-9.779346709041985);
    4877          12 :   parameter_vac[BB_PO2].push_back(162.1581550003227);
    4878          12 :   parameter_vac[BB_PO2].push_back(-37.06686233305618);
    4879          12 :   parameter_vac[BB_PO2].push_back(-4.695586672655664);
    4880             : 
    4881          12 :   parameter_vac[BB_DNA].push_back(3720.2522996838984);
    4882          12 :   parameter_vac[BB_DNA].push_back(-5.4229642176938);
    4883          12 :   parameter_vac[BB_DNA].push_back(-4800.897672711981);
    4884          12 :   parameter_vac[BB_DNA].push_back(-597.2274673070993);
    4885          12 :   parameter_vac[BB_DNA].push_back(4825.908840953665);
    4886          12 :   parameter_vac[BB_DNA].push_back(-2451.397454446564);
    4887          12 :   parameter_vac[BB_DNA].push_back(294.93071756645685);
    4888             : 
    4889          12 :   parameter_vac[BB_DNA_5].push_back(3843.234214262163);
    4890          12 :   parameter_vac[BB_DNA_5].push_back(-6.423078416284452);
    4891          12 :   parameter_vac[BB_DNA_5].push_back(-5112.1216386963115);
    4892          12 :   parameter_vac[BB_DNA_5].push_back(-713.8373583426668);
    4893          12 :   parameter_vac[BB_DNA_5].push_back(5547.545382516269);
    4894          12 :   parameter_vac[BB_DNA_5].push_back(-2973.5659871174225);
    4895          12 :   parameter_vac[BB_DNA_5].push_back(407.2789106630427);
    4896             : 
    4897          12 :   parameter_vac[BB_DNA_3].push_back(3843.234214262163);
    4898          12 :   parameter_vac[BB_DNA_3].push_back(-6.268636561475645);
    4899          12 :   parameter_vac[BB_DNA_3].push_back(-5103.192931218086);
    4900          12 :   parameter_vac[BB_DNA_3].push_back(-693.8705734390547);
    4901          12 :   parameter_vac[BB_DNA_3].push_back(5443.979645097035);
    4902          12 :   parameter_vac[BB_DNA_3].push_back(-2871.4337477324893);
    4903          12 :   parameter_vac[BB_DNA_3].push_back(377.3062915349831);
    4904             : 
    4905          12 :   parameter_vac[BB_RNA].push_back(4760.071443398374);
    4906          12 :   parameter_vac[BB_RNA].push_back(-11.0990475402486);
    4907          12 :   parameter_vac[BB_RNA].push_back(-6934.713566418421);
    4908          12 :   parameter_vac[BB_RNA].push_back(-1256.5202524085096);
    4909          12 :   parameter_vac[BB_RNA].push_back(9024.962587066922);
    4910          12 :   parameter_vac[BB_RNA].push_back(-5386.842667932241);
    4911          12 :   parameter_vac[BB_RNA].push_back(907.42947751372);
    4912             : 
    4913          12 :   parameter_vac[BB_RNA_5].push_back(4899.051406033406);
    4914          12 :   parameter_vac[BB_RNA_5].push_back(-12.279240472628238);
    4915          12 :   parameter_vac[BB_RNA_5].push_back(-7276.273570813667);
    4916          12 :   parameter_vac[BB_RNA_5].push_back(-1400.9520839250868);
    4917          12 :   parameter_vac[BB_RNA_5].push_back(9912.215823228895);
    4918          12 :   parameter_vac[BB_RNA_5].push_back(-6079.2565270404075);
    4919          12 :   parameter_vac[BB_RNA_5].push_back(1073.53428175472);
    4920             : 
    4921          12 :   parameter_vac[BB_RNA_3].push_back(4899.051406033406);
    4922          12 :   parameter_vac[BB_RNA_3].push_back(-11.642804195148194);
    4923          12 :   parameter_vac[BB_RNA_3].push_back(-7213.774619570996);
    4924          12 :   parameter_vac[BB_RNA_3].push_back(-1317.4463949342964);
    4925          12 :   parameter_vac[BB_RNA_3].push_back(9450.928929264686);
    4926          12 :   parameter_vac[BB_RNA_3].push_back(-5643.856117200917);
    4927          12 :   parameter_vac[BB_RNA_3].push_back(949.4698817407918);
    4928             : 
    4929          12 :   parameter_vac[BASE_A].push_back(4756.697028810353);
    4930          12 :   parameter_vac[BASE_A].push_back(-12.158940746852812);
    4931          12 :   parameter_vac[BASE_A].push_back(-7106.473423744205);
    4932          12 :   parameter_vac[BASE_A].push_back(-1376.295184173137);
    4933          12 :   parameter_vac[BASE_A].push_back(9747.132255557788);
    4934          12 :   parameter_vac[BASE_A].push_back(-5900.026637038756);
    4935          12 :   parameter_vac[BASE_A].push_back(1004.6226388342955);
    4936             : 
    4937          12 :   parameter_vac[BASE_C].push_back(3246.698975674651);
    4938          12 :   parameter_vac[BASE_C].push_back(-6.125036521218687);
    4939          12 :   parameter_vac[BASE_C].push_back(-4280.666521437201);
    4940          12 :   parameter_vac[BASE_C].push_back(-684.0183580843932);
    4941          12 :   parameter_vac[BASE_C].push_back(5077.062889522692);
    4942          12 :   parameter_vac[BASE_C].push_back(-2870.3239317750963);
    4943          12 :   parameter_vac[BASE_C].push_back(434.51551177863547);
    4944             : 
    4945          12 :   parameter_vac[BASE_G].push_back(5924.105658596052);
    4946          12 :   parameter_vac[BASE_G].push_back(-23.097956587232552);
    4947          12 :   parameter_vac[BASE_G].push_back(-10149.526301285418);
    4948          12 :   parameter_vac[BASE_G].push_back(-2752.9166169522528);
    4949          12 :   parameter_vac[BASE_G].push_back(18239.32985385683);
    4950          12 :   parameter_vac[BASE_G].push_back(-12749.277858800957);
    4951          12 :   parameter_vac[BASE_G].push_back(2715.354663787367);
    4952             : 
    4953          12 :   parameter_vac[BASE_T].push_back(4222.889713694404);
    4954          12 :   parameter_vac[BASE_T].push_back(-12.15861456306705);
    4955          12 :   parameter_vac[BASE_T].push_back(-6395.50289789404);
    4956          12 :   parameter_vac[BASE_T].push_back(-1421.3942549301012);
    4957          12 :   parameter_vac[BASE_T].push_back(9757.061008720135);
    4958          12 :   parameter_vac[BASE_T].push_back(-6399.630933839126);
    4959          12 :   parameter_vac[BASE_T].push_back(1258.9874225605438);
    4960             : 
    4961          12 :   parameter_vac[BASE_U].push_back(3247.251361465539);
    4962          12 :   parameter_vac[BASE_U].push_back(-5.211020853261115);
    4963          12 :   parameter_vac[BASE_U].push_back(-4125.165310360279);
    4964          12 :   parameter_vac[BASE_U].push_back(-575.1860235473902);
    4965          12 :   parameter_vac[BASE_U].push_back(4457.6562621371495);
    4966          12 :   parameter_vac[BASE_U].push_back(-2368.7250146912766);
    4967          12 :   parameter_vac[BASE_U].push_back(313.23997718445014);
    4968             : 
    4969       38704 :   for(unsigned i=0; i<atoms.size(); ++i) {
    4970       38692 :     std::string Aname = pdb.getAtomName(atoms[i]);
    4971       38692 :     std::string Rname = pdb.getResidueName(atoms[i]);
    4972       38692 :     Rname.erase(std::remove_if(Rname.begin(), Rname.end(), ::isspace),Rname.end());
    4973       38692 :     Rname = onebeadResidueAlias(Rname);
    4974       38692 :     if(Rname=="ALA") {
    4975        1973 :       atoi[residue_atoms[i]]=ALA;
    4976       36719 :     } else if(Rname=="ARG") {
    4977        2376 :       atoi[residue_atoms[i]]=ARG;
    4978       34343 :     } else if(Rname=="ASN") {
    4979        1980 :       atoi[residue_atoms[i]]=ASN;
    4980       32363 :     } else if(Rname=="ASP") {
    4981        1716 :       atoi[residue_atoms[i]]=ASP;
    4982       30647 :     } else if(Rname=="CYS") {
    4983         132 :       atoi[residue_atoms[i]]=CYS;
    4984       30515 :     } else if(Rname=="CYX") {
    4985           0 :       atoi[residue_atoms[i]]=CYX;
    4986       30515 :     } else if(Rname=="GLN") {
    4987        2850 :       atoi[residue_atoms[i]]=GLN;
    4988       27665 :     } else if(Rname=="GLU") {
    4989        1309 :       atoi[residue_atoms[i]]=GLU;
    4990       26356 :     } else if(Rname=="GLY") {
    4991        1710 :       atoi[residue_atoms[i]]=GLY;
    4992       24646 :     } else if(Rname=="HIS") {
    4993           0 :       atoi[residue_atoms[i]]=HIS;
    4994       24646 :     } else if(Rname=="HID") {
    4995           0 :       atoi[residue_atoms[i]]=HIS;
    4996       24646 :     } else if(Rname=="HIE") {
    4997         396 :       atoi[residue_atoms[i]]=HIS;
    4998       24250 :     } else if(Rname=="HIP") {
    4999           0 :       atoi[residue_atoms[i]]=HIP;
    5000             :       // CHARMM NAMING FOR PROTONATION STATES OF HISTIDINE
    5001       24250 :     } else if(Rname=="HSD") {
    5002           0 :       atoi[residue_atoms[i]]=HIS;
    5003       24250 :     } else if(Rname=="HSE") {
    5004           0 :       atoi[residue_atoms[i]]=HIS;
    5005       24250 :     } else if(Rname=="HSP") {
    5006           0 :       atoi[residue_atoms[i]]=HIP;
    5007       24250 :     } else if(Rname=="ILE") {
    5008        2376 :       atoi[residue_atoms[i]]=ILE;
    5009       21874 :     } else if(Rname=="LEU") {
    5010        4180 :       atoi[residue_atoms[i]]=LEU;
    5011       17694 :     } else if(Rname=="LYS") {
    5012        2860 :       atoi[residue_atoms[i]]=LYS;
    5013       14834 :     } else if(Rname=="MET") {
    5014        1520 :       atoi[residue_atoms[i]]=MET;
    5015       13314 :     } else if(Rname=="PHE") {
    5016        2772 :       atoi[residue_atoms[i]]=PHE;
    5017       10542 :     } else if(Rname=="PRO") {
    5018        2057 :       atoi[residue_atoms[i]]=PRO;
    5019        8485 :     } else if(Rname=="SER") {
    5020        1404 :       atoi[residue_atoms[i]]=SER;
    5021        7081 :     } else if(Rname=="THR") {
    5022        1330 :       atoi[residue_atoms[i]]=THR;
    5023        5751 :     } else if(Rname=="TRP") {
    5024           0 :       atoi[residue_atoms[i]]=TRP;
    5025        5751 :     } else if(Rname=="TYR") {
    5026        1452 :       atoi[residue_atoms[i]]=TYR;
    5027        4299 :     } else if(Rname=="VAL") {
    5028        2928 :       atoi[residue_atoms[i]]=VAL;
    5029             :     }
    5030             :     // NUCLEIC ACIDS
    5031             :     // nucleobases are not automatically populated as an additional check on the health of the PDB.
    5032             :     // RNA - G
    5033        1371 :     else if(Rname=="G") {
    5034           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5035           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    5036           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5037           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5038           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5039           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5040           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5041           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5042           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5043           0 :         atoi[residue_atoms[i]]=BB_RNA;
    5044           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5045           0 :                  Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5046           0 :                  Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5047           0 :                  Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5048           0 :         atoi[residue_atoms[i]]=BASE_G;
    5049             :       } else {
    5050           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5051             :       }
    5052             :       // RNA - G3
    5053        1371 :     } else if(Rname=="G3") {
    5054           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5055           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5056           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5057           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    5058           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    5059           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    5060           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    5061           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    5062           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    5063           0 :         atoi[residue_atoms[i]]=BB_RNA_3;
    5064           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5065           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5066           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5067           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5068           0 :         atoi[residue_atoms[i]]=BASE_G;
    5069             :       } else {
    5070           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5071             :       }
    5072             :       // RNA - G5
    5073        1371 :     } else if(Rname=="G5") {
    5074           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5075           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5076           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5077           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    5078           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    5079           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    5080           0 :         atoi[residue_atoms[i]]=BB_RNA_5;
    5081           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5082           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5083           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5084           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5085           0 :         atoi[residue_atoms[i]]=BASE_G;
    5086             :       } else {
    5087           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5088             :       }
    5089             :       // RNA - GT
    5090        1371 :     } else if(Rname=="GT") {
    5091           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5092           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5093           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5094           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5095           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5096           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5097           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5098           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5099           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5100           0 :         atoi[residue_atoms[i]]=BB_RNA;
    5101           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5102           0 :                  Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5103           0 :                  Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5104           0 :                  Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5105           0 :         atoi[residue_atoms[i]]=BASE_G;
    5106             :       } else {
    5107           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5108             :       }
    5109             :       // RNA - U
    5110        1371 :     } else if(Rname=="U") {
    5111        1102 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5112        2166 :           Aname=="O1P" || Aname=="O2P"  ) {
    5113         114 :         atoi [residue_atoms[i]]=BB_PO2;
    5114         988 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5115         874 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5116         722 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5117         570 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5118         456 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5119        1444 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5120         608 :         atoi[residue_atoms[i]]=BB_RNA;
    5121         380 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    5122         266 :                  Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    5123         532 :                  Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    5124         418 :         atoi[residue_atoms[i]]=BASE_U;
    5125             :       } else {
    5126           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5127             :       }
    5128             :       // RNA - U3
    5129         231 :     } else if(Rname=="U3") {
    5130          60 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5131         118 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5132           6 :         atoi [residue_atoms[i]]=BB_PO2;
    5133          54 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    5134          48 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    5135          40 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    5136          32 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    5137          26 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    5138          78 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    5139          34 :         atoi[residue_atoms[i]]=BB_RNA_3;
    5140          20 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    5141          14 :                 Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    5142          28 :                 Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    5143          22 :         atoi[residue_atoms[i]]=BASE_U;
    5144             :       } else {
    5145           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5146             :       }
    5147             :       // RNA - U5
    5148         169 :     } else if(Rname=="U5") {
    5149         162 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5150         144 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5151         120 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5152          96 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    5153          72 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    5154         234 :           Aname=="H2'1" || Aname=="H5T" ) {
    5155         102 :         atoi[residue_atoms[i]]=BB_RNA_5;
    5156          60 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    5157          42 :                 Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    5158          84 :                 Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    5159          66 :         atoi[residue_atoms[i]]=BASE_U;
    5160             :       } else {
    5161           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5162             :       }
    5163             :       // RNA - UT
    5164           1 :     } else if(Rname=="UT") {
    5165           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5166           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5167           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5168           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5169           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5170           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5171           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5172           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5173           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5174           0 :         atoi[residue_atoms[i]]=BB_RNA;
    5175           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    5176           0 :                  Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    5177           0 :                  Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    5178           0 :         atoi[residue_atoms[i]]=BASE_U;
    5179             :       } else {
    5180           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5181             :       }
    5182             :       // RNA - A
    5183           1 :     } else if(Rname=="A") {
    5184           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5185           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    5186           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5187           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5188           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5189           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5190           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5191           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5192           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5193           0 :         atoi[residue_atoms[i]]=BB_RNA;
    5194           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5195           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5196           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5197           0 :                 Aname=="H61" || Aname=="H62" ) {
    5198           0 :         atoi[residue_atoms[i]]=BASE_A;
    5199             :       } else {
    5200           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5201             :       }
    5202             :       // RNA - A3
    5203           1 :     } else if(Rname=="A3") {
    5204           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5205           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5206           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5207           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    5208           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    5209           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    5210           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    5211           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    5212           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    5213           0 :         atoi[residue_atoms[i]]=BB_RNA_3;
    5214           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5215           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5216           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5217           0 :                 Aname=="H61" || Aname=="H62" ) {
    5218           0 :         atoi[residue_atoms[i]]=BASE_A;
    5219             :       } else {
    5220           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5221             :       }
    5222             :       // RNA - A5
    5223           1 :     } else if(Rname=="A5") {
    5224           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5225           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5226           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5227           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    5228           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    5229           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    5230           0 :         atoi[residue_atoms[i]]=BB_RNA_5;
    5231           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5232           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5233           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5234           0 :                 Aname=="H61" || Aname=="H62" ) {
    5235           0 :         atoi[residue_atoms[i]]=BASE_A;
    5236             :       } else {
    5237           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5238             :       }
    5239             :       // RNA - AT
    5240           1 :     } else if(Rname=="AT") {
    5241           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5242           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5243           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5244           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5245           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5246           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5247           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5248           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5249           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5250           0 :         atoi[residue_atoms[i]]=BB_RNA;
    5251           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5252           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5253           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5254           0 :                 Aname=="H61" || Aname=="H62" ) {
    5255           0 :         atoi[residue_atoms[i]]=BASE_A;
    5256             :       } else {
    5257           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5258             :       }
    5259             :       // RNA - C
    5260           1 :     } else if(Rname=="C") {
    5261           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5262           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    5263           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5264           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5265           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5266           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5267           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5268           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5269           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5270           0 :         atoi[residue_atoms[i]]=BB_RNA;
    5271           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5272           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5273           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5274           0 :         atoi[residue_atoms[i]]=BASE_C;
    5275             :       } else {
    5276           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5277             :       }
    5278             :       // RNA - C3
    5279           1 :     } else if(Rname=="C3") {
    5280           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5281           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5282           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5283           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    5284           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    5285           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    5286           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    5287           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    5288           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    5289           0 :         atoi[residue_atoms[i]]=BB_RNA_3;
    5290           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5291           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5292           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5293           0 :         atoi[residue_atoms[i]]=BASE_C;
    5294             :       } else {
    5295           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5296             :       }
    5297             :       // RNA - C5
    5298           1 :     } else if(Rname=="C5") {
    5299           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5300           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5301           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5302           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    5303           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    5304           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    5305           0 :         atoi[residue_atoms[i]]=BB_RNA_5;
    5306           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5307           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5308           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5309           0 :         atoi[residue_atoms[i]]=BASE_C;
    5310             :       } else {
    5311           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5312             :       }
    5313             :       // RNA - CT
    5314           1 :     } else if(Rname=="CT") {
    5315           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5316           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5317           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5318           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5319           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    5320           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    5321           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    5322           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    5323           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    5324           0 :         atoi[residue_atoms[i]]=BB_RNA;
    5325           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5326           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5327           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5328           0 :         atoi[residue_atoms[i]]=BASE_C;
    5329             :       } else {
    5330           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5331             :       }
    5332             :       // DNA - G
    5333           1 :     } else if(Rname=="DG") {
    5334           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5335           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    5336           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5337           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5338           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5339           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5340           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5341           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5342           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5343           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5344           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5345           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5346           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5347           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5348           0 :         atoi[residue_atoms[i]]=BASE_G;
    5349             :       } else {
    5350           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5351             :       }
    5352             :       // DNA - G3
    5353           1 :     } else if(Rname=="DG3") {
    5354           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5355           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5356           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5357           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5358           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5359           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5360           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    5361           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5362           0 :                 Aname=="H3T" ) {
    5363           0 :         atoi[residue_atoms[i]]=BB_DNA_3;
    5364           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5365           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5366           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5367           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5368           0 :         atoi[residue_atoms[i]]=BASE_G;
    5369             :       } else {
    5370           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5371             :       }
    5372             :       // DNA - G5
    5373           1 :     } else if(Rname=="DG5") {
    5374           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5375           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    5376           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5377           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5378           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5379           0 :           Aname=="H5T" ) {
    5380           0 :         atoi[residue_atoms[i]]=BB_DNA_5;
    5381           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5382           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5383           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5384           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5385           0 :         atoi[residue_atoms[i]]=BASE_G;
    5386             :       } else {
    5387           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5388             :       }
    5389             :       // DNA - GT
    5390           1 :     } else if(Rname=="DGT") {
    5391           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5392           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5393           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5394           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5395           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5396           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5397           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5398           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5399           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5400           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5401           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    5402           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    5403           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    5404           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    5405           0 :         atoi[residue_atoms[i]]=BASE_G;
    5406             :       } else {
    5407           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5408             :       }
    5409             :       // DNA - T
    5410           1 :     } else if(Rname=="DT") {
    5411           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5412           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    5413           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5414           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5415           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5416           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5417           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5418           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5419           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5420           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5421           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    5422           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    5423           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    5424           0 :                 Aname=="H72" || Aname=="H73" ) {
    5425           0 :         atoi[residue_atoms[i]]=BASE_T;
    5426             :       } else {
    5427           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5428             :       }
    5429             :       // DNA - T3
    5430           1 :     } else if(Rname=="DT3") {
    5431           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5432           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5433           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5434           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5435           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5436           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5437           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    5438           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5439           0 :                 Aname=="H3T" ) {
    5440           0 :         atoi[residue_atoms[i]]=BB_DNA_3;
    5441           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    5442           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    5443           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    5444           0 :                 Aname=="H72" || Aname=="H73" ) {
    5445           0 :         atoi[residue_atoms[i]]=BASE_T;
    5446             :       } else {
    5447           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5448             :       }
    5449             :       // DNA - T5
    5450           1 :     } else if(Rname=="DT5") {
    5451           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5452           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    5453           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5454           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5455           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5456           0 :           Aname=="H5T" ) {
    5457           0 :         atoi[residue_atoms[i]]=BB_DNA_5;
    5458           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    5459           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    5460           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    5461           0 :                 Aname=="H72" || Aname=="H73" ) {
    5462           0 :         atoi[residue_atoms[i]]=BASE_T;
    5463             :       } else {
    5464           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5465             :       }
    5466             :       // DNA - TT
    5467           1 :     } else if(Rname=="DTT") {
    5468           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5469           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5470           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5471           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5472           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5473           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5474           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5475           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5476           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5477           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5478           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    5479           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    5480           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    5481           0 :                 Aname=="H72" || Aname=="H73" ) {
    5482           0 :         atoi[residue_atoms[i]]=BASE_T;
    5483             :       } else {
    5484           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5485             :       }
    5486             :       // DNA - A
    5487           1 :     } else if(Rname=="DA") {
    5488           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5489           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    5490           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5491           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5492           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5493           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5494           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5495           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5496           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5497           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5498           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5499           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5500           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5501           0 :                 Aname=="H61" || Aname=="H62" ) {
    5502           0 :         atoi[residue_atoms[i]]=BASE_A;
    5503             :       } else {
    5504           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5505             :       }
    5506             :       // DNA - A3
    5507           1 :     } else if(Rname=="DA3") {
    5508           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5509           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5510           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5511           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5512           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5513           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5514           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    5515           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5516           0 :                 Aname=="H3T" ) {
    5517           0 :         atoi[residue_atoms[i]]=BB_DNA_3;
    5518           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5519           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5520           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5521           0 :                 Aname=="H61" || Aname=="H62" ) {
    5522           0 :         atoi[residue_atoms[i]]=BASE_A;
    5523             :       } else {
    5524           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5525             :       }
    5526             :       // DNA - A5
    5527           1 :     } else if(Rname=="DA5") {
    5528           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5529           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    5530           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5531           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5532           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5533           0 :           Aname=="H5T" ) {
    5534           0 :         atoi[residue_atoms[i]]=BB_DNA_5;
    5535           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5536           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5537           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5538           0 :                 Aname=="H61" || Aname=="H62" ) {
    5539           0 :         atoi[residue_atoms[i]]=BASE_A;
    5540             :       } else {
    5541           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5542             :       }
    5543             :       // DNA - AT
    5544           1 :     } else if(Rname=="DAT") {
    5545           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5546           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5547           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5548           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5549           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5550           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5551           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5552           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5553           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5554           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5555           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    5556           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    5557           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    5558           0 :                 Aname=="H61" || Aname=="H62" ) {
    5559           0 :         atoi[residue_atoms[i]]=BASE_A;
    5560             :       } else {
    5561           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5562             :       }
    5563             :       // DNA - C
    5564           1 :     } else if(Rname=="DC") {
    5565           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    5566           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    5567           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5568           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5569           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5570           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5571           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5572           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5573           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5574           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5575           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5576           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5577           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5578           0 :         atoi[residue_atoms[i]]=BASE_C;
    5579             :       } else {
    5580           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5581             :       }
    5582             :       // DNA - C3
    5583           1 :     } else if(Rname=="DC3") {
    5584           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    5585           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    5586           0 :         atoi [residue_atoms[i]]=BB_PO2;
    5587           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5588           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5589           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5590           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    5591           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5592           0 :                 Aname=="H3T" ) {
    5593           0 :         atoi[residue_atoms[i]]=BB_DNA_3;
    5594           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5595           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5596           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5597           0 :         atoi[residue_atoms[i]]=BASE_C;
    5598             :       } else {
    5599           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5600             :       }
    5601             :       // DNA - C5
    5602           1 :     } else if(Rname=="DC5") {
    5603           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5604           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    5605           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5606           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5607           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    5608           0 :           Aname=="H5T" ) {
    5609           0 :         atoi[residue_atoms[i]]=BB_DNA_5;
    5610           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5611           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5612           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5613           0 :         atoi[residue_atoms[i]]=BASE_C;
    5614             :       } else {
    5615           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5616             :       }
    5617             :       // DNA - CT
    5618           1 :     } else if(Rname=="DCT") {
    5619           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    5620           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    5621           0 :         atoi [residue_atoms[i]]=BB_PO3;
    5622           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    5623           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    5624           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    5625           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    5626           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    5627           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    5628           0 :         atoi[residue_atoms[i]]=BB_DNA;
    5629           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    5630           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    5631           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    5632           0 :         atoi[residue_atoms[i]]=BASE_C;
    5633             :       } else {
    5634           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    5635             :       }
    5636           1 :     } else if(glyc_type[i] >= 0) {
    5637             :       // monosaccharide: the bead type was resolved once, from the residue name and
    5638             :       // from the presence of an N-acetyl group, in getOnebeadMapping()
    5639           0 :       atoi[residue_atoms[i]] = static_cast<unsigned>(glyc_type[i]);
    5640           1 :     } else if(isUnsupportedGlycan(Rname)) {
    5641           0 :       error("Residue "+Rname+" is a monosaccharide for which no ONEBEAD parameters are available.");
    5642           1 :     } else if(ionTypeFromResname(Rname) >= 0) {
    5643             :       // monoatomic ion: assign its onebead bead type. The vac/solv/mix terms for this
    5644             :       // slot are filled analytically in getOnebeadIonparam_saxs (called from the constructor).
    5645           1 :       atoi[residue_atoms[i]] = obSlot(ionTypeFromResname(Rname));
    5646             :     } else {
    5647           0 :       error("Residue not known: "+Rname);
    5648             :     }
    5649             :   }
    5650          12 : }
    5651             : 
    5652          11 : void SAXS::getOnebeadparam_sansH(const PDB &pdb, const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter_vac_H, std::vector<std::vector<long double> > &parameter_mix_H, std::vector<std::vector<long double> > &parameter_solv_H) {
    5653          11 :   parameter_solv_H[TRP].push_back(60737.60249988011);
    5654          11 :   parameter_solv_H[TRP].push_back(-77.77344118516487);
    5655          11 :   parameter_solv_H[TRP].push_back(-205962.80436572764);
    5656          11 :   parameter_solv_H[TRP].push_back(-62014.18523271781);
    5657          11 :   parameter_solv_H[TRP].push_back(680712.0512548896);
    5658          11 :   parameter_solv_H[TRP].push_back(-681337.967312983);
    5659          11 :   parameter_solv_H[TRP].push_back(211474.00338118695);
    5660             : 
    5661          11 :   parameter_solv_H[TYR].push_back(46250.803599880084);
    5662          11 :   parameter_solv_H[TYR].push_back(-45.827646837514614);
    5663          11 :   parameter_solv_H[TYR].push_back(-143872.94597686914);
    5664          11 :   parameter_solv_H[TYR].push_back(-39049.51580628132);
    5665          11 :   parameter_solv_H[TYR].push_back(441321.31246635393);
    5666          11 :   parameter_solv_H[TYR].push_back(-434477.6826175059);
    5667          11 :   parameter_solv_H[TYR].push_back(133179.21673104732);
    5668             : 
    5669          11 :   parameter_solv_H[PHE].push_back(42407.164900118914);
    5670          11 :   parameter_solv_H[PHE].push_back(-159.20054549009086);
    5671          11 :   parameter_solv_H[PHE].push_back(-123847.83591352346);
    5672          11 :   parameter_solv_H[PHE].push_back(-41797.78884558073);
    5673          11 :   parameter_solv_H[PHE].push_back(380283.87543872406);
    5674          11 :   parameter_solv_H[PHE].push_back(-361432.81356389285);
    5675          11 :   parameter_solv_H[PHE].push_back(107750.69385054041);
    5676             : 
    5677          11 :   parameter_solv_H[HIP].push_back(24473.473600119047);
    5678          11 :   parameter_solv_H[HIP].push_back(-111.6412807124612);
    5679          11 :   parameter_solv_H[HIP].push_back(-65826.17293437096);
    5680          11 :   parameter_solv_H[HIP].push_back(-23305.902022201855);
    5681          11 :   parameter_solv_H[HIP].push_back(194795.09953510275);
    5682          11 :   parameter_solv_H[HIP].push_back(-180454.47859494278);
    5683          11 :   parameter_solv_H[HIP].push_back(52699.36922660704);
    5684             : 
    5685          11 :   parameter_solv_H[ARG].push_back(34106.70239988039);
    5686          11 :   parameter_solv_H[ARG].push_back(152.74468231268114);
    5687          11 :   parameter_solv_H[ARG].push_back(-117086.46040369231);
    5688          11 :   parameter_solv_H[ARG].push_back(-19664.37512726012);
    5689          11 :   parameter_solv_H[ARG].push_back(364454.3721646173);
    5690          11 :   parameter_solv_H[ARG].push_back(-382076.05102190404);
    5691          11 :   parameter_solv_H[ARG].push_back(122775.83306003918);
    5692             : 
    5693          11 :   parameter_solv_H[LYS].push_back(32292.09000011877);
    5694          11 :   parameter_solv_H[LYS].push_back(-111.97888350941923);
    5695          11 :   parameter_solv_H[LYS].push_back(-91953.05212591762);
    5696          11 :   parameter_solv_H[LYS].push_back(-30691.03615444628);
    5697          11 :   parameter_solv_H[LYS].push_back(282092.82233263896);
    5698          11 :   parameter_solv_H[LYS].push_back(-269503.6095978623);
    5699          11 :   parameter_solv_H[LYS].push_back(80777.92760273012);
    5700             : 
    5701          11 :   parameter_solv_H[CYS].push_back(11352.902500119093);
    5702          11 :   parameter_solv_H[CYS].push_back(-45.52255488723637);
    5703          11 :   parameter_solv_H[CYS].push_back(-20925.086525675117);
    5704          11 :   parameter_solv_H[CYS].push_back(-5662.681335644281);
    5705          11 :   parameter_solv_H[CYS].push_back(38559.09602816144);
    5706          11 :   parameter_solv_H[CYS].push_back(-27885.22747486708);
    5707          11 :   parameter_solv_H[CYS].push_back(6280.148346561226);
    5708             : 
    5709          11 :   parameter_solv_H[CYX].push_back(10281.960000119348);
    5710          11 :   parameter_solv_H[CYX].push_back(-42.315998754511);
    5711          11 :   parameter_solv_H[CYX].push_back(-19328.174487327480);
    5712          11 :   parameter_solv_H[CYX].push_back(-5523.191775626829);
    5713          11 :   parameter_solv_H[CYX].push_back(38185.463172673335);
    5714          11 :   parameter_solv_H[CYX].push_back(-28940.174693042034);
    5715          11 :   parameter_solv_H[CYX].push_back(6925.390014187676);
    5716             : 
    5717          11 :   parameter_solv_H[ASP].push_back(13511.73760011933);
    5718          11 :   parameter_solv_H[ASP].push_back(-59.92934247210642);
    5719          11 :   parameter_solv_H[ASP].push_back(-25849.867077822244);
    5720          11 :   parameter_solv_H[ASP].push_back(-7541.679510407563);
    5721          11 :   parameter_solv_H[ASP].push_back(50760.93853987092);
    5722          11 :   parameter_solv_H[ASP].push_back(-37677.89102528413);
    5723          11 :   parameter_solv_H[ASP].push_back(8745.710458140105);
    5724             : 
    5725          11 :   parameter_solv_H[GLU].push_back(20443.280400119456);
    5726          11 :   parameter_solv_H[GLU].push_back(-113.77513581661388);
    5727          11 :   parameter_solv_H[GLU].push_back(-45587.79863958479);
    5728          11 :   parameter_solv_H[GLU].push_back(-16187.534798976243);
    5729          11 :   parameter_solv_H[GLU].push_back(112609.61802147207);
    5730          11 :   parameter_solv_H[GLU].push_back(-93362.01894077536);
    5731          11 :   parameter_solv_H[GLU].push_back(24519.546829431332);
    5732             : 
    5733          11 :   parameter_solv_H[ILE].push_back(27858.948100119596);
    5734          11 :   parameter_solv_H[ILE].push_back(-159.27394962770595);
    5735          11 :   parameter_solv_H[ILE].push_back(-61571.43025249802);
    5736          11 :   parameter_solv_H[ILE].push_back(-21324.89659912433);
    5737          11 :   parameter_solv_H[ILE].push_back(144070.7880009225);
    5738          11 :   parameter_solv_H[ILE].push_back(-115021.84534734003);
    5739          11 :   parameter_solv_H[ILE].push_back(28939.093300284097);
    5740             : 
    5741          11 :   parameter_solv_H[LEU].push_back(27858.948100119596);
    5742          11 :   parameter_solv_H[LEU].push_back(-165.61872365361);
    5743          11 :   parameter_solv_H[LEU].push_back(-62564.5706162518);
    5744          11 :   parameter_solv_H[LEU].push_back(-22465.325666767214);
    5745          11 :   parameter_solv_H[LEU].push_back(151616.7844050042);
    5746          11 :   parameter_solv_H[LEU].push_back(-122905.60389771541);
    5747          11 :   parameter_solv_H[LEU].push_back(31436.66201442061);
    5748             : 
    5749          11 :   parameter_solv_H[MET].push_back(25609.60090011981);
    5750          11 :   parameter_solv_H[MET].push_back(-135.38816369794569);
    5751          11 :   parameter_solv_H[MET].push_back(-67771.01548433342);
    5752          11 :   parameter_solv_H[MET].push_back(-25228.91756660071);
    5753          11 :   parameter_solv_H[MET].push_back(199649.92084565928);
    5754          11 :   parameter_solv_H[MET].push_back(-182251.9246506795);
    5755          11 :   parameter_solv_H[MET].push_back(52502.876819125115);
    5756             : 
    5757          11 :   parameter_solv_H[ASN].push_back(14376.010000119095);
    5758          11 :   parameter_solv_H[ASN].push_back(-67.65587848183215);
    5759          11 :   parameter_solv_H[ASN].push_back(-28302.877059425664);
    5760          11 :   parameter_solv_H[ASN].push_back(-8577.444107282141);
    5761          11 :   parameter_solv_H[ASN].push_back(57532.88704197217);
    5762          11 :   parameter_solv_H[ASN].push_back(-43261.79974462857);
    5763          11 :   parameter_solv_H[ASN].push_back(10186.450874679671);
    5764             : 
    5765          11 :   parameter_solv_H[PRO].push_back(16866.21690011944);
    5766          11 :   parameter_solv_H[PRO].push_back(-70.84312112734995);
    5767          11 :   parameter_solv_H[PRO].push_back(-31465.8423531932);
    5768          11 :   parameter_solv_H[PRO].push_back(-8653.362744540535);
    5769          11 :   parameter_solv_H[PRO].push_back(58032.27079924916);
    5770          11 :   parameter_solv_H[PRO].push_back(-41521.001733021694);
    5771          11 :   parameter_solv_H[PRO].push_back(9184.527523759205);
    5772             : 
    5773          11 :   parameter_solv_H[GLN].push_back(21503.289600119);
    5774          11 :   parameter_solv_H[GLN].push_back(-121.3012777474678);
    5775          11 :   parameter_solv_H[GLN].push_back(-50468.58503443957);
    5776          11 :   parameter_solv_H[GLN].push_back(-18462.47495329696);
    5777          11 :   parameter_solv_H[GLN].push_back(132718.42007501892);
    5778          11 :   parameter_solv_H[GLN].push_back(-113787.20224345029);
    5779          11 :   parameter_solv_H[GLN].push_back(30920.340813688686);
    5780             : 
    5781          11 :   parameter_solv_H[SER].push_back(9181.47240011935);
    5782          11 :   parameter_solv_H[SER].push_back(-28.775273124392083);
    5783          11 :   parameter_solv_H[SER].push_back(-15205.54229808512);
    5784          11 :   parameter_solv_H[SER].push_back(-3377.785599913673);
    5785          11 :   parameter_solv_H[SER].push_back(23345.562090489493);
    5786          11 :   parameter_solv_H[SER].push_back(-15312.699787471944);
    5787          11 :   parameter_solv_H[SER].push_back(3013.844610647712);
    5788             : 
    5789          11 :   parameter_solv_H[THR].push_back(15020.953600119403);
    5790          11 :   parameter_solv_H[THR].push_back(-61.909951810375105);
    5791          11 :   parameter_solv_H[THR].push_back(-27814.538986050964);
    5792          11 :   parameter_solv_H[THR].push_back(-7532.222992514079);
    5793          11 :   parameter_solv_H[THR].push_back(50586.29804970814);
    5794          11 :   parameter_solv_H[THR].push_back(-35943.85986777198);
    5795          11 :   parameter_solv_H[THR].push_back(7880.091610023207);
    5796             : 
    5797          11 :   parameter_solv_H[VAL].push_back(19647.628900119355);
    5798          11 :   parameter_solv_H[VAL].push_back(-89.04968136833762);
    5799          11 :   parameter_solv_H[VAL].push_back(-38050.10118919102);
    5800          11 :   parameter_solv_H[VAL].push_back(-10921.421066774372);
    5801          11 :   parameter_solv_H[VAL].push_back(72774.31277743122);
    5802          11 :   parameter_solv_H[VAL].push_back(-52689.05168504517);
    5803          11 :   parameter_solv_H[VAL].push_back(11806.48989635518);
    5804             : 
    5805          11 :   parameter_solv_H[ALA].push_back(7515.156100119273);
    5806          11 :   parameter_solv_H[ALA].push_back(-20.226317591188526);
    5807          11 :   parameter_solv_H[ALA].push_back(-11761.841775007797);
    5808          11 :   parameter_solv_H[ALA].push_back(-2341.4903622033885);
    5809          11 :   parameter_solv_H[ALA].push_back(16545.381259883452);
    5810          11 :   parameter_solv_H[ALA].push_back(-10397.171546969075);
    5811          11 :   parameter_solv_H[ALA].push_back(1921.5253045340198);
    5812             : 
    5813          11 :   parameter_solv_H[GLY].push_back(3594.002500119159);
    5814          11 :   parameter_solv_H[GLY].push_back(-6.910832388009796);
    5815          11 :   parameter_solv_H[GLY].push_back(-4937.3542895091905);
    5816          11 :   parameter_solv_H[GLY].push_back(-785.4545979203357);
    5817          11 :   parameter_solv_H[GLY].push_back(5852.853693316741);
    5818          11 :   parameter_solv_H[GLY].push_back(-3391.2920205126734);
    5819          11 :   parameter_solv_H[GLY].push_back(552.3278183161507);
    5820             : 
    5821          11 :   parameter_solv_H[HIS].push_back(22888.664100119073);
    5822          11 :   parameter_solv_H[HIS].push_back(-133.86281863999585);
    5823          11 :   parameter_solv_H[HIS].push_back(-57533.51412287858);
    5824          11 :   parameter_solv_H[HIS].push_back(-21767.300111408193);
    5825          11 :   parameter_solv_H[HIS].push_back(161255.15347073504);
    5826          11 :   parameter_solv_H[HIS].push_back(-142176.65100718598);
    5827          11 :   parameter_solv_H[HIS].push_back(39642.61507384587);
    5828             : 
    5829          11 :   parameter_mix_H[TRP].push_back(2974.6515001192306);
    5830          11 :   parameter_mix_H[TRP].push_back(-18.361939022074825);
    5831          11 :   parameter_mix_H[TRP].push_back(-7284.637435770752);
    5832          11 :   parameter_mix_H[TRP].push_back(-2945.7969900381895);
    5833          11 :   parameter_mix_H[TRP].push_back(21235.01878657283);
    5834          11 :   parameter_mix_H[TRP].push_back(-18909.7406035548);
    5835          11 :   parameter_mix_H[TRP].push_back(5324.324204245179);
    5836             : 
    5837          11 :   parameter_mix_H[TYR].push_back(2029.7362801192114);
    5838          11 :   parameter_mix_H[TYR].push_back(-6.983186065527884);
    5839          11 :   parameter_mix_H[TYR].push_back(-5041.996113037476);
    5840          11 :   parameter_mix_H[TYR].push_back(-1744.5213085724158);
    5841          11 :   parameter_mix_H[TYR].push_back(15329.420227814338);
    5842          11 :   parameter_mix_H[TYR].push_back(-14648.322529889958);
    5843          11 :   parameter_mix_H[TYR].push_back(4405.608657083287);
    5844             : 
    5845          11 :   parameter_mix_H[PHE].push_back(1704.6885401192117);
    5846          11 :   parameter_mix_H[PHE].push_back(-10.077274979133408);
    5847          11 :   parameter_mix_H[PHE].push_back(-3769.440088334303);
    5848          11 :   parameter_mix_H[PHE].push_back(-1574.6255694551546);
    5849          11 :   parameter_mix_H[PHE].push_back(10996.32497868798);
    5850          11 :   parameter_mix_H[PHE].push_back(-9840.68281283696);
    5851          11 :   parameter_mix_H[PHE].push_back(2792.098605716682);
    5852             : 
    5853          11 :   parameter_mix_H[HIP].push_back(1376.0462401192394);
    5854          11 :   parameter_mix_H[HIP].push_back(-8.576320475413144);
    5855          11 :   parameter_mix_H[HIP].push_back(-2796.8327726392167);
    5856          11 :   parameter_mix_H[HIP].push_back(-1165.0473128576);
    5857          11 :   parameter_mix_H[HIP].push_back(7495.063650365717);
    5858          11 :   parameter_mix_H[HIP].push_back(-6331.20422098132);
    5859          11 :   parameter_mix_H[HIP].push_back(1692.637366093312);
    5860             : 
    5861          11 :   parameter_mix_H[ARG].push_back(1280.940480119178);
    5862          11 :   parameter_mix_H[ARG].push_back(-7.411214928783748);
    5863          11 :   parameter_mix_H[ARG].push_back(-3747.6200569785033);
    5864          11 :   parameter_mix_H[ARG].push_back(-1766.5282176004569);
    5865          11 :   parameter_mix_H[ARG].push_back(14307.817638456267);
    5866          11 :   parameter_mix_H[ARG].push_back(-14297.104122885643);
    5867          11 :   parameter_mix_H[ARG].push_back(4450.526244207772);
    5868             : 
    5869          11 :   parameter_mix_H[LYS].push_back(570.7272001192143);
    5870          11 :   parameter_mix_H[LYS].push_back(-5.371742288956095);
    5871          11 :   parameter_mix_H[LYS].push_back(-1255.9868267793006);
    5872          11 :   parameter_mix_H[LYS].push_back(-748.3071074443138);
    5873          11 :   parameter_mix_H[LYS].push_back(4534.824932304509);
    5874          11 :   parameter_mix_H[LYS].push_back(-4125.307867230812);
    5875          11 :   parameter_mix_H[LYS].push_back(1178.781491068295);
    5876             : 
    5877          11 :   parameter_mix_H[CYS].push_back(410.21750011921864);
    5878          11 :   parameter_mix_H[CYS].push_back(-0.7655651758449595);
    5879          11 :   parameter_mix_H[CYS].push_back(-523.8897033718782);
    5880          11 :   parameter_mix_H[CYS].push_back(-89.88478273744425);
    5881          11 :   parameter_mix_H[CYS].push_back(655.3313542467919);
    5882          11 :   parameter_mix_H[CYS].push_back(-407.87897719750896);
    5883          11 :   parameter_mix_H[CYS].push_back(76.50541508448237);
    5884             : 
    5885          11 :   parameter_mix_H[CYX].push_back(466.237200119199);
    5886          11 :   parameter_mix_H[CYX].push_back(-1.302082362010);
    5887          11 :   parameter_mix_H[CYX].push_back(-667.565738985901);
    5888          11 :   parameter_mix_H[CYX].push_back(-159.506437978088);
    5889          11 :   parameter_mix_H[CYX].push_back(1085.648159448292);
    5890          11 :   parameter_mix_H[CYX].push_back(-767.622943338598);
    5891          11 :   parameter_mix_H[CYX].push_back(170.157274620163);
    5892             : 
    5893          11 :   parameter_mix_H[ASP].push_back(893.6531201192147);
    5894          11 :   parameter_mix_H[ASP].push_back(-3.0756255172248874);
    5895          11 :   parameter_mix_H[ASP].push_back(-1453.1760425275006);
    5896          11 :   parameter_mix_H[ASP].push_back(-365.0424824614137);
    5897          11 :   parameter_mix_H[ASP].push_back(2443.570600976796);
    5898          11 :   parameter_mix_H[ASP].push_back(-1679.8996339740277);
    5899          11 :   parameter_mix_H[ASP].push_back(352.33054461512455);
    5900             : 
    5901          11 :   parameter_mix_H[GLU].push_back(1075.4955601191884);
    5902          11 :   parameter_mix_H[GLU].push_back(-6.917429973203965);
    5903          11 :   parameter_mix_H[GLU].push_back(-2262.861870389347);
    5904          11 :   parameter_mix_H[GLU].push_back(-909.8078514527992);
    5905          11 :   parameter_mix_H[GLU].push_back(5841.923857549836);
    5906          11 :   parameter_mix_H[GLU].push_back(-4784.620969556751);
    5907          11 :   parameter_mix_H[GLU].push_back(1230.873134652953);
    5908             : 
    5909          11 :   parameter_mix_H[ILE].push_back(466.0127201192081);
    5910          11 :   parameter_mix_H[ILE].push_back(-0.9323443258150218);
    5911          11 :   parameter_mix_H[ILE].push_back(-576.7178005955719);
    5912          11 :   parameter_mix_H[ILE].push_back(-103.03003361062478);
    5913          11 :   parameter_mix_H[ILE].push_back(706.4269951176641);
    5914          11 :   parameter_mix_H[ILE].push_back(-420.4412859632717);
    5915          11 :   parameter_mix_H[ILE].push_back(71.53175726608731);
    5916             : 
    5917          11 :   parameter_mix_H[LEU].push_back(466.0127201192081);
    5918          11 :   parameter_mix_H[LEU].push_back(-1.9793605752606065);
    5919          11 :   parameter_mix_H[LEU].push_back(-718.3988478701591);
    5920          11 :   parameter_mix_H[LEU].push_back(-227.36409339012113);
    5921          11 :   parameter_mix_H[LEU].push_back(1389.2058254917304);
    5922          11 :   parameter_mix_H[LEU].push_back(-990.0033118748643);
    5923          11 :   parameter_mix_H[LEU].push_back(213.15736815883042);
    5924             : 
    5925          11 :   parameter_mix_H[MET].push_back(562.9855401192196);
    5926          11 :   parameter_mix_H[MET].push_back(-3.7994094933771643);
    5927          11 :   parameter_mix_H[MET].push_back(-1139.6331862451661);
    5928          11 :   parameter_mix_H[MET].push_back(-516.6313269725724);
    5929          11 :   parameter_mix_H[MET].push_back(3268.957245190869);
    5930          11 :   parameter_mix_H[MET].push_back(-2809.178864807947);
    5931          11 :   parameter_mix_H[MET].push_back(761.4832732100416);
    5932             : 
    5933          11 :   parameter_mix_H[ASN].push_back(828.7488001191887);
    5934          11 :   parameter_mix_H[ASN].push_back(-2.1275493073799625);
    5935          11 :   parameter_mix_H[ASN].push_back(-1222.248291388804);
    5936          11 :   parameter_mix_H[ASN].push_back(-238.94210659613537);
    5937          11 :   parameter_mix_H[ASN].push_back(1660.8322402171973);
    5938          11 :   parameter_mix_H[ASN].push_back(-1008.7934996077323);
    5939          11 :   parameter_mix_H[ASN].push_back(173.6082238625797);
    5940             : 
    5941          11 :   parameter_mix_H[PRO].push_back(578.4409801192146);
    5942          11 :   parameter_mix_H[PRO].push_back(-0.5379505780909722);
    5943          11 :   parameter_mix_H[PRO].push_back(-648.146493857212);
    5944          11 :   parameter_mix_H[PRO].push_back(-56.67223895342921);
    5945          11 :   parameter_mix_H[PRO].push_back(509.88860586987437);
    5946          11 :   parameter_mix_H[PRO].push_back(-214.57871784725265);
    5947          11 :   parameter_mix_H[PRO].push_back(11.99659463759968);
    5948             : 
    5949          11 :   parameter_mix_H[GLN].push_back(989.2334401191976);
    5950          11 :   parameter_mix_H[GLN].push_back(-6.307760694331967);
    5951          11 :   parameter_mix_H[GLN].push_back(-1971.7067150503622);
    5952          11 :   parameter_mix_H[GLN].push_back(-791.333088386235);
    5953          11 :   parameter_mix_H[GLN].push_back(4900.009768434847);
    5954          11 :   parameter_mix_H[GLN].push_back(-3909.7740976374153);
    5955          11 :   parameter_mix_H[GLN].push_back(975.4952613244343);
    5956             : 
    5957          11 :   parameter_mix_H[SER].push_back(426.39900011920196);
    5958          11 :   parameter_mix_H[SER].push_back(-0.42304498358319664);
    5959          11 :   parameter_mix_H[SER].push_back(-484.2066027682147);
    5960          11 :   parameter_mix_H[SER].push_back(-45.38968988754228);
    5961          11 :   parameter_mix_H[SER].push_back(401.3420977115044);
    5962          11 :   parameter_mix_H[SER].push_back(-178.0861461692512);
    5963          11 :   parameter_mix_H[SER].push_back(13.540349238730284);
    5964             : 
    5965          11 :   parameter_mix_H[THR].push_back(525.0470401191992);
    5966          11 :   parameter_mix_H[THR].push_back(-0.7419102811534484);
    5967          11 :   parameter_mix_H[THR].push_back(-652.7134808154495);
    5968          11 :   parameter_mix_H[THR].push_back(-80.39481224407903);
    5969          11 :   parameter_mix_H[THR].push_back(641.5487902728123);
    5970          11 :   parameter_mix_H[THR].push_back(-320.4227667104819);
    5971          11 :   parameter_mix_H[THR].push_back(36.03558531183942);
    5972             : 
    5973          11 :   parameter_mix_H[VAL].push_back(414.6228601192123);
    5974          11 :   parameter_mix_H[VAL].push_back(-0.35889335250521337);
    5975          11 :   parameter_mix_H[VAL].push_back(-453.11631644097474);
    5976          11 :   parameter_mix_H[VAL].push_back(-36.402101097644284);
    5977          11 :   parameter_mix_H[VAL].push_back(336.24049431626804);
    5978          11 :   parameter_mix_H[VAL].push_back(-127.42235327515239);
    5979          11 :   parameter_mix_H[VAL].push_back(0.8013280923923705);
    5980             : 
    5981          11 :   parameter_mix_H[ALA].push_back(285.21010011920816);
    5982          11 :   parameter_mix_H[ALA].push_back(-0.1573012439142169);
    5983          11 :   parameter_mix_H[ALA].push_back(-282.8945838800694);
    5984          11 :   parameter_mix_H[ALA].push_back(-16.32030056827785);
    5985          11 :   parameter_mix_H[ALA].push_back(178.065895049598);
    5986          11 :   parameter_mix_H[ALA].push_back(-60.27423229179658);
    5987          11 :   parameter_mix_H[ALA].push_back(-1.4695219304131588);
    5988             : 
    5989          11 :   parameter_mix_H[GLY].push_back(207.18720011920414);
    5990          11 :   parameter_mix_H[GLY].push_back(-0.1036587134183235);
    5991          11 :   parameter_mix_H[GLY].push_back(-185.70794948240638);
    5992          11 :   parameter_mix_H[GLY].push_back(-11.008101039836257);
    5993          11 :   parameter_mix_H[GLY].push_back(115.30600405624061);
    5994          11 :   parameter_mix_H[GLY].push_back(-42.46629718037158);
    5995          11 :   parameter_mix_H[GLY].push_back(0.9238928987070913);
    5996             : 
    5997          11 :   parameter_mix_H[HIS].push_back(1443.9117601192354);
    5998          11 :   parameter_mix_H[HIS].push_back(-7.478618745973115);
    5999          11 :   parameter_mix_H[HIS].push_back(-2715.0835155803215);
    6000          11 :   parameter_mix_H[HIS].push_back(-918.5243015382779);
    6001          11 :   parameter_mix_H[HIS].push_back(5821.6258431396);
    6002          11 :   parameter_mix_H[HIS].push_back(-4415.32722209556);
    6003          11 :   parameter_mix_H[HIS].push_back(1044.7044029209756);
    6004             : 
    6005          11 :   parameter_vac_H[TRP].push_back(36.42122511920832);
    6006          11 :   parameter_vac_H[TRP].push_back(-0.36925500341767903);
    6007          11 :   parameter_vac_H[TRP].push_back(-51.34228792835503);
    6008          11 :   parameter_vac_H[TRP].push_back(-34.10021080004831);
    6009          11 :   parameter_vac_H[TRP].push_back(132.647034983933);
    6010          11 :   parameter_vac_H[TRP].push_back(-82.89152328934257);
    6011          11 :   parameter_vac_H[TRP].push_back(13.029994092013231);
    6012             : 
    6013          11 :   parameter_vac_H[TYR].push_back(22.268961119209557);
    6014          11 :   parameter_vac_H[TYR].push_back(-0.1995573892347673);
    6015          11 :   parameter_vac_H[TYR].push_back(-36.54202179838511);
    6016          11 :   parameter_vac_H[TYR].push_back(-23.820801043096694);
    6017          11 :   parameter_vac_H[TYR].push_back(127.46799692275353);
    6018          11 :   parameter_vac_H[TYR].push_back(-107.63783234245744);
    6019          11 :   parameter_vac_H[TYR].push_back(28.180858902960775);
    6020             : 
    6021          11 :   parameter_vac_H[PHE].push_back(17.131321119209627);
    6022          11 :   parameter_vac_H[PHE].push_back(-0.15766725674246446);
    6023          11 :   parameter_vac_H[PHE].push_back(-19.19964432024534);
    6024          11 :   parameter_vac_H[PHE].push_back(-12.34326882843138);
    6025          11 :   parameter_vac_H[PHE].push_back(38.17216645824474);
    6026          11 :   parameter_vac_H[PHE].push_back(-11.245288857407298);
    6027          11 :   parameter_vac_H[PHE].push_back(-3.8114731300899343);
    6028             : 
    6029          11 :   parameter_vac_H[HIP].push_back(19.34240411920875);
    6030          11 :   parameter_vac_H[HIP].push_back(-0.13533410292592593);
    6031          11 :   parameter_vac_H[HIP].push_back(-25.924121027387276);
    6032          11 :   parameter_vac_H[HIP].push_back(-12.36586927492752);
    6033          11 :   parameter_vac_H[HIP].push_back(56.75268702111191);
    6034          11 :   parameter_vac_H[HIP].push_back(-31.126240293638094);
    6035          11 :   parameter_vac_H[HIP].push_back(2.749811579250848);
    6036             : 
    6037          11 :   parameter_vac_H[ARG].push_back(12.027024119209557);
    6038          11 :   parameter_vac_H[ARG].push_back(-0.41927538341868287);
    6039          11 :   parameter_vac_H[ARG].push_back(-22.137566939867042);
    6040          11 :   parameter_vac_H[ARG].push_back(-43.22615008762667);
    6041          11 :   parameter_vac_H[ARG].push_back(165.77466655520323);
    6042          11 :   parameter_vac_H[ARG].push_back(-140.68664871425898);
    6043          11 :   parameter_vac_H[ARG].push_back(36.67401195170306);
    6044             : 
    6045          11 :   parameter_vac_H[LYS].push_back(2.5217441192093717);
    6046          11 :   parameter_vac_H[LYS].push_back(-0.0032825476242835413);
    6047          11 :   parameter_vac_H[LYS].push_back(14.019071697737793);
    6048          11 :   parameter_vac_H[LYS].push_back(7.8634074595069245);
    6049          11 :   parameter_vac_H[LYS].push_back(-82.44639716451474);
    6050          11 :   parameter_vac_H[LYS].push_back(94.32937851921197);
    6051          11 :   parameter_vac_H[LYS].push_back(-32.324473823417);
    6052             : 
    6053          11 :   parameter_vac_H[CYS].push_back(3.705624880856525);
    6054          11 :   parameter_vac_H[CYS].push_back(0.005214780840206113);
    6055          11 :   parameter_vac_H[CYS].push_back(1.25680902661715);
    6056          11 :   parameter_vac_H[CYS].push_back(0.5779209425501814);
    6057          11 :   parameter_vac_H[CYS].push_back(-3.716408071089366);
    6058          11 :   parameter_vac_H[CYS].push_back(2.3947518943233117);
    6059          11 :   parameter_vac_H[CYS].push_back(-0.40204949737133333);
    6060             : 
    6061          11 :   parameter_vac_H[CYX].push_back(5.285401118868);
    6062          11 :   parameter_vac_H[CYX].push_back(-0.006119528779);
    6063          11 :   parameter_vac_H[CYX].push_back(-3.091212256902);
    6064          11 :   parameter_vac_H[CYX].push_back(-0.679948780910);
    6065          11 :   parameter_vac_H[CYX].push_back(4.495837313271);
    6066          11 :   parameter_vac_H[CYX].push_back(-2.827133444940);
    6067          11 :   parameter_vac_H[CYX].push_back(0.494583310914);
    6068             : 
    6069          11 :   parameter_vac_H[ASP].push_back(14.776336119209605);
    6070          11 :   parameter_vac_H[ASP].push_back(-0.037351220316916435);
    6071          11 :   parameter_vac_H[ASP].push_back(-18.556358387626286);
    6072          11 :   parameter_vac_H[ASP].push_back(-4.1737354794552886);
    6073          11 :   parameter_vac_H[ASP].push_back(28.424721213037405);
    6074          11 :   parameter_vac_H[ASP].push_back(-17.51389895324883);
    6075          11 :   parameter_vac_H[ASP].push_back(2.9729111724708597);
    6076             : 
    6077          11 :   parameter_vac_H[GLU].push_back(14.145121119208973);
    6078          11 :   parameter_vac_H[GLU].push_back(-0.11468766098213011);
    6079          11 :   parameter_vac_H[GLU].push_back(-26.272637652294613);
    6080          11 :   parameter_vac_H[GLU].push_back(-13.769758826440151);
    6081          11 :   parameter_vac_H[GLU].push_back(80.4575683578491);
    6082          11 :   parameter_vac_H[GLU].push_back(-64.19346347075);
    6083          11 :   parameter_vac_H[GLU].push_back(15.545440117656236);
    6084             : 
    6085          11 :   parameter_vac_H[ILE].push_back(1.9488158808808775);
    6086          11 :   parameter_vac_H[ILE].push_back(0.05873132133874459);
    6087          11 :   parameter_vac_H[ILE].push_back(12.032778845884135);
    6088          11 :   parameter_vac_H[ILE].push_back(7.148416980612881);
    6089          11 :   parameter_vac_H[ILE].push_back(-41.87377843832961);
    6090          11 :   parameter_vac_H[ILE].push_back(33.96120749582283);
    6091          11 :   parameter_vac_H[ILE].push_back(-8.362535852631256);
    6092             : 
    6093          11 :   parameter_vac_H[LEU].push_back(1.9488158808977816);
    6094          11 :   parameter_vac_H[LEU].push_back(0.0778305500414777);
    6095          11 :   parameter_vac_H[LEU].push_back(12.333370614594);
    6096          11 :   parameter_vac_H[LEU].push_back(9.449427967560764);
    6097          11 :   parameter_vac_H[LEU].push_back(-52.65457680603262);
    6098          11 :   parameter_vac_H[LEU].push_back(44.681877289399615);
    6099          11 :   parameter_vac_H[LEU].push_back(-11.460498338671227);
    6100             : 
    6101          11 :   parameter_vac_H[MET].push_back(3.0940808808117652);
    6102          11 :   parameter_vac_H[MET].push_back(0.04903755678213222);
    6103          11 :   parameter_vac_H[MET].push_back(8.981927022922049);
    6104          11 :   parameter_vac_H[MET].push_back(8.654862771879014);
    6105          11 :   parameter_vac_H[MET].push_back(-57.09889409156816);
    6106          11 :   parameter_vac_H[MET].push_back(58.87704775164829);
    6107          11 :   parameter_vac_H[MET].push_back(-18.60431990258862);
    6108             : 
    6109          11 :   parameter_vac_H[ASN].push_back(11.943936119209074);
    6110          11 :   parameter_vac_H[ASN].push_back(-0.0005000836239497835);
    6111          11 :   parameter_vac_H[ASN].push_back(-9.581236453763157);
    6112          11 :   parameter_vac_H[ASN].push_back(0.16244025786232308);
    6113          11 :   parameter_vac_H[ASN].push_back(2.9276580099749574);
    6114          11 :   parameter_vac_H[ASN].push_back(2.133535783835143);
    6115          11 :   parameter_vac_H[ASN].push_back(-1.5709968820975018);
    6116             : 
    6117          11 :   parameter_vac_H[PRO].push_back(4.9595288808229245);
    6118          11 :   parameter_vac_H[PRO].push_back(0.017853932680793515);
    6119          11 :   parameter_vac_H[PRO].push_back(4.5421559293101605);
    6120          11 :   parameter_vac_H[PRO].push_back(2.008455612787203);
    6121          11 :   parameter_vac_H[PRO].push_back(-12.444117841318494);
    6122          11 :   parameter_vac_H[PRO].push_back(8.511723688836447);
    6123          11 :   parameter_vac_H[PRO].push_back(-1.6337543903496765);
    6124             : 
    6125          11 :   parameter_vac_H[GLN].push_back(11.377129119208574);
    6126          11 :   parameter_vac_H[GLN].push_back(-0.0674805307761209);
    6127          11 :   parameter_vac_H[GLN].push_back(-16.56692720411458);
    6128          11 :   parameter_vac_H[GLN].push_back(-6.477707440126834);
    6129          11 :   parameter_vac_H[GLN].push_back(34.78232259512621);
    6130          11 :   parameter_vac_H[GLN].push_back(-19.450886909938312);
    6131          11 :   parameter_vac_H[GLN].push_back(1.944286925108988);
    6132             : 
    6133          11 :   parameter_vac_H[SER].push_back(4.95062488096605);
    6134          11 :   parameter_vac_H[SER].push_back(0.004676435440506079);
    6135          11 :   parameter_vac_H[SER].push_back(-0.1896653085608564);
    6136          11 :   parameter_vac_H[SER].push_back(0.5142284931977218);
    6137          11 :   parameter_vac_H[SER].push_back(-2.8946087252759893);
    6138          11 :   parameter_vac_H[SER].push_back(2.1031239401634836);
    6139          11 :   parameter_vac_H[SER].push_back(-0.38226443516361713);
    6140             : 
    6141          11 :   parameter_vac_H[THR].push_back(4.588163880808971);
    6142          11 :   parameter_vac_H[THR].push_back(0.018587905993982613);
    6143          11 :   parameter_vac_H[THR].push_back(3.5289861308270214);
    6144          11 :   parameter_vac_H[THR].push_back(2.0780583604591567);
    6145          11 :   parameter_vac_H[THR].push_back(-12.3802007068414);
    6146          11 :   parameter_vac_H[THR].push_back(8.720986674116094);
    6147          11 :   parameter_vac_H[THR].push_back(-1.683256475122275);
    6148             : 
    6149          11 :   parameter_vac_H[VAL].push_back(2.187440880853519);
    6150          11 :   parameter_vac_H[VAL].push_back(0.028351524826584255);
    6151          11 :   parameter_vac_H[VAL].push_back(8.36584512491955);
    6152          11 :   parameter_vac_H[VAL].push_back(3.1686206615123926);
    6153          11 :   parameter_vac_H[VAL].push_back(-19.81959917770108);
    6154          11 :   parameter_vac_H[VAL].push_back(13.293003038570571);
    6155          11 :   parameter_vac_H[VAL].push_back(-2.4595257726774125);
    6156             : 
    6157          11 :   parameter_vac_H[ALA].push_back(2.7060248808167935);
    6158          11 :   parameter_vac_H[ALA].push_back(0.004618897267213416);
    6159          11 :   parameter_vac_H[ALA].push_back(2.4990261487383947);
    6160          11 :   parameter_vac_H[ALA].push_back(0.49579332664340864);
    6161          11 :   parameter_vac_H[ALA].push_back(-3.850400071630347);
    6162          11 :   parameter_vac_H[ALA].push_back(1.9501161562030942);
    6163          11 :   parameter_vac_H[ALA].push_back(-0.18332582719788362);
    6164             : 
    6165          11 :   parameter_vac_H[GLY].push_back(2.985983880876256);
    6166          11 :   parameter_vac_H[GLY].push_back(0.0005033131808079042);
    6167          11 :   parameter_vac_H[GLY].push_back(-0.42250170279962684);
    6168          11 :   parameter_vac_H[GLY].push_back(0.05620517453257455);
    6169          11 :   parameter_vac_H[GLY].push_back(-0.16801962822020733);
    6170          11 :   parameter_vac_H[GLY].push_back(0.23635459648780555);
    6171          11 :   parameter_vac_H[GLY].push_back(-0.06585244715658795);
    6172             : 
    6173          11 :   parameter_vac_H[HIS].push_back(22.77198411920933);
    6174          11 :   parameter_vac_H[HIS].push_back(-0.06607491006655417);
    6175          11 :   parameter_vac_H[HIS].push_back(-27.277710268717247);
    6176          11 :   parameter_vac_H[HIS].push_back(-5.674444390934355);
    6177          11 :   parameter_vac_H[HIS].push_back(33.4059567406171);
    6178          11 :   parameter_vac_H[HIS].push_back(-11.60826210271092);
    6179          11 :   parameter_vac_H[HIS].push_back(-1.7359607560773076);
    6180             : 
    6181             :   // NUCLEIC ACIDS
    6182             : 
    6183             :   // BB_PO2-BB_PO3 H and D parameters are identical as there is no H or D in the bead.
    6184          11 :   parameter_solv_H[BB_PO3].push_back(1464.5929001192262);
    6185          11 :   parameter_solv_H[BB_PO3].push_back(-2.316908934494931);
    6186          11 :   parameter_solv_H[BB_PO3].push_back(-1882.4844584696532);
    6187          11 :   parameter_solv_H[BB_PO3].push_back(-258.8660305554736);
    6188          11 :   parameter_solv_H[BB_PO3].push_back(2007.5216385943972);
    6189          11 :   parameter_solv_H[BB_PO3].push_back(-1087.6423562424877);
    6190          11 :   parameter_solv_H[BB_PO3].push_back(154.89236486681165);
    6191             : 
    6192          11 :   parameter_solv_H[BB_PO2].push_back(575.5201001192197);
    6193          11 :   parameter_solv_H[BB_PO2].push_back(-0.6126595489733864);
    6194          11 :   parameter_solv_H[BB_PO2].push_back(-623.3371092254899);
    6195          11 :   parameter_solv_H[BB_PO2].push_back(-68.05795957022144);
    6196          11 :   parameter_solv_H[BB_PO2].push_back(561.8052621243661);
    6197          11 :   parameter_solv_H[BB_PO2].push_back(-283.39573309540276);
    6198          11 :   parameter_solv_H[BB_PO2].push_back(35.550016980100295);
    6199             : 
    6200          11 :   parameter_solv_H[BB_DNA].push_back(21211.009600118316);
    6201          11 :   parameter_solv_H[BB_DNA].push_back(-90.18805990529991);
    6202          11 :   parameter_solv_H[BB_DNA].push_back(-39731.13373512149);
    6203          11 :   parameter_solv_H[BB_DNA].push_back(-10920.373563712872);
    6204          11 :   parameter_solv_H[BB_DNA].push_back(72882.21702424981);
    6205          11 :   parameter_solv_H[BB_DNA].push_back(-51747.487078112776);
    6206          11 :   parameter_solv_H[BB_DNA].push_back(11308.678429018755);
    6207             : 
    6208          11 :   parameter_solv_H[BB_DNA_5].push_back(22737.624100119025);
    6209          11 :   parameter_solv_H[BB_DNA_5].push_back(-102.72714886664161);
    6210          11 :   parameter_solv_H[BB_DNA_5].push_back(-43685.329677789734);
    6211          11 :   parameter_solv_H[BB_DNA_5].push_back(-12564.25937409345);
    6212          11 :   parameter_solv_H[BB_DNA_5].push_back(83454.87540484878);
    6213          11 :   parameter_solv_H[BB_DNA_5].push_back(-60367.15652138887);
    6214          11 :   parameter_solv_H[BB_DNA_5].push_back(13507.333729868991);
    6215             : 
    6216          11 :   parameter_solv_H[BB_DNA_3].push_back(22737.62410011902);
    6217          11 :   parameter_solv_H[BB_DNA_3].push_back(-101.57816684452251);
    6218          11 :   parameter_solv_H[BB_DNA_3].push_back(-43488.536705576145);
    6219          11 :   parameter_solv_H[BB_DNA_3].push_back(-12345.056184958425);
    6220          11 :   parameter_solv_H[BB_DNA_3].push_back(81963.52364114887);
    6221          11 :   parameter_solv_H[BB_DNA_3].push_back(-58791.59443618196);
    6222          11 :   parameter_solv_H[BB_DNA_3].push_back(13003.199362335583);
    6223             : 
    6224          11 :   parameter_solv_H[BB_RNA].push_back(23953.752900120977);
    6225          11 :   parameter_solv_H[BB_RNA].push_back(-117.35779348824417);
    6226          11 :   parameter_solv_H[BB_RNA].push_back(-47644.41735332843);
    6227          11 :   parameter_solv_H[BB_RNA].push_back(-14641.556643789861);
    6228          11 :   parameter_solv_H[BB_RNA].push_back(96893.48627050371);
    6229          11 :   parameter_solv_H[BB_RNA].push_back(-72249.62534169303);
    6230          11 :   parameter_solv_H[BB_RNA].push_back(16792.055521055358);
    6231             : 
    6232          11 :   parameter_solv_H[BB_RNA_5].push_back(25574.406400119024);
    6233          11 :   parameter_solv_H[BB_RNA_5].push_back(-131.99642772933734);
    6234          11 :   parameter_solv_H[BB_RNA_5].push_back(-52136.51404531251);
    6235          11 :   parameter_solv_H[BB_RNA_5].push_back(-16682.14273917604);
    6236          11 :   parameter_solv_H[BB_RNA_5].push_back(110278.01921639398);
    6237          11 :   parameter_solv_H[BB_RNA_5].push_back(-83715.92027818544);
    6238          11 :   parameter_solv_H[BB_RNA_5].push_back(19875.89133770605);
    6239             : 
    6240          11 :   parameter_solv_H[BB_RNA_3].push_back(25574.406400119027);
    6241          11 :   parameter_solv_H[BB_RNA_3].push_back(-127.96875237036166);
    6242          11 :   parameter_solv_H[BB_RNA_3].push_back(-51407.18391758439);
    6243          11 :   parameter_solv_H[BB_RNA_3].push_back(-15922.900669975606);
    6244          11 :   parameter_solv_H[BB_RNA_3].push_back(105078.5888910626);
    6245          11 :   parameter_solv_H[BB_RNA_3].push_back(-78289.16276190645);
    6246          11 :   parameter_solv_H[BB_RNA_3].push_back(18156.832143441192);
    6247             : 
    6248          11 :   parameter_solv_H[BASE_A].push_back(13282.562500119211);
    6249          11 :   parameter_solv_H[BASE_A].push_back(-76.45124168404048);
    6250          11 :   parameter_solv_H[BASE_A].push_back(-28376.06994108963);
    6251          11 :   parameter_solv_H[BASE_A].push_back(-9972.910773722022);
    6252          11 :   parameter_solv_H[BASE_A].push_back(65873.86341939073);
    6253          11 :   parameter_solv_H[BASE_A].push_back(-52064.33492910885);
    6254          11 :   parameter_solv_H[BASE_A].push_back(12931.608989412513);
    6255             : 
    6256          11 :   parameter_solv_H[BASE_C].push_back(10600.76160011891);
    6257          11 :   parameter_solv_H[BASE_C].push_back(-49.1670871249108);
    6258          11 :   parameter_solv_H[BASE_C].push_back(-20239.818742072875);
    6259          11 :   parameter_solv_H[BASE_C].push_back(-6020.278780090207);
    6260          11 :   parameter_solv_H[BASE_C].push_back(39632.13288981881);
    6261          11 :   parameter_solv_H[BASE_C].push_back(-28954.779736165576);
    6262          11 :   parameter_solv_H[BASE_C].push_back(6551.541109526305);
    6263             : 
    6264          11 :   parameter_solv_H[BASE_G].push_back(15470.384400119934);
    6265          11 :   parameter_solv_H[BASE_G].push_back(-93.8013620200972);
    6266          11 :   parameter_solv_H[BASE_G].push_back(-36188.29687013545);
    6267          11 :   parameter_solv_H[BASE_G].push_back(-13717.685098209471);
    6268          11 :   parameter_solv_H[BASE_G].push_back(95658.18473657136);
    6269          11 :   parameter_solv_H[BASE_G].push_back(-81262.37811451119);
    6270          11 :   parameter_solv_H[BASE_G].push_back(21841.903930943085);
    6271             : 
    6272          11 :   parameter_solv_H[BASE_T].push_back(17210.81610011936);
    6273          11 :   parameter_solv_H[BASE_T].push_back(-93.10189802920208);
    6274          11 :   parameter_solv_H[BASE_T].push_back(-36466.51927689957);
    6275          11 :   parameter_solv_H[BASE_T].push_back(-12425.55615716932);
    6276          11 :   parameter_solv_H[BASE_T].push_back(83847.427808925);
    6277          11 :   parameter_solv_H[BASE_T].push_back(-66735.64997846584);
    6278          11 :   parameter_solv_H[BASE_T].push_back(16757.3463987507);
    6279             : 
    6280          11 :   parameter_solv_H[BASE_U].push_back(10909.802500119395);
    6281          11 :   parameter_solv_H[BASE_U].push_back(-46.17712672768298);
    6282          11 :   parameter_solv_H[BASE_U].push_back(-20149.67695512526);
    6283          11 :   parameter_solv_H[BASE_U].push_back(-5590.242961204435);
    6284          11 :   parameter_solv_H[BASE_U].push_back(37169.2740983132);
    6285          11 :   parameter_solv_H[BASE_U].push_back(-26475.631627167604);
    6286          11 :   parameter_solv_H[BASE_U].push_back(5808.201015156168);
    6287             : 
    6288          11 :   parameter_mix_H[BB_PO3].push_back(143.5890401192106);
    6289          11 :   parameter_mix_H[BB_PO3].push_back(-0.0679405156108208);
    6290          11 :   parameter_mix_H[BB_PO3].push_back(-131.78648321068806);
    6291          11 :   parameter_mix_H[BB_PO3].push_back(-7.222980065241985);
    6292          11 :   parameter_mix_H[BB_PO3].push_back(79.67309464590994);
    6293          11 :   parameter_mix_H[BB_PO3].push_back(-27.950095608460042);
    6294          11 :   parameter_mix_H[BB_PO3].push_back(0.12790403369995257);
    6295             : 
    6296          11 :   parameter_mix_H[BB_PO2].push_back(80.12660011920252);
    6297          11 :   parameter_mix_H[BB_PO2].push_back(-0.0278885551982023);
    6298          11 :   parameter_mix_H[BB_PO2].push_back(-60.532194918222984);
    6299          11 :   parameter_mix_H[BB_PO2].push_back(-2.976882903409687);
    6300          11 :   parameter_mix_H[BB_PO2].push_back(33.30645116638125);
    6301          11 :   parameter_mix_H[BB_PO2].push_back(-11.601573219761374);
    6302          11 :   parameter_mix_H[BB_PO2].push_back(0.12551046492022422);
    6303             : 
    6304          11 :   parameter_mix_H[BB_DNA].push_back(712.7621601191935);
    6305          11 :   parameter_mix_H[BB_DNA].push_back(-0.3228709821198571);
    6306          11 :   parameter_mix_H[BB_DNA].push_back(-784.5118228559945);
    6307          11 :   parameter_mix_H[BB_DNA].push_back(-27.196125702249613);
    6308          11 :   parameter_mix_H[BB_DNA].push_back(410.0185035102729);
    6309          11 :   parameter_mix_H[BB_DNA].push_back(-54.453513369320355);
    6310          11 :   parameter_mix_H[BB_DNA].push_back(-44.85506789237683);
    6311             : 
    6312          11 :   parameter_mix_H[BB_DNA_5].push_back(625.175339965785);
    6313          11 :   parameter_mix_H[BB_DNA_5].push_back(0.2691706617748245);
    6314          11 :   parameter_mix_H[BB_DNA_5].push_back(-582.8721350420001);
    6315          11 :   parameter_mix_H[BB_DNA_5].push_back(46.512408351374326);
    6316          11 :   parameter_mix_H[BB_DNA_5].push_back(-58.93886949899108);
    6317          11 :   parameter_mix_H[BB_DNA_5].push_back(307.29720336085046);
    6318          11 :   parameter_mix_H[BB_DNA_5].push_back(-131.71996309259953);
    6319             : 
    6320          11 :   parameter_mix_H[BB_DNA_3].push_back(625.1753399401266);
    6321          11 :   parameter_mix_H[BB_DNA_3].push_back(0.08763234414546289);
    6322          11 :   parameter_mix_H[BB_DNA_3].push_back(-606.8067575087485);
    6323          11 :   parameter_mix_H[BB_DNA_3].push_back(20.84427254872218);
    6324          11 :   parameter_mix_H[BB_DNA_3].push_back(92.53523123608991);
    6325          11 :   parameter_mix_H[BB_DNA_3].push_back(162.04688035654937);
    6326          11 :   parameter_mix_H[BB_DNA_3].push_back(-89.13571774638052);
    6327             : 
    6328          11 :   parameter_mix_H[BB_RNA].push_back(936.9775801191857);
    6329          11 :   parameter_mix_H[BB_RNA].push_back(-1.3233686929680253);
    6330          11 :   parameter_mix_H[BB_RNA].push_back(-1212.1627155263773);
    6331          11 :   parameter_mix_H[BB_RNA].push_back(-141.35324744384351);
    6332          11 :   parameter_mix_H[BB_RNA].push_back(1155.8281658363026);
    6333          11 :   parameter_mix_H[BB_RNA].push_back(-548.9340055857343);
    6334          11 :   parameter_mix_H[BB_RNA].push_back(50.81734777881503);
    6335             : 
    6336          11 :   parameter_mix_H[BB_RNA_5].push_back(848.5355201165631);
    6337          11 :   parameter_mix_H[BB_RNA_5].push_back(-0.49570338490120175);
    6338          11 :   parameter_mix_H[BB_RNA_5].push_back(-976.1033073783973);
    6339          11 :   parameter_mix_H[BB_RNA_5].push_back(-32.943532187986605);
    6340          11 :   parameter_mix_H[BB_RNA_5].push_back(475.66177061923884);
    6341          11 :   parameter_mix_H[BB_RNA_5].push_back(17.51955845824258);
    6342          11 :   parameter_mix_H[BB_RNA_5].push_back(-96.74451972314769);
    6343             : 
    6344          11 :   parameter_mix_H[BB_RNA_3].push_back(848.5355201192122);
    6345          11 :   parameter_mix_H[BB_RNA_3].push_back(-0.8301109354355396);
    6346          11 :   parameter_mix_H[BB_RNA_3].push_back(-1019.9524389785406);
    6347          11 :   parameter_mix_H[BB_RNA_3].push_back(-84.1388451424885);
    6348          11 :   parameter_mix_H[BB_RNA_3].push_back(787.1277245040931);
    6349          11 :   parameter_mix_H[BB_RNA_3].push_back(-294.67807432795627);
    6350          11 :   parameter_mix_H[BB_RNA_3].push_back(-1.3214626461251089);
    6351             : 
    6352          11 :   parameter_mix_H[BASE_A].push_back(1504.9345001191857);
    6353          11 :   parameter_mix_H[BASE_A].push_back(-3.5306888452552663);
    6354          11 :   parameter_mix_H[BASE_A].push_back(-2234.3933572775572);
    6355          11 :   parameter_mix_H[BASE_A].push_back(-380.0255208494757);
    6356          11 :   parameter_mix_H[BASE_A].push_back(2726.27802432048);
    6357          11 :   parameter_mix_H[BASE_A].push_back(-1490.8825754968443);
    6358          11 :   parameter_mix_H[BASE_A].push_back(199.7501110740159);
    6359             : 
    6360          11 :   parameter_mix_H[BASE_C].push_back(939.8188801192172);
    6361          11 :   parameter_mix_H[BASE_C].push_back(-1.489638186262854);
    6362          11 :   parameter_mix_H[BASE_C].push_back(-1244.5515798554075);
    6363          11 :   parameter_mix_H[BASE_C].push_back(-161.3972705672055);
    6364          11 :   parameter_mix_H[BASE_C].push_back(1276.3568466722545);
    6365          11 :   parameter_mix_H[BASE_C].push_back(-643.3057776225742);
    6366          11 :   parameter_mix_H[BASE_C].push_back(72.75963113826273);
    6367             : 
    6368          11 :   parameter_mix_H[BASE_G].push_back(1768.434840119199);
    6369          11 :   parameter_mix_H[BASE_G].push_back(-6.505347007077434);
    6370          11 :   parameter_mix_H[BASE_G].push_back(-2919.3856777898427);
    6371          11 :   parameter_mix_H[BASE_G].push_back(-701.2456464463938);
    6372          11 :   parameter_mix_H[BASE_G].push_back(4464.594230284102);
    6373          11 :   parameter_mix_H[BASE_G].push_back(-2733.138521295608);
    6374          11 :   parameter_mix_H[BASE_G].push_back(458.1177706235891);
    6375             : 
    6376          11 :   parameter_mix_H[BASE_T].push_back(1179.3981001192033);
    6377          11 :   parameter_mix_H[BASE_T].push_back(-3.2037849252756527);
    6378          11 :   parameter_mix_H[BASE_T].push_back(-1821.255498763799);
    6379          11 :   parameter_mix_H[BASE_T].push_back(-371.01993266441303);
    6380          11 :   parameter_mix_H[BASE_T].push_back(2604.074226688971);
    6381          11 :   parameter_mix_H[BASE_T].push_back(-1648.1965787713084);
    6382          11 :   parameter_mix_H[BASE_T].push_back(307.2962186436368);
    6383             : 
    6384          11 :   parameter_mix_H[BASE_U].push_back(956.3442001192266);
    6385          11 :   parameter_mix_H[BASE_U].push_back(-1.724458000760567);
    6386          11 :   parameter_mix_H[BASE_U].push_back(-1287.9746970192687);
    6387          11 :   parameter_mix_H[BASE_U].push_back(-192.74748379510373);
    6388          11 :   parameter_mix_H[BASE_U].push_back(1459.0789258833893);
    6389          11 :   parameter_mix_H[BASE_U].push_back(-810.0763075080915);
    6390          11 :   parameter_mix_H[BASE_U].push_back(119.81810290248339);
    6391             : 
    6392          11 :   parameter_vac_H[BB_PO3].push_back(3.519375907888525);
    6393          11 :   parameter_vac_H[BB_PO3].push_back(7.742660056553524e-05);
    6394          11 :   parameter_vac_H[BB_PO3].push_back(-1.3856562746347367);
    6395          11 :   parameter_vac_H[BB_PO3].push_back(0.00821183249969174);
    6396          11 :   parameter_vac_H[BB_PO3].push_back(0.21213096729728745);
    6397          11 :   parameter_vac_H[BB_PO3].push_back(0.032592855104331325);
    6398          11 :   parameter_vac_H[BB_PO3].push_back(-0.02236149538438434);
    6399             : 
    6400          11 :   parameter_vac_H[BB_PO2].push_back(2.7889001116093275);
    6401          11 :   parameter_vac_H[BB_PO2].push_back(-0.00011178884266113128);
    6402          11 :   parameter_vac_H[BB_PO2].push_back(-1.1702605818380667);
    6403          11 :   parameter_vac_H[BB_PO2].push_back(-0.011278044036819933);
    6404          11 :   parameter_vac_H[BB_PO2].push_back(0.3214006584089025);
    6405          11 :   parameter_vac_H[BB_PO2].push_back(-0.04097165983591666);
    6406          11 :   parameter_vac_H[BB_PO2].push_back(-0.017525098100539722);
    6407             : 
    6408          11 :   parameter_vac_H[BB_DNA].push_back(5.987809026456476);
    6409          11 :   parameter_vac_H[BB_DNA].push_back(9.945454528827912e-05);
    6410          11 :   parameter_vac_H[BB_DNA].push_back(-1.1884708569330031);
    6411          11 :   parameter_vac_H[BB_DNA].push_back(-0.007457733256362841);
    6412          11 :   parameter_vac_H[BB_DNA].push_back(0.05666858781418339);
    6413          11 :   parameter_vac_H[BB_DNA].push_back(-0.15158797629971757);
    6414          11 :   parameter_vac_H[BB_DNA].push_back(0.11642340861329734);
    6415             : 
    6416          11 :   parameter_vac_H[BB_DNA_5].push_back(4.297328944539055);
    6417          11 :   parameter_vac_H[BB_DNA_5].push_back(0.0014793971885106831);
    6418          11 :   parameter_vac_H[BB_DNA_5].push_back(1.3961088365255605);
    6419          11 :   parameter_vac_H[BB_DNA_5].push_back(0.08974639858979384);
    6420          11 :   parameter_vac_H[BB_DNA_5].push_back(-1.5198099705167643);
    6421          11 :   parameter_vac_H[BB_DNA_5].push_back(-0.12127122359433733);
    6422          11 :   parameter_vac_H[BB_DNA_5].push_back(0.4134601046223601);
    6423             : 
    6424          11 :   parameter_vac_H[BB_DNA_3].push_back(4.297328886488132);
    6425          11 :   parameter_vac_H[BB_DNA_3].push_back(0.0041802954281271905);
    6426          11 :   parameter_vac_H[BB_DNA_3].push_back(1.6065462295705266);
    6427          11 :   parameter_vac_H[BB_DNA_3].push_back(0.4399805535688805);
    6428          11 :   parameter_vac_H[BB_DNA_3].push_back(-3.3806711791929804);
    6429          11 :   parameter_vac_H[BB_DNA_3].push_back(1.6729551563628675);
    6430          11 :   parameter_vac_H[BB_DNA_3].push_back(-0.10911063067909885);
    6431             : 
    6432          11 :   parameter_vac_H[BB_RNA].push_back(9.162728984394093);
    6433          11 :   parameter_vac_H[BB_RNA].push_back(0.00019952321584579868);
    6434          11 :   parameter_vac_H[BB_RNA].push_back(-4.744748946331966);
    6435          11 :   parameter_vac_H[BB_RNA].push_back(0.025106563403946364);
    6436          11 :   parameter_vac_H[BB_RNA].push_back(1.2302956694109803);
    6437          11 :   parameter_vac_H[BB_RNA].push_back(0.12359062278096915);
    6438          11 :   parameter_vac_H[BB_RNA].push_back(-0.1725633367685285);
    6439             : 
    6440          11 :   parameter_vac_H[BB_RNA_5].push_back(7.038408898671503);
    6441          11 :   parameter_vac_H[BB_RNA_5].push_back(0.005106788424920148);
    6442          11 :   parameter_vac_H[BB_RNA_5].push_back(-0.8981588221803118);
    6443          11 :   parameter_vac_H[BB_RNA_5].push_back(0.4922588155214312);
    6444          11 :   parameter_vac_H[BB_RNA_5].push_back(-2.6667853454023644);
    6445          11 :   parameter_vac_H[BB_RNA_5].push_back(1.533316567240718);
    6446          11 :   parameter_vac_H[BB_RNA_5].push_back(-0.07199604869737707);
    6447             : 
    6448          11 :   parameter_vac_H[BB_RNA_3].push_back(7.038408892621863);
    6449          11 :   parameter_vac_H[BB_RNA_3].push_back(0.002993083907266898);
    6450          11 :   parameter_vac_H[BB_RNA_3].push_back(-1.3626596831098492);
    6451          11 :   parameter_vac_H[BB_RNA_3].push_back(0.3138856961130113);
    6452          11 :   parameter_vac_H[BB_RNA_3].push_back(-1.684185014289391);
    6453          11 :   parameter_vac_H[BB_RNA_3].push_back(1.1862168720864616);
    6454          11 :   parameter_vac_H[BB_RNA_3].push_back(-0.1443894172417523);
    6455             : 
    6456          11 :   parameter_vac_H[BASE_A].push_back(42.62784088079008);
    6457          11 :   parameter_vac_H[BASE_A].push_back(0.02302908536431516);
    6458          11 :   parameter_vac_H[BASE_A].push_back(-33.22707177297222);
    6459          11 :   parameter_vac_H[BASE_A].push_back(2.6853748424439834);
    6460          11 :   parameter_vac_H[BASE_A].push_back(-1.6632902891624768);
    6461          11 :   parameter_vac_H[BASE_A].push_back(11.905766349515268);
    6462          11 :   parameter_vac_H[BASE_A].push_back(-4.547083454788805);
    6463             : 
    6464          11 :   parameter_vac_H[BASE_C].push_back(20.83009588079022);
    6465          11 :   parameter_vac_H[BASE_C].push_back(0.017055822321768378);
    6466          11 :   parameter_vac_H[BASE_C].push_back(-8.349634734370916);
    6467          11 :   parameter_vac_H[BASE_C].push_back(1.9324634367723073);
    6468          11 :   parameter_vac_H[BASE_C].push_back(-8.435199734060882);
    6469          11 :   parameter_vac_H[BASE_C].push_back(8.272798368731268);
    6470          11 :   parameter_vac_H[BASE_C].push_back(-1.986671440757263);
    6471             : 
    6472          11 :   parameter_vac_H[BASE_G].push_back(50.53788088079374);
    6473          11 :   parameter_vac_H[BASE_G].push_back(0.024035597617780367);
    6474          11 :   parameter_vac_H[BASE_G].push_back(-47.94916639302998);
    6475          11 :   parameter_vac_H[BASE_G].push_back(3.143375731466498);
    6476          11 :   parameter_vac_H[BASE_G].push_back(4.297009866708155);
    6477          11 :   parameter_vac_H[BASE_G].push_back(15.855448505050578);
    6478          11 :   parameter_vac_H[BASE_G].push_back(-7.827484135873966);
    6479             : 
    6480          11 :   parameter_vac_H[BASE_T].push_back(20.20502488079069);
    6481          11 :   parameter_vac_H[BASE_T].push_back(0.033659966153300002);
    6482          11 :   parameter_vac_H[BASE_T].push_back(-6.057999187718758);
    6483          11 :   parameter_vac_H[BASE_T].push_back(4.146969282504351);
    6484          11 :   parameter_vac_H[BASE_T].push_back(-20.664315319574357);
    6485          11 :   parameter_vac_H[BASE_T].push_back(19.982178623201648);
    6486          11 :   parameter_vac_H[BASE_T].push_back(-5.440921587349456);
    6487             : 
    6488          11 :   parameter_vac_H[BASE_U].push_back(20.958084119209754);
    6489          11 :   parameter_vac_H[BASE_U].push_back(-0.005164660707148803);
    6490          11 :   parameter_vac_H[BASE_U].push_back(-14.53831312442302);
    6491          11 :   parameter_vac_H[BASE_U].push_back(-0.5276995756310442);
    6492          11 :   parameter_vac_H[BASE_U].push_back(7.060900707522138);
    6493          11 :   parameter_vac_H[BASE_U].push_back(-1.8988408480951036);
    6494          11 :   parameter_vac_H[BASE_U].push_back(-0.215000567681094);
    6495             : 
    6496       31669 :   for(unsigned i=0; i<atoms.size(); ++i) {
    6497       31658 :     std::string Aname = pdb.getAtomName(atoms[i]);
    6498       31658 :     std::string Rname = pdb.getResidueName(atoms[i]);
    6499       31658 :     Rname.erase(std::remove_if(Rname.begin(), Rname.end(), ::isspace),Rname.end());
    6500       31658 :     Rname = onebeadResidueAlias(Rname);
    6501       31658 :     if(Rname=="ALA") {
    6502        1632 :       atoi[residue_atom[i]]=ALA;
    6503       30026 :     } else if(Rname=="ARG") {
    6504        1944 :       atoi[residue_atom[i]]=ARG;
    6505       28082 :     } else if(Rname=="ASN") {
    6506        1620 :       atoi[residue_atom[i]]=ASN;
    6507       26462 :     } else if(Rname=="ASP") {
    6508        1404 :       atoi[residue_atom[i]]=ASP;
    6509       25058 :     } else if(Rname=="CYS") {
    6510         108 :       atoi[residue_atom[i]]=CYS;
    6511       24950 :     } else if(Rname=="CYX") {
    6512           0 :       atoi[residue_atom[i]]=CYX;
    6513       24950 :     } else if(Rname=="GLN") {
    6514        2356 :       atoi[residue_atom[i]]=GLN;
    6515       22594 :     } else if(Rname=="GLU") {
    6516        1071 :       atoi[residue_atom[i]]=GLU;
    6517       21523 :     } else if(Rname=="GLY") {
    6518        1422 :       atoi[residue_atom[i]]=GLY;
    6519       20101 :     } else if(Rname=="HIS") {
    6520           0 :       atoi[residue_atom[i]]=HIS;
    6521       20101 :     } else if(Rname=="HID") {
    6522           0 :       atoi[residue_atom[i]]=HIS;
    6523       20101 :     } else if(Rname=="HIE") {
    6524         324 :       atoi[residue_atom[i]]=HIS;
    6525       19777 :     } else if(Rname=="HIP") {
    6526           0 :       atoi[residue_atom[i]]=HIP;
    6527             :       // CHARMM NAMING FOR PROTONATION STATES OF HISTIDINE
    6528       19777 :     } else if(Rname=="HSD") {
    6529           0 :       atoi[residue_atom[i]]=HIS;
    6530       19777 :     } else if(Rname=="HSE") {
    6531           0 :       atoi[residue_atom[i]]=HIS;
    6532       19777 :     } else if(Rname=="HSP") {
    6533           0 :       atoi[residue_atom[i]]=HIP;
    6534       19777 :     } else if(Rname=="ILE") {
    6535        1944 :       atoi[residue_atom[i]]=ILE;
    6536       17833 :     } else if(Rname=="LEU") {
    6537        3420 :       atoi[residue_atom[i]]=LEU;
    6538       14413 :     } else if(Rname=="LYS") {
    6539        2340 :       atoi[residue_atom[i]]=LYS;
    6540       12073 :     } else if(Rname=="MET") {
    6541        1292 :       atoi[residue_atom[i]]=MET;
    6542       10781 :     } else if(Rname=="PHE") {
    6543        2268 :       atoi[residue_atom[i]]=PHE;
    6544        8513 :     } else if(Rname=="PRO") {
    6545        1683 :       atoi[residue_atom[i]]=PRO;
    6546        6830 :     } else if(Rname=="SER") {
    6547        1164 :       atoi[residue_atom[i]]=SER;
    6548        5666 :     } else if(Rname=="THR") {
    6549        1106 :       atoi[residue_atom[i]]=THR;
    6550        4560 :     } else if(Rname=="TRP") {
    6551           0 :       atoi[residue_atom[i]]=TRP;
    6552        4560 :     } else if(Rname=="TYR") {
    6553        1188 :       atoi[residue_atom[i]]=TYR;
    6554        3372 :     } else if(Rname=="VAL") {
    6555        2416 :       atoi[residue_atom[i]]=VAL;
    6556             :     }
    6557             :     // NUCLEIC ACIDS
    6558             :     // nucleobases are not automatically populated as an additional check on the health of the PDB.
    6559             :     // RNA - G
    6560         956 :     else if(Rname=="G") {
    6561           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    6562           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    6563           0 :         atoi [residue_atom[i]]=BB_PO2;
    6564           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6565           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6566           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6567           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6568           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6569           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6570           0 :         atoi[residue_atom[i]]=BB_RNA;
    6571           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6572           0 :                  Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6573           0 :                  Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6574           0 :                  Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6575           0 :         atoi[residue_atom[i]]=BASE_G;
    6576             :       } else {
    6577           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6578             :       }
    6579             :       // RNA - G3
    6580         956 :     } else if(Rname=="G3") {
    6581           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    6582           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    6583           0 :         atoi [residue_atom[i]]=BB_PO2;
    6584           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    6585           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    6586           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    6587           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    6588           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    6589           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    6590           0 :         atoi[residue_atom[i]]=BB_RNA_3;
    6591           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6592           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6593           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6594           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6595           0 :         atoi[residue_atom[i]]=BASE_G;
    6596             :       } else {
    6597           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6598             :       }
    6599             :       // RNA - G5
    6600         956 :     } else if(Rname=="G5") {
    6601           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6602           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6603           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6604           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    6605           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    6606           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    6607           0 :         atoi[residue_atom[i]]=BB_RNA_5;
    6608           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6609           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6610           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6611           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6612           0 :         atoi[residue_atom[i]]=BASE_G;
    6613             :       } else {
    6614           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6615             :       }
    6616             :       // RNA - GT
    6617         956 :     } else if(Rname=="GT") {
    6618           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    6619           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    6620           0 :         atoi [residue_atom[i]]=BB_PO3;
    6621           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6622           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6623           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6624           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6625           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6626           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6627           0 :         atoi[residue_atom[i]]=BB_RNA;
    6628           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6629           0 :                  Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6630           0 :                  Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6631           0 :                  Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6632           0 :         atoi[residue_atom[i]]=BASE_G;
    6633             :       } else {
    6634           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6635             :       }
    6636             :       // RNA - U
    6637         956 :     } else if(Rname=="U") {
    6638         754 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    6639        1482 :           Aname=="O1P" || Aname=="O2P"  ) {
    6640          78 :         atoi [residue_atom[i]]=BB_PO2;
    6641         676 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6642         598 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6643         494 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6644         390 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6645         312 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6646         988 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6647         416 :         atoi[residue_atom[i]]=BB_RNA;
    6648         260 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    6649         182 :                  Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    6650         364 :                  Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    6651         286 :         atoi[residue_atom[i]]=BASE_U;
    6652             :       } else {
    6653           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6654             :       }
    6655             :       // RNA - U3
    6656         176 :     } else if(Rname=="U3") {
    6657          60 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    6658         118 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    6659           6 :         atoi [residue_atom[i]]=BB_PO2;
    6660          54 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    6661          48 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    6662          40 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    6663          32 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    6664          26 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    6665          78 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    6666          34 :         atoi[residue_atom[i]]=BB_RNA_3;
    6667          20 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    6668          14 :                 Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    6669          28 :                 Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    6670          22 :         atoi[residue_atom[i]]=BASE_U;
    6671             :       } else {
    6672           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6673             :       }
    6674             :       // RNA - U5
    6675         114 :     } else if(Rname=="U5") {
    6676         108 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6677          96 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6678          80 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6679          64 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    6680          48 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    6681         156 :           Aname=="H2'1" || Aname=="H5T" ) {
    6682          68 :         atoi[residue_atom[i]]=BB_RNA_5;
    6683          40 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    6684          28 :                 Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    6685          56 :                 Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    6686          44 :         atoi[residue_atom[i]]=BASE_U;
    6687             :       } else {
    6688           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6689             :       }
    6690             :       // RNA - UT
    6691           2 :     } else if(Rname=="UT") {
    6692           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    6693           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    6694           0 :         atoi [residue_atom[i]]=BB_PO3;
    6695           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6696           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6697           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6698           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6699           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6700           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6701           0 :         atoi[residue_atom[i]]=BB_RNA;
    6702           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    6703           0 :                  Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    6704           0 :                  Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    6705           0 :         atoi[residue_atom[i]]=BASE_U;
    6706             :       } else {
    6707           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6708             :       }
    6709             :       // RNA - A
    6710           2 :     } else if(Rname=="A") {
    6711           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    6712           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    6713           0 :         atoi [residue_atom[i]]=BB_PO2;
    6714           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6715           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6716           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6717           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6718           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6719           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6720           0 :         atoi[residue_atom[i]]=BB_RNA;
    6721           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    6722           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    6723           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    6724           0 :                 Aname=="H61" || Aname=="H62" ) {
    6725           0 :         atoi[residue_atom[i]]=BASE_A;
    6726             :       } else {
    6727           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6728             :       }
    6729             :       // RNA - A3
    6730           2 :     } else if(Rname=="A3") {
    6731           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    6732           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    6733           0 :         atoi [residue_atom[i]]=BB_PO2;
    6734           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    6735           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    6736           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    6737           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    6738           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    6739           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    6740           0 :         atoi[residue_atom[i]]=BB_RNA_3;
    6741           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    6742           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    6743           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    6744           0 :                 Aname=="H61" || Aname=="H62" ) {
    6745           0 :         atoi[residue_atom[i]]=BASE_A;
    6746             :       } else {
    6747           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6748             :       }
    6749             :       // RNA - A5
    6750           2 :     } else if(Rname=="A5") {
    6751           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6752           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6753           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6754           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    6755           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    6756           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    6757           0 :         atoi[residue_atom[i]]=BB_RNA_5;
    6758           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    6759           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    6760           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    6761           0 :                 Aname=="H61" || Aname=="H62" ) {
    6762           0 :         atoi[residue_atom[i]]=BASE_A;
    6763             :       } else {
    6764           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6765             :       }
    6766             :       // RNA - AT
    6767           2 :     } else if(Rname=="AT") {
    6768           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    6769           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    6770           0 :         atoi [residue_atom[i]]=BB_PO3;
    6771           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6772           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6773           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6774           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6775           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6776           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6777           0 :         atoi[residue_atom[i]]=BB_RNA;
    6778           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    6779           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    6780           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    6781           0 :                 Aname=="H61" || Aname=="H62" ) {
    6782           0 :         atoi[residue_atom[i]]=BASE_A;
    6783             :       } else {
    6784           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6785             :       }
    6786             :       // RNA - C
    6787           2 :     } else if(Rname=="C") {
    6788           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    6789           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    6790           0 :         atoi [residue_atom[i]]=BB_PO2;
    6791           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6792           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6793           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6794           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6795           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6796           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6797           0 :         atoi[residue_atom[i]]=BB_RNA;
    6798           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    6799           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    6800           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    6801           0 :         atoi[residue_atom[i]]=BASE_C;
    6802             :       } else {
    6803           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6804             :       }
    6805             :       // RNA - C3
    6806           2 :     } else if(Rname=="C3") {
    6807           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    6808           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    6809           0 :         atoi [residue_atom[i]]=BB_PO2;
    6810           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    6811           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    6812           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    6813           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    6814           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    6815           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    6816           0 :         atoi[residue_atom[i]]=BB_RNA_3;
    6817           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    6818           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    6819           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    6820           0 :         atoi[residue_atom[i]]=BASE_C;
    6821             :       } else {
    6822           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6823             :       }
    6824             :       // RNA - C5
    6825           2 :     } else if(Rname=="C5") {
    6826           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6827           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6828           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6829           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    6830           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    6831           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    6832           0 :         atoi[residue_atom[i]]=BB_RNA_5;
    6833           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    6834           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    6835           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    6836           0 :         atoi[residue_atom[i]]=BASE_C;
    6837             :       } else {
    6838           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6839             :       }
    6840             :       // RNA - CT
    6841           2 :     } else if(Rname=="CT") {
    6842           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    6843           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    6844           0 :         atoi [residue_atom[i]]=BB_PO3;
    6845           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6846           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    6847           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    6848           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    6849           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    6850           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    6851           0 :         atoi[residue_atom[i]]=BB_RNA;
    6852           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    6853           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    6854           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    6855           0 :         atoi[residue_atom[i]]=BASE_C;
    6856             :       } else {
    6857           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6858             :       }
    6859             :       // DNA - G
    6860           2 :     } else if(Rname=="DG") {
    6861           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    6862           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    6863           0 :         atoi [residue_atom[i]]=BB_PO2;
    6864           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6865           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    6866           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    6867           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    6868           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    6869           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    6870           0 :         atoi[residue_atom[i]]=BB_DNA;
    6871           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6872           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6873           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6874           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6875           0 :         atoi[residue_atom[i]]=BASE_G;
    6876             :       } else {
    6877           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6878             :       }
    6879             :       // DNA - G3
    6880           2 :     } else if(Rname=="DG3") {
    6881           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    6882           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    6883           0 :         atoi [residue_atom[i]]=BB_PO2;
    6884           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6885           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    6886           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    6887           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    6888           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    6889           0 :                 Aname=="H3T" ) {
    6890           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    6891           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6892           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6893           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6894           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6895           0 :         atoi[residue_atom[i]]=BASE_G;
    6896             :       } else {
    6897           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6898             :       }
    6899             :       // DNA - G5
    6900           2 :     } else if(Rname=="DG5") {
    6901           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6902           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    6903           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    6904           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    6905           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    6906           0 :           Aname=="H5T" ) {
    6907           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    6908           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6909           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6910           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6911           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6912           0 :         atoi[residue_atom[i]]=BASE_G;
    6913             :       } else {
    6914           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6915             :       }
    6916             :       // DNA - GT
    6917           2 :     } else if(Rname=="DGT") {
    6918           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    6919           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    6920           0 :         atoi [residue_atom[i]]=BB_PO3;
    6921           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6922           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    6923           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    6924           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    6925           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    6926           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    6927           0 :         atoi[residue_atom[i]]=BB_DNA;
    6928           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    6929           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    6930           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    6931           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    6932           0 :         atoi[residue_atom[i]]=BASE_G;
    6933             :       } else {
    6934           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6935             :       }
    6936             :       // DNA - T
    6937           2 :     } else if(Rname=="DT") {
    6938           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    6939           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    6940           0 :         atoi [residue_atom[i]]=BB_PO2;
    6941           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6942           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    6943           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    6944           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    6945           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    6946           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    6947           0 :         atoi[residue_atom[i]]=BB_DNA;
    6948           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    6949           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    6950           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    6951           0 :                 Aname=="H72" || Aname=="H73" ) {
    6952           0 :         atoi[residue_atom[i]]=BASE_T;
    6953             :       } else {
    6954           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6955             :       }
    6956             :       // DNA - T3
    6957           2 :     } else if(Rname=="DT3") {
    6958           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    6959           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    6960           0 :         atoi [residue_atom[i]]=BB_PO2;
    6961           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6962           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    6963           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    6964           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    6965           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    6966           0 :                 Aname=="H3T" ) {
    6967           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    6968           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    6969           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    6970           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    6971           0 :                 Aname=="H72" || Aname=="H73" ) {
    6972           0 :         atoi[residue_atom[i]]=BASE_T;
    6973             :       } else {
    6974           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6975             :       }
    6976             :       // DNA - T5
    6977           2 :     } else if(Rname=="DT5") {
    6978           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6979           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    6980           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    6981           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    6982           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    6983           0 :           Aname=="H5T" ) {
    6984           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    6985           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    6986           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    6987           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    6988           0 :                 Aname=="H72" || Aname=="H73" ) {
    6989           0 :         atoi[residue_atom[i]]=BASE_T;
    6990             :       } else {
    6991           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    6992             :       }
    6993             :       // DNA - TT
    6994           2 :     } else if(Rname=="DTT") {
    6995           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    6996           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    6997           0 :         atoi [residue_atom[i]]=BB_PO3;
    6998           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    6999           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    7000           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7001           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    7002           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    7003           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    7004           0 :         atoi[residue_atom[i]]=BB_DNA;
    7005           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    7006           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    7007           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    7008           0 :                 Aname=="H72" || Aname=="H73" ) {
    7009           0 :         atoi[residue_atom[i]]=BASE_T;
    7010             :       } else {
    7011           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7012             :       }
    7013             :       // DNA - A
    7014           2 :     } else if(Rname=="DA") {
    7015           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    7016           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    7017           0 :         atoi [residue_atom[i]]=BB_PO2;
    7018           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7019           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    7020           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7021           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    7022           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    7023           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    7024           0 :         atoi[residue_atom[i]]=BB_DNA;
    7025           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    7026           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    7027           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    7028           0 :                 Aname=="H61" || Aname=="H62" ) {
    7029           0 :         atoi[residue_atom[i]]=BASE_A;
    7030             :       } else {
    7031           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7032             :       }
    7033             :       // DNA - A3
    7034           2 :     } else if(Rname=="DA3") {
    7035           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    7036           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    7037           0 :         atoi [residue_atom[i]]=BB_PO2;
    7038           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7039           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    7040           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7041           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    7042           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    7043           0 :                 Aname=="H3T" ) {
    7044           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    7045           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    7046           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    7047           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    7048           0 :                 Aname=="H61" || Aname=="H62" ) {
    7049           0 :         atoi[residue_atom[i]]=BASE_A;
    7050             :       } else {
    7051           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7052             :       }
    7053             :       // DNA - A5
    7054           2 :     } else if(Rname=="DA5") {
    7055           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7056           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    7057           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7058           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    7059           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    7060           0 :           Aname=="H5T" ) {
    7061           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    7062           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    7063           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    7064           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    7065           0 :                 Aname=="H61" || Aname=="H62" ) {
    7066           0 :         atoi[residue_atom[i]]=BASE_A;
    7067             :       } else {
    7068           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7069             :       }
    7070             :       // DNA - AT
    7071           2 :     } else if(Rname=="DAT") {
    7072           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    7073           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    7074           0 :         atoi [residue_atom[i]]=BB_PO3;
    7075           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7076           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    7077           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7078           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    7079           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    7080           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    7081           0 :         atoi[residue_atom[i]]=BB_DNA;
    7082           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    7083           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    7084           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    7085           0 :                 Aname=="H61" || Aname=="H62" ) {
    7086           0 :         atoi[residue_atom[i]]=BASE_A;
    7087             :       } else {
    7088           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7089             :       }
    7090             :       // DNA - C
    7091           2 :     } else if(Rname=="DC") {
    7092           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    7093           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    7094           0 :         atoi [residue_atom[i]]=BB_PO2;
    7095           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7096           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    7097           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7098           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    7099           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    7100           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    7101           0 :         atoi[residue_atom[i]]=BB_DNA;
    7102           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    7103           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    7104           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    7105           0 :         atoi[residue_atom[i]]=BASE_C;
    7106             :       } else {
    7107           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7108             :       }
    7109             :       // DNA - C3
    7110           2 :     } else if(Rname=="DC3") {
    7111           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    7112           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    7113           0 :         atoi [residue_atom[i]]=BB_PO2;
    7114           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7115           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    7116           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7117           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    7118           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    7119           0 :                 Aname=="H3T" ) {
    7120           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    7121           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    7122           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    7123           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    7124           0 :         atoi[residue_atom[i]]=BASE_C;
    7125             :       } else {
    7126           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7127             :       }
    7128             :       // DNA - C5
    7129           2 :     } else if(Rname=="DC5") {
    7130           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7131           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    7132           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7133           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    7134           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    7135           0 :           Aname=="H5T" ) {
    7136           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    7137           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    7138           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    7139           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    7140           0 :         atoi[residue_atom[i]]=BASE_C;
    7141             :       } else {
    7142           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7143             :       }
    7144             :       // DNA - CT
    7145           2 :     } else if(Rname=="DCT") {
    7146           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    7147           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    7148           0 :         atoi [residue_atom[i]]=BB_PO3;
    7149           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7150           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    7151           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    7152           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    7153           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    7154           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    7155           0 :         atoi[residue_atom[i]]=BB_DNA;
    7156           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    7157           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    7158           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    7159           0 :         atoi[residue_atom[i]]=BASE_C;
    7160             :       } else {
    7161           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7162             :       }
    7163           2 :     } else if(glyc_type[i] >= 0) {
    7164             :       // monosaccharide: the bead type was resolved once, from the residue name and
    7165             :       // from the presence of an N-acetyl group, in getOnebeadMapping()
    7166           0 :       atoi[residue_atom[i]] = static_cast<unsigned>(glyc_type[i]);
    7167           2 :     } else if(isUnsupportedGlycan(Rname)) {
    7168           0 :       error("Residue "+Rname+" is a monosaccharide for which no ONEBEAD parameters are available.");
    7169           2 :     } else if(ionTypeFromResname(Rname) >= 0) {
    7170             :       // monoatomic ion: assign its onebead bead type (terms filled in getOnebeadIonparam_sans).
    7171           2 :       atoi[residue_atom[i]] = obSlot(ionTypeFromResname(Rname));
    7172             :     } else {
    7173           0 :       error("Residue not known: "+Rname);
    7174             :     }
    7175             :   }
    7176          11 : }
    7177             : 
    7178          11 : void SAXS::getOnebeadparam_sansD(const PDB &pdb, const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &parameter_vac_D, std::vector<std::vector<long double> > &parameter_mix_D) {
    7179             :   // parameter_solv is identical in SAXS/SANS_H/SANS_D since it depends exclusively on param_v. For that reason we kept param_solv only in SAXS and SANS_H.
    7180          11 :   parameter_mix_D[TRP].push_back(8105.740500119327);
    7181          11 :   parameter_mix_D[TRP].push_back(-41.785616935469804);
    7182          11 :   parameter_mix_D[TRP].push_back(-25456.92790554363);
    7183          11 :   parameter_mix_D[TRP].push_back(-10058.20599969184);
    7184          11 :   parameter_mix_D[TRP].push_back(86171.76479108425);
    7185          11 :   parameter_mix_D[TRP].push_back(-83227.63139882773);
    7186          11 :   parameter_mix_D[TRP].push_back(25121.390436258724);
    7187             : 
    7188          11 :   parameter_mix_D[TYR].push_back(6059.530560118732);
    7189          11 :   parameter_mix_D[TYR].push_back(-24.522695525705736);
    7190          11 :   parameter_mix_D[TYR].push_back(-17180.858815360847);
    7191          11 :   parameter_mix_D[TYR].push_back(-5990.1358528219325);
    7192          11 :   parameter_mix_D[TYR].push_back(52936.46126637543);
    7193          11 :   parameter_mix_D[TYR].push_back(-50150.0042622683);
    7194          11 :   parameter_mix_D[TYR].push_back(14914.553672440441);
    7195             : 
    7196          11 :   parameter_mix_D[PHE].push_back(5563.404880119222);
    7197          11 :   parameter_mix_D[PHE].push_back(-33.609784645922794);
    7198          11 :   parameter_mix_D[PHE].push_back(-14576.935030777448);
    7199          11 :   parameter_mix_D[PHE].push_back(-5759.170105553782);
    7200          11 :   parameter_mix_D[PHE].push_back(43316.895956549866);
    7201          11 :   parameter_mix_D[PHE].push_back(-39106.58694570862);
    7202          11 :   parameter_mix_D[PHE].push_back(11143.375742877468);
    7203             : 
    7204          11 :   parameter_mix_D[HIP].push_back(3981.7108801192553);
    7205          11 :   parameter_mix_D[HIP].push_back(-23.788371565946427);
    7206          11 :   parameter_mix_D[HIP].push_back(-9471.73953776056);
    7207          11 :   parameter_mix_D[HIP].push_back(-3690.3981577198365);
    7208          11 :   parameter_mix_D[HIP].push_back(26365.958584217453);
    7209          11 :   parameter_mix_D[HIP].push_back(-23067.58974902849);
    7210          11 :   parameter_mix_D[HIP].push_back(6390.507451097114);
    7211             : 
    7212          11 :   parameter_mix_D[ARG].push_back(6279.489359881259);
    7213          11 :   parameter_mix_D[ARG].push_back(1.2061878338083583);
    7214          11 :   parameter_mix_D[ARG].push_back(-20305.413937989913);
    7215          11 :   parameter_mix_D[ARG].push_back(-5621.666335222669);
    7216          11 :   parameter_mix_D[ARG].push_back(67341.96785520067);
    7217          11 :   parameter_mix_D[ARG].push_back(-68849.15464591733);
    7218          11 :   parameter_mix_D[ARG].push_back(21773.0630363882);
    7219             : 
    7220          11 :   parameter_mix_D[LYS].push_back(5434.487400119193);
    7221          11 :   parameter_mix_D[LYS].push_back(-29.32356328987909);
    7222          11 :   parameter_mix_D[LYS].push_back(-14363.66155749977);
    7223          11 :   parameter_mix_D[LYS].push_back(-5650.383128516514);
    7224          11 :   parameter_mix_D[LYS].push_back(44573.73888236887);
    7225          11 :   parameter_mix_D[LYS].push_back(-41515.980945300485);
    7226          11 :   parameter_mix_D[LYS].push_back(12181.965046747513);
    7227             : 
    7228          11 :   parameter_mix_D[CYS].push_back(1519.4030001192032);
    7229          11 :   parameter_mix_D[CYS].push_back(-3.564386334921097);
    7230          11 :   parameter_mix_D[CYS].push_back(-2275.813167459516);
    7231          11 :   parameter_mix_D[CYS].push_back(-409.54431591328125);
    7232          11 :   parameter_mix_D[CYS].push_back(2969.5412742839258);
    7233          11 :   parameter_mix_D[CYS].push_back(-1798.3157146799638);
    7234          11 :   parameter_mix_D[CYS].push_back(314.568167888235);
    7235             : 
    7236          11 :   parameter_mix_D[CYX].push_back(1310.696400119220);
    7237          11 :   parameter_mix_D[CYX].push_back(-2.919852579787);
    7238          11 :   parameter_mix_D[CYX].push_back(-1902.283026713150);
    7239          11 :   parameter_mix_D[CYX].push_back(-340.431267947190);
    7240          11 :   parameter_mix_D[CYX].push_back(2480.025274590502);
    7241          11 :   parameter_mix_D[CYX].push_back(-1529.188197179144);
    7242          11 :   parameter_mix_D[CYX].push_back(278.926068515295);
    7243             : 
    7244          11 :   parameter_mix_D[ASP].push_back(1861.6998401191709);
    7245          11 :   parameter_mix_D[ASP].push_back(-5.349780637260551);
    7246          11 :   parameter_mix_D[ASP].push_back(-2960.36741510377);
    7247          11 :   parameter_mix_D[ASP].push_back(-621.8270745040523);
    7248          11 :   parameter_mix_D[ASP].push_back(4334.798300452934);
    7249          11 :   parameter_mix_D[ASP].push_back(-2776.8560521554878);
    7250          11 :   parameter_mix_D[ASP].push_back(527.9777182094936);
    7251             : 
    7252          11 :   parameter_mix_D[GLU].push_back(2861.6017201192253);
    7253          11 :   parameter_mix_D[GLU].push_back(-13.146456903921809);
    7254          11 :   parameter_mix_D[GLU].push_back(-5393.408563875243);
    7255          11 :   parameter_mix_D[GLU].push_back(-1646.460570818364);
    7256          11 :   parameter_mix_D[GLU].push_back(10884.544923253858);
    7257          11 :   parameter_mix_D[GLU].push_back(-8159.923373048856);
    7258          11 :   parameter_mix_D[GLU].push_back(1914.545660397314);
    7259             : 
    7260          11 :   parameter_mix_D[ILE].push_back(4288.585540119189);
    7261          11 :   parameter_mix_D[ILE].push_back(-19.937215352880365);
    7262          11 :   parameter_mix_D[ILE].push_back(-8324.540144463375);
    7263          11 :   parameter_mix_D[ILE].push_back(-2431.835931316717);
    7264          11 :   parameter_mix_D[ILE].push_back(16079.9912986194);
    7265          11 :   parameter_mix_D[ILE].push_back(-11637.693060394462);
    7266          11 :   parameter_mix_D[ILE].push_back(2600.8258068480495);
    7267             : 
    7268          11 :   parameter_mix_D[LEU].push_back(4288.585540119186);
    7269          11 :   parameter_mix_D[LEU].push_back(-21.50343599461759);
    7270          11 :   parameter_mix_D[LEU].push_back(-8479.703435720274);
    7271          11 :   parameter_mix_D[LEU].push_back(-2647.8693829269596);
    7272          11 :   parameter_mix_D[LEU].push_back(17297.18115838578);
    7273          11 :   parameter_mix_D[LEU].push_back(-12826.972408323161);
    7274          11 :   parameter_mix_D[LEU].push_back(2953.1262521615645);
    7275             : 
    7276          11 :   parameter_mix_D[MET].push_back(3561.6276801191552);
    7277          11 :   parameter_mix_D[MET].push_back(-22.19323392975885);
    7278          11 :   parameter_mix_D[MET].push_back(-8348.33907053846);
    7279          11 :   parameter_mix_D[MET].push_back(-3323.053272414289);
    7280          11 :   parameter_mix_D[MET].push_back(23153.238909304255);
    7281          11 :   parameter_mix_D[MET].push_back(-20091.960440908682);
    7282          11 :   parameter_mix_D[MET].push_back(5518.759669687693);
    7283             : 
    7284          11 :   parameter_mix_D[ASN].push_back(2326.5396001192003);
    7285          11 :   parameter_mix_D[ASN].push_back(-8.634908921289112);
    7286          11 :   parameter_mix_D[ASN].push_back(-4057.4552636749636);
    7287          11 :   parameter_mix_D[ASN].push_back(-1032.743130124821);
    7288          11 :   parameter_mix_D[ASN].push_back(6957.141592429445);
    7289          11 :   parameter_mix_D[ASN].push_back(-4808.265318722317);
    7290          11 :   parameter_mix_D[ASN].push_back(1016.3944815533755);
    7291             : 
    7292          11 :   parameter_mix_D[PRO].push_back(2471.1663601191985);
    7293          11 :   parameter_mix_D[PRO].push_back(-6.360795284260088);
    7294          11 :   parameter_mix_D[PRO].push_back(-3825.4533158429153);
    7295          11 :   parameter_mix_D[PRO].push_back(-728.7164844824666);
    7296          11 :   parameter_mix_D[PRO].push_back(5195.036303827973);
    7297          11 :   parameter_mix_D[PRO].push_back(-3183.733716480742);
    7298          11 :   parameter_mix_D[PRO].push_back(563.2376162754107);
    7299             : 
    7300          11 :   parameter_mix_D[GLN].push_back(3431.669280119236);
    7301          11 :   parameter_mix_D[GLN].push_back(-19.412747205646166);
    7302          11 :   parameter_mix_D[GLN].push_back(-7298.017973002134);
    7303          11 :   parameter_mix_D[GLN].push_back(-2659.3014182337706);
    7304          11 :   parameter_mix_D[GLN].push_back(17890.76595805173);
    7305          11 :   parameter_mix_D[GLN].push_back(-14684.603067192957);
    7306          11 :   parameter_mix_D[GLN].push_back(3814.338335151394);
    7307             : 
    7308          11 :   parameter_mix_D[SER].push_back(1423.885200119192);
    7309          11 :   parameter_mix_D[SER].push_back(-2.586428606204385);
    7310          11 :   parameter_mix_D[SER].push_back(-1966.7369507188134);
    7311          11 :   parameter_mix_D[SER].push_back(-289.17277383434106);
    7312          11 :   parameter_mix_D[SER].push_back(2209.478296043199);
    7313          11 :   parameter_mix_D[SER].push_back(-1216.1521614944);
    7314          11 :   parameter_mix_D[SER].push_back(177.0615931546754);
    7315             : 
    7316          11 :   parameter_mix_D[THR].push_back(2311.2364801191825);
    7317          11 :   parameter_mix_D[THR].push_back(-6.258071321531929);
    7318          11 :   parameter_mix_D[THR].push_back(-3656.295629081312);
    7319          11 :   parameter_mix_D[THR].push_back(-716.4013890357804);
    7320          11 :   parameter_mix_D[THR].push_back(5071.656317108832);
    7321          11 :   parameter_mix_D[THR].push_back(-3125.8076789667816);
    7322          11 :   parameter_mix_D[THR].push_back(555.9775741081131);
    7323             : 
    7324          11 :   parameter_mix_D[VAL].push_back(3041.128320119224);
    7325          11 :   parameter_mix_D[VAL].push_back(-9.314034190716423);
    7326          11 :   parameter_mix_D[VAL].push_back(-5075.684780220629);
    7327          11 :   parameter_mix_D[VAL].push_back(-1070.7083380665008);
    7328          11 :   parameter_mix_D[VAL].push_back(7455.654515006894);
    7329          11 :   parameter_mix_D[VAL].push_back(-4701.19187164774);
    7330          11 :   parameter_mix_D[VAL].push_back(863.4906179388547);
    7331             : 
    7332          11 :   parameter_mix_D[ALA].push_back(1187.65300011922);
    7333          11 :   parameter_mix_D[ALA].push_back(-1.7011187932116822);
    7334          11 :   parameter_mix_D[ALA].push_back(-1521.0113615359212);
    7335          11 :   parameter_mix_D[ALA].push_back(-187.93745840575576);
    7336          11 :   parameter_mix_D[ALA].push_back(1514.6745873304449);
    7337          11 :   parameter_mix_D[ALA].push_back(-775.3890045113897);
    7338          11 :   parameter_mix_D[ALA].push_back(96.41428177656567);
    7339             : 
    7340          11 :   parameter_mix_D[GLY].push_back(581.6349001192067);
    7341          11 :   parameter_mix_D[GLY].push_back(-0.5877833598361395);
    7342          11 :   parameter_mix_D[GLY].push_back(-640.0421286186524);
    7343          11 :   parameter_mix_D[GLY].push_back(-64.58515074152534);
    7344          11 :   parameter_mix_D[GLY].push_back(551.9509853583185);
    7345          11 :   parameter_mix_D[GLY].push_back(-264.1522021146006);
    7346          11 :   parameter_mix_D[GLY].push_back(28.36986478439301);
    7347             : 
    7348          11 :   parameter_mix_D[HIS].push_back(3648.812220119277);
    7349          11 :   parameter_mix_D[HIS].push_back(-22.703075403555548);
    7350          11 :   parameter_mix_D[HIS].push_back(-8260.235189881098);
    7351          11 :   parameter_mix_D[HIS].push_back(-3190.3176569039265);
    7352          11 :   parameter_mix_D[HIS].push_back(21589.074332364213);
    7353          11 :   parameter_mix_D[HIS].push_back(-18108.640157613925);
    7354          11 :   parameter_mix_D[HIS].push_back(4801.237639634437);
    7355             : 
    7356          11 :   parameter_vac_D[TRP].push_back(270.43802511921314);
    7357          11 :   parameter_vac_D[TRP].push_back(-2.196022464340772);
    7358          11 :   parameter_vac_D[TRP].push_back(-780.9546710244318);
    7359          11 :   parameter_vac_D[TRP].push_back(-371.1573508312626);
    7360          11 :   parameter_vac_D[TRP].push_back(2668.7678731652445);
    7361          11 :   parameter_vac_D[TRP].push_back(-2478.2920954223678);
    7362          11 :   parameter_vac_D[TRP].push_back(722.3731624901676);
    7363             : 
    7364          11 :   parameter_vac_D[TYR].push_back(198.471744119211);
    7365          11 :   parameter_vac_D[TYR].push_back(-1.236792846228289);
    7366          11 :   parameter_vac_D[TYR].push_back(-508.0448711054671);
    7367          11 :   parameter_vac_D[TYR].push_back(-210.55908129481216);
    7368          11 :   parameter_vac_D[TYR].push_back(1558.3884734212413);
    7369          11 :   parameter_vac_D[TYR].push_back(-1418.36319255665);
    7370          11 :   parameter_vac_D[TYR].push_back(407.21567613893296);
    7371             : 
    7372          11 :   parameter_vac_D[PHE].push_back(182.46606411921402);
    7373          11 :   parameter_vac_D[PHE].push_back(-1.2708008333861447);
    7374          11 :   parameter_vac_D[PHE].push_back(-424.50905926426054);
    7375          11 :   parameter_vac_D[PHE].push_back(-177.97207825696387);
    7376          11 :   parameter_vac_D[PHE].push_back(1180.839971941918);
    7377          11 :   parameter_vac_D[PHE].push_back(-1004.004765231886);
    7378          11 :   parameter_vac_D[PHE].push_back(269.34384064610344);
    7379             : 
    7380          11 :   parameter_vac_D[HIP].push_back(161.95107611920753);
    7381          11 :   parameter_vac_D[HIP].push_back(-0.9661246983835707);
    7382          11 :   parameter_vac_D[HIP].push_back(-332.04673226423995);
    7383          11 :   parameter_vac_D[HIP].push_back(-125.41755194926544);
    7384          11 :   parameter_vac_D[HIP].push_back(808.705672166199);
    7385          11 :   parameter_vac_D[HIP].push_back(-648.8340711218191);
    7386          11 :   parameter_vac_D[HIP].push_back(163.71251277400307);
    7387             : 
    7388          11 :   parameter_vac_D[ARG].push_back(289.0340011192071);
    7389          11 :   parameter_vac_D[ARG].push_back(-1.4195753436279361);
    7390          11 :   parameter_vac_D[ARG].push_back(-836.3864005546434);
    7391          11 :   parameter_vac_D[ARG].push_back(-346.7081039129904);
    7392          11 :   parameter_vac_D[ARG].push_back(2922.003491580559);
    7393          11 :   parameter_vac_D[ARG].push_back(-2864.816533173085);
    7394          11 :   parameter_vac_D[ARG].push_back(877.9525045072293);
    7395             : 
    7396          11 :   parameter_vac_D[LYS].push_back(228.64464111920753);
    7397          11 :   parameter_vac_D[LYS].push_back(-1.686580749083617);
    7398          11 :   parameter_vac_D[LYS].push_back(-544.8870548339771);
    7399          11 :   parameter_vac_D[LYS].push_back(-252.11087773186324);
    7400          11 :   parameter_vac_D[LYS].push_back(1693.784850493428);
    7401          11 :   parameter_vac_D[LYS].push_back(-1514.2375008160348);
    7402          11 :   parameter_vac_D[LYS].push_back(427.0713155512121);
    7403             : 
    7404          11 :   parameter_vac_D[CYS].push_back(50.836900116324315);
    7405          11 :   parameter_vac_D[CYS].push_back(-0.040204572899665315);
    7406          11 :   parameter_vac_D[CYS].push_back(-55.592868149339424);
    7407          11 :   parameter_vac_D[CYS].push_back(-4.341359624977117);
    7408          11 :   parameter_vac_D[CYS].push_back(41.55290573185214);
    7409          11 :   parameter_vac_D[CYS].push_back(-17.248208429078456);
    7410          11 :   parameter_vac_D[CYS].push_back(1.0736187172140528);
    7411             : 
    7412          11 :   parameter_vac_D[CYX].push_back(41.770369115535);
    7413          11 :   parameter_vac_D[CYX].push_back(-0.019277246931);
    7414          11 :   parameter_vac_D[CYX].push_back(-40.006821199463);
    7415          11 :   parameter_vac_D[CYX].push_back(-2.056736901533);
    7416          11 :   parameter_vac_D[CYX].push_back(23.707430747544);
    7417          11 :   parameter_vac_D[CYX].push_back(-8.010813092204);
    7418          11 :   parameter_vac_D[CYX].push_back(-0.023482540763);
    7419             : 
    7420          11 :   parameter_vac_D[ASP].push_back(64.12806411920792);
    7421          11 :   parameter_vac_D[ASP].push_back(-0.08245818875074411);
    7422          11 :   parameter_vac_D[ASP].push_back(-78.95500211069523);
    7423          11 :   parameter_vac_D[ASP].push_back(-9.030157332821238);
    7424          11 :   parameter_vac_D[ASP].push_back(74.72033164806712);
    7425          11 :   parameter_vac_D[ASP].push_back(-36.71042192737952);
    7426          11 :   parameter_vac_D[ASP].push_back(4.0989206257493676);
    7427             : 
    7428          11 :   parameter_vac_D[GLU].push_back(100.14004911920799);
    7429          11 :   parameter_vac_D[GLU].push_back(-0.28685123265362006);
    7430          11 :   parameter_vac_D[GLU].push_back(-152.44619103423773);
    7431          11 :   parameter_vac_D[GLU].push_back(-32.99432901288321);
    7432          11 :   parameter_vac_D[GLU].push_back(225.5853175183811);
    7433          11 :   parameter_vac_D[GLU].push_back(-144.8489352831419);
    7434          11 :   parameter_vac_D[GLU].push_back(27.49692658880534);
    7435             : 
    7436          11 :   parameter_vac_D[ILE].push_back(165.04540911921134);
    7437          11 :   parameter_vac_D[ILE].push_back(-0.5061553029227089);
    7438          11 :   parameter_vac_D[ILE].push_back(-275.1890586090823);
    7439          11 :   parameter_vac_D[ILE].push_back(-57.288063177375356);
    7440          11 :   parameter_vac_D[ILE].push_back(398.9780357099449);
    7441          11 :   parameter_vac_D[ILE].push_back(-245.42678814428692);
    7442          11 :   parameter_vac_D[ILE].push_back(42.72941025472001);
    7443             : 
    7444          11 :   parameter_vac_D[LEU].push_back(165.04540911921134);
    7445          11 :   parameter_vac_D[LEU].push_back(-0.580034983510499);
    7446          11 :   parameter_vac_D[LEU].push_back(-281.30910057877514);
    7447          11 :   parameter_vac_D[LEU].push_back(-66.19427345166183);
    7448          11 :   parameter_vac_D[LEU].push_back(445.19214155995115);
    7449          11 :   parameter_vac_D[LEU].push_back(-287.0653610399624);
    7450          11 :   parameter_vac_D[LEU].push_back(53.86626261066706);
    7451             : 
    7452          11 :   parameter_vac_D[MET].push_back(123.83238411920684);
    7453          11 :   parameter_vac_D[MET].push_back(-0.7698672022751385);
    7454          11 :   parameter_vac_D[MET].push_back(-251.2481622173618);
    7455          11 :   parameter_vac_D[MET].push_back(-100.67742019193848);
    7456          11 :   parameter_vac_D[MET].push_back(641.1563254731632);
    7457          11 :   parameter_vac_D[MET].push_back(-524.8742634212379);
    7458          11 :   parameter_vac_D[MET].push_back(135.36487813767542);
    7459             : 
    7460          11 :   parameter_vac_D[ASN].push_back(94.12880411921148);
    7461          11 :   parameter_vac_D[ASN].push_back(-0.22986194121078912);
    7462          11 :   parameter_vac_D[ASN].push_back(-138.78769705028003);
    7463          11 :   parameter_vac_D[ASN].push_back(-25.896846049402594);
    7464          11 :   parameter_vac_D[ASN].push_back(184.55609781654326);
    7465          11 :   parameter_vac_D[ASN].push_back(-110.14043851975404);
    7466          11 :   parameter_vac_D[ASN].push_back(18.388834098004153);
    7467             : 
    7468          11 :   parameter_vac_D[PRO].push_back(90.51619611920745);
    7469          11 :   parameter_vac_D[PRO].push_back(-0.0977238494110807);
    7470          11 :   parameter_vac_D[PRO].push_back(-109.43531311067846);
    7471          11 :   parameter_vac_D[PRO].push_back(-10.592981104983805);
    7472          11 :   parameter_vac_D[PRO].push_back(93.64863466237733);
    7473          11 :   parameter_vac_D[PRO].push_back(-42.348197720920865);
    7474          11 :   parameter_vac_D[PRO].push_back(3.5854078482704574);
    7475             : 
    7476          11 :   parameter_vac_D[GLN].push_back(136.91340111920806);
    7477          11 :   parameter_vac_D[GLN].push_back(-0.7259026842220699);
    7478          11 :   parameter_vac_D[GLN].push_back(-257.0347011897067);
    7479          11 :   parameter_vac_D[GLN].push_back(-89.99600255417684);
    7480          11 :   parameter_vac_D[GLN].push_back(570.3890595917421);
    7481          11 :   parameter_vac_D[GLN].push_back(-438.8977029769549);
    7482          11 :   parameter_vac_D[GLN].push_back(105.48846039376491);
    7483             : 
    7484          11 :   parameter_vac_D[SER].push_back(55.20490011583253);
    7485          11 :   parameter_vac_D[SER].push_back(-0.038078030710377984);
    7486          11 :   parameter_vac_D[SER].push_back(-58.79085960838952);
    7487          11 :   parameter_vac_D[SER].push_back(-4.067364063406562);
    7488          11 :   parameter_vac_D[SER].push_back(41.319899403658475);
    7489          11 :   parameter_vac_D[SER].push_back(-15.865682241288962);
    7490          11 :   parameter_vac_D[SER].push_back(0.5028409006168431);
    7491             : 
    7492          11 :   parameter_vac_D[THR].push_back(88.90604111920842);
    7493          11 :   parameter_vac_D[THR].push_back(-0.11566717587697625);
    7494          11 :   parameter_vac_D[THR].push_back(-114.4541243837681);
    7495          11 :   parameter_vac_D[THR].push_back(-12.541537413808342);
    7496          11 :   parameter_vac_D[THR].push_back(106.4974738790947);
    7497          11 :   parameter_vac_D[THR].push_back(-50.15009912825225);
    7498          11 :   parameter_vac_D[THR].push_back(4.719349514074467);
    7499             : 
    7500          11 :   parameter_vac_D[VAL].push_back(117.67910411920792);
    7501          11 :   parameter_vac_D[VAL].push_back(-0.18187311248567883);
    7502          11 :   parameter_vac_D[VAL].push_back(-162.8697844894754);
    7503          11 :   parameter_vac_D[VAL].push_back(-19.769248288711825);
    7504          11 :   parameter_vac_D[VAL].push_back(162.59270939168965);
    7505          11 :   parameter_vac_D[VAL].push_back(-79.37261506441627);
    7506          11 :   parameter_vac_D[VAL].push_back(8.230771959393175);
    7507             : 
    7508          11 :   parameter_vac_D[ALA].push_back(46.92250011448002);
    7509          11 :   parameter_vac_D[ALA].push_back(-0.020339064649444412);
    7510          11 :   parameter_vac_D[ALA].push_back(-44.41584945233503);
    7511          11 :   parameter_vac_D[ALA].push_back(-2.1483754537886113);
    7512          11 :   parameter_vac_D[ALA].push_back(25.713667829058785);
    7513          11 :   parameter_vac_D[ALA].push_back(-8.222782061575268);
    7514          11 :   parameter_vac_D[ALA].push_back(-0.2521732728817875);
    7515             : 
    7516          11 :   parameter_vac_D[GLY].push_back(23.532201119209795);
    7517          11 :   parameter_vac_D[GLY].push_back(-0.00628609590047614);
    7518          11 :   parameter_vac_D[GLY].push_back(-17.28421910139733);
    7519          11 :   parameter_vac_D[GLY].push_back(-0.6641226821159686);
    7520          11 :   parameter_vac_D[GLY].push_back(8.536119110048007);
    7521          11 :   parameter_vac_D[GLY].push_back(-2.5438638688361466);
    7522          11 :   parameter_vac_D[GLY].push_back(-0.11165675928832643);
    7523             : 
    7524          11 :   parameter_vac_D[HIS].push_back(145.41948111920982);
    7525          11 :   parameter_vac_D[HIS].push_back(-0.8548328183368781);
    7526          11 :   parameter_vac_D[HIS].push_back(-290.8653238004162);
    7527          11 :   parameter_vac_D[HIS].push_back(-107.85375269366395);
    7528          11 :   parameter_vac_D[HIS].push_back(685.7025818759361);
    7529          11 :   parameter_vac_D[HIS].push_back(-538.2592043545858);
    7530          11 :   parameter_vac_D[HIS].push_back(132.17357375729733);
    7531             : 
    7532             :   // NUCLEIC ACIDS
    7533          11 :   parameter_mix_D[BB_PO3].push_back(223.2671801192072);
    7534          11 :   parameter_mix_D[BB_PO3].push_back(-0.14452515213607267);
    7535          11 :   parameter_mix_D[BB_PO3].push_back(-219.64134852678032);
    7536          11 :   parameter_mix_D[BB_PO3].push_back(-15.527993497328728);
    7537          11 :   parameter_mix_D[BB_PO3].push_back(153.27197635784856);
    7538          11 :   parameter_mix_D[BB_PO3].push_back(-61.17793915482464);
    7539          11 :   parameter_mix_D[BB_PO3].push_back(2.92608540200577);
    7540             : 
    7541          11 :   parameter_mix_D[BB_PO2].push_back(80.12660011920252);
    7542          11 :   parameter_mix_D[BB_PO2].push_back(-0.02788855519820236);
    7543          11 :   parameter_mix_D[BB_PO2].push_back(-60.53219491822279);
    7544          11 :   parameter_mix_D[BB_PO2].push_back(-2.9768829034096806);
    7545          11 :   parameter_mix_D[BB_PO2].push_back(33.30645116638123);
    7546          11 :   parameter_mix_D[BB_PO2].push_back(-11.601573219761375);
    7547          11 :   parameter_mix_D[BB_PO2].push_back(0.12551046492022438);
    7548             : 
    7549          11 :   parameter_mix_D[BB_DNA].push_back(2835.3195201193003);
    7550          11 :   parameter_mix_D[BB_DNA].push_back(-7.954301723608173);
    7551          11 :   parameter_mix_D[BB_DNA].push_back(-4509.325563460958);
    7552          11 :   parameter_mix_D[BB_DNA].push_back(-909.1870692311344);
    7553          11 :   parameter_mix_D[BB_DNA].push_back(6375.156903893768);
    7554          11 :   parameter_mix_D[BB_DNA].push_back(-3956.4787847570715);
    7555          11 :   parameter_mix_D[BB_DNA].push_back(708.9872879613656);
    7556             : 
    7557          11 :   parameter_mix_D[BB_DNA_5].push_back(3136.73358011921);
    7558          11 :   parameter_mix_D[BB_DNA_5].push_back(-10.023435855160427);
    7559          11 :   parameter_mix_D[BB_DNA_5].push_back(-5208.921666368173);
    7560          11 :   parameter_mix_D[BB_DNA_5].push_back(-1160.4403539440214);
    7561          11 :   parameter_mix_D[BB_DNA_5].push_back(7962.598421448727);
    7562          11 :   parameter_mix_D[BB_DNA_5].push_back(-5149.059857691847);
    7563          11 :   parameter_mix_D[BB_DNA_5].push_back(984.5217027570121);
    7564             : 
    7565          11 :   parameter_mix_D[BB_DNA_3].push_back(3136.73358011921);
    7566          11 :   parameter_mix_D[BB_DNA_3].push_back(-9.618834865806274);
    7567          11 :   parameter_mix_D[BB_DNA_3].push_back(-5164.249220443828);
    7568          11 :   parameter_mix_D[BB_DNA_3].push_back(-1103.2721475326382);
    7569          11 :   parameter_mix_D[BB_DNA_3].push_back(7633.46089052312);
    7570          11 :   parameter_mix_D[BB_DNA_3].push_back(-4826.171688395644);
    7571          11 :   parameter_mix_D[BB_DNA_3].push_back(888.1820863683546);
    7572             : 
    7573          11 :   parameter_mix_D[BB_RNA].push_back(3192.5955601188807);
    7574          11 :   parameter_mix_D[BB_RNA].push_back(-11.475781582628308);
    7575          11 :   parameter_mix_D[BB_RNA].push_back(-5486.264576931735);
    7576          11 :   parameter_mix_D[BB_RNA].push_back(-1344.2878288415961);
    7577          11 :   parameter_mix_D[BB_RNA].push_back(9035.26109892441);
    7578          11 :   parameter_mix_D[BB_RNA].push_back(-6068.471909763036);
    7579          11 :   parameter_mix_D[BB_RNA].push_back(1226.3696076463866);
    7580             : 
    7581          11 :   parameter_mix_D[BB_RNA_5].push_back(3512.1630401192215);
    7582          11 :   parameter_mix_D[BB_RNA_5].push_back(-14.191020069433975);
    7583          11 :   parameter_mix_D[BB_RNA_5].push_back(-6293.687102187508);
    7584          11 :   parameter_mix_D[BB_RNA_5].push_back(-1689.3688494490984);
    7585          11 :   parameter_mix_D[BB_RNA_5].push_back(11193.448566821942);
    7586          11 :   parameter_mix_D[BB_RNA_5].push_back(-7806.9064399949375);
    7587          11 :   parameter_mix_D[BB_RNA_5].push_back(1662.4594983069844);
    7588             : 
    7589          11 :   parameter_mix_D[BB_RNA_3].push_back(3512.1630401192215);
    7590          11 :   parameter_mix_D[BB_RNA_3].push_back(-12.978118135595812);
    7591          11 :   parameter_mix_D[BB_RNA_3].push_back(-6149.290195451877);
    7592          11 :   parameter_mix_D[BB_RNA_3].push_back(-1515.8309761505627);
    7593          11 :   parameter_mix_D[BB_RNA_3].push_back(10176.605450440278);
    7594          11 :   parameter_mix_D[BB_RNA_3].push_back(-6813.250569884159);
    7595          11 :   parameter_mix_D[BB_RNA_3].push_back(1366.823518955858);
    7596             : 
    7597          11 :   parameter_mix_D[BASE_A].push_back(2464.736500119229);
    7598          11 :   parameter_mix_D[BASE_A].push_back(-12.127452038444783);
    7599          11 :   parameter_mix_D[BASE_A].push_back(-4710.661256689607);
    7600          11 :   parameter_mix_D[BASE_A].push_back(-1462.6964141954452);
    7601          11 :   parameter_mix_D[BASE_A].push_back(9451.725575888277);
    7602          11 :   parameter_mix_D[BASE_A].push_back(-6883.018479948857);
    7603          11 :   parameter_mix_D[BASE_A].push_back(1540.1526599737797);
    7604             : 
    7605          11 :   parameter_mix_D[BASE_C].push_back(1797.2697601191685);
    7606          11 :   parameter_mix_D[BASE_C].push_back(-5.963855532295215);
    7607          11 :   parameter_mix_D[BASE_C].push_back(-2955.077717756034);
    7608          11 :   parameter_mix_D[BASE_C].push_back(-689.4543508746372);
    7609          11 :   parameter_mix_D[BASE_C].push_back(4665.914740532565);
    7610          11 :   parameter_mix_D[BASE_C].push_back(-3051.4605913706982);
    7611          11 :   parameter_mix_D[BASE_C].push_back(590.2201952719585);
    7612             : 
    7613          11 :   parameter_mix_D[BASE_G].push_back(2804.271480119049);
    7614          11 :   parameter_mix_D[BASE_G].push_back(-16.928072935469974);
    7615          11 :   parameter_mix_D[BASE_G].push_back(-5989.82519987899);
    7616          11 :   parameter_mix_D[BASE_G].push_back(-2275.490326521775);
    7617          11 :   parameter_mix_D[BASE_G].push_back(15007.832401865428);
    7618          11 :   parameter_mix_D[BASE_G].push_back(-12287.520690325606);
    7619          11 :   parameter_mix_D[BASE_G].push_back(3172.98306575258);
    7620             : 
    7621          11 :   parameter_mix_D[BASE_T].push_back(2545.0860001192113);
    7622          11 :   parameter_mix_D[BASE_T].push_back(-10.975141620541738);
    7623          11 :   parameter_mix_D[BASE_T].push_back(-4636.058358764447);
    7624          11 :   parameter_mix_D[BASE_T].push_back(-1340.3746388296138);
    7625          11 :   parameter_mix_D[BASE_T].push_back(8850.604320505428);
    7626          11 :   parameter_mix_D[BASE_T].push_back(-6421.852532013674);
    7627          11 :   parameter_mix_D[BASE_T].push_back(1443.371517335904);
    7628             : 
    7629          11 :   parameter_mix_D[BASE_U].push_back(1608.7389001192062);
    7630          11 :   parameter_mix_D[BASE_U].push_back(-3.9816849036181434);
    7631          11 :   parameter_mix_D[BASE_U].push_back(-2411.056432130769);
    7632          11 :   parameter_mix_D[BASE_U].push_back(-451.8236361945487);
    7633          11 :   parameter_mix_D[BASE_U].push_back(3220.4418252803644);
    7634          11 :   parameter_mix_D[BASE_U].push_back(-1944.2515577994325);
    7635          11 :   parameter_mix_D[BASE_U].push_back(332.9259542628691);
    7636             : 
    7637          11 :   parameter_vac_D[BB_PO3].push_back(8.508889119209273);
    7638          11 :   parameter_vac_D[BB_PO3].push_back(-0.0010408625482164885);
    7639          11 :   parameter_vac_D[BB_PO3].push_back(-5.656130990440752);
    7640          11 :   parameter_vac_D[BB_PO3].push_back(-0.10748040057053611);
    7641          11 :   parameter_vac_D[BB_PO3].push_back(2.1441246977168227);
    7642          11 :   parameter_vac_D[BB_PO3].push_back(-0.3967083127147655);
    7643          11 :   parameter_vac_D[BB_PO3].push_back(-0.10110003105909898);
    7644             : 
    7645          11 :   parameter_vac_D[BB_PO2].push_back(2.7889001116093284);
    7646          11 :   parameter_vac_D[BB_PO2].push_back(-0.00011178884266113128);
    7647          11 :   parameter_vac_D[BB_PO2].push_back(-1.1702605818380654);
    7648          11 :   parameter_vac_D[BB_PO2].push_back(-0.011278044036819927);
    7649          11 :   parameter_vac_D[BB_PO2].push_back(0.3214006584089024);
    7650          11 :   parameter_vac_D[BB_PO2].push_back(-0.04097165983591666);
    7651          11 :   parameter_vac_D[BB_PO2].push_back(-0.017525098100539684);
    7652             : 
    7653          11 :   parameter_vac_D[BB_DNA].push_back(94.75075611920529);
    7654          11 :   parameter_vac_D[BB_DNA].push_back(-0.13973533952241124);
    7655          11 :   parameter_vac_D[BB_DNA].push_back(-123.45402430039046);
    7656          11 :   parameter_vac_D[BB_DNA].push_back(-15.19494522082691);
    7657          11 :   parameter_vac_D[BB_DNA].push_back(123.34749914811465);
    7658          11 :   parameter_vac_D[BB_DNA].push_back(-61.038507985345504);
    7659          11 :   parameter_vac_D[BB_DNA].push_back(6.601587478585944);
    7660             : 
    7661          11 :   parameter_vac_D[BB_DNA_5].push_back(108.18080111920679);
    7662          11 :   parameter_vac_D[BB_DNA_5].push_back(-0.2055953690887981);
    7663          11 :   parameter_vac_D[BB_DNA_5].push_back(-150.7924892157235);
    7664          11 :   parameter_vac_D[BB_DNA_5].push_back(-22.700459516383198);
    7665          11 :   parameter_vac_D[BB_DNA_5].push_back(172.2599851655527);
    7666          11 :   parameter_vac_D[BB_DNA_5].push_back(-93.4983124807692);
    7667          11 :   parameter_vac_D[BB_DNA_5].push_back(12.867661230942868);
    7668             : 
    7669          11 :   parameter_vac_D[BB_DNA_3].push_back(108.18080111920537);
    7670          11 :   parameter_vac_D[BB_DNA_3].push_back(-0.18263717534168372);
    7671          11 :   parameter_vac_D[BB_DNA_3].push_back(-148.5918817744255);
    7672          11 :   parameter_vac_D[BB_DNA_3].push_back(-19.90799847398835);
    7673          11 :   parameter_vac_D[BB_DNA_3].push_back(157.55184203379557);
    7674          11 :   parameter_vac_D[BB_DNA_3].push_back(-80.28471270058103);
    7675          11 :   parameter_vac_D[BB_DNA_3].push_back(9.313712500298278);
    7676             : 
    7677          11 :   parameter_vac_D[BB_RNA].push_back(106.37859611922117);
    7678          11 :   parameter_vac_D[BB_RNA].push_back(-0.2380766148121975);
    7679          11 :   parameter_vac_D[BB_RNA].push_back(-153.74131338570024);
    7680          11 :   parameter_vac_D[BB_RNA].push_back(-26.415436217574932);
    7681          11 :   parameter_vac_D[BB_RNA].push_back(191.90585451112776);
    7682          11 :   parameter_vac_D[BB_RNA].push_back(-109.61737794316868);
    7683          11 :   parameter_vac_D[BB_RNA].push_back(16.663804191332204);
    7684             : 
    7685          11 :   parameter_vac_D[BB_RNA_5].push_back(120.58236111920618);
    7686          11 :   parameter_vac_D[BB_RNA_5].push_back(-0.340258533619014);
    7687          11 :   parameter_vac_D[BB_RNA_5].push_back(-186.08333929996334);
    7688          11 :   parameter_vac_D[BB_RNA_5].push_back(-38.493337147644795);
    7689          11 :   parameter_vac_D[BB_RNA_5].push_back(266.2262415641144);
    7690          11 :   parameter_vac_D[BB_RNA_5].push_back(-164.73088478359585);
    7691          11 :   parameter_vac_D[BB_RNA_5].push_back(29.07014157680879);
    7692             : 
    7693          11 :   parameter_vac_D[BB_RNA_3].push_back(120.5823611192099);
    7694          11 :   parameter_vac_D[BB_RNA_3].push_back(-0.274146129206928);
    7695          11 :   parameter_vac_D[BB_RNA_3].push_back(-179.24499182395388);
    7696          11 :   parameter_vac_D[BB_RNA_3].push_back(-30.315729372259426);
    7697          11 :   parameter_vac_D[BB_RNA_3].push_back(222.2645581367648);
    7698          11 :   parameter_vac_D[BB_RNA_3].push_back(-125.13581171514033);
    7699          11 :   parameter_vac_D[BB_RNA_3].push_back(18.350308154920107);
    7700             : 
    7701          11 :   parameter_vac_D[BASE_A].push_back(114.34024911921);
    7702          11 :   parameter_vac_D[BASE_A].push_back(-0.4136665918383359);
    7703          11 :   parameter_vac_D[BASE_A].push_back(-192.33138384655922);
    7704          11 :   parameter_vac_D[BASE_A].push_back(-46.74428306691412);
    7705          11 :   parameter_vac_D[BASE_A].push_back(312.9511030981905);
    7706          11 :   parameter_vac_D[BASE_A].push_back(-199.6349962647333);
    7707          11 :   parameter_vac_D[BASE_A].push_back(36.15938693202153);
    7708             : 
    7709          11 :   parameter_vac_D[BASE_C].push_back(76.17798411921166);
    7710          11 :   parameter_vac_D[BASE_C].push_back(-0.1444475142707445);
    7711          11 :   parameter_vac_D[BASE_C].push_back(-102.66873668949485);
    7712          11 :   parameter_vac_D[BASE_C].push_back(-15.813768367725821);
    7713          11 :   parameter_vac_D[BASE_C].push_back(119.63436338715553);
    7714          11 :   parameter_vac_D[BASE_C].push_back(-64.22251971660583);
    7715          11 :   parameter_vac_D[BASE_C].push_back(8.351952332828862);
    7716             : 
    7717          11 :   parameter_vac_D[BASE_G].push_back(127.08052911921965);
    7718          11 :   parameter_vac_D[BASE_G].push_back(-0.7137457014712297);
    7719          11 :   parameter_vac_D[BASE_G].push_back(-239.67686838772786);
    7720          11 :   parameter_vac_D[BASE_G].push_back(-88.53661981200943);
    7721          11 :   parameter_vac_D[BASE_G].push_back(556.7254485453866);
    7722          11 :   parameter_vac_D[BASE_G].push_back(-432.0234649577737);
    7723          11 :   parameter_vac_D[BASE_G].push_back(104.407200463848);
    7724             : 
    7725          11 :   parameter_vac_D[BASE_T].push_back(94.09000011920868);
    7726          11 :   parameter_vac_D[BASE_T].push_back(-0.27147149980458524);
    7727          11 :   parameter_vac_D[BASE_T].push_back(-143.65649702254174);
    7728          11 :   parameter_vac_D[BASE_T].push_back(-30.861235738371892);
    7729          11 :   parameter_vac_D[BASE_T].push_back(212.3643014774958);
    7730          11 :   parameter_vac_D[BASE_T].push_back(-133.06675501066275);
    7731          11 :   parameter_vac_D[BASE_T].push_back(23.951588200687073);
    7732             : 
    7733          11 :   parameter_vac_D[BASE_U].push_back(59.30540111665979);
    7734          11 :   parameter_vac_D[BASE_U].push_back(-0.06146929846591808);
    7735          11 :   parameter_vac_D[BASE_U].push_back(-67.43680950211682);
    7736          11 :   parameter_vac_D[BASE_U].push_back(-6.625289749170134);
    7737          11 :   parameter_vac_D[BASE_U].push_back(58.37012229348065);
    7738          11 :   parameter_vac_D[BASE_U].push_back(-26.23044613101723);
    7739          11 :   parameter_vac_D[BASE_U].push_back(2.061238351422343);
    7740             : 
    7741       31669 :   for(unsigned i=0; i<atoms.size(); ++i) {
    7742       31658 :     std::string Aname = pdb.getAtomName(atoms[i]);
    7743       31658 :     std::string Rname = pdb.getResidueName(atoms[i]);
    7744       31658 :     Rname.erase(std::remove_if(Rname.begin(), Rname.end(), ::isspace),Rname.end());
    7745       31658 :     Rname = onebeadResidueAlias(Rname);
    7746       31658 :     if(Rname=="ALA") {
    7747        1632 :       atoi[residue_atom[i]]=ALA;
    7748       30026 :     } else if(Rname=="ARG") {
    7749        1944 :       atoi[residue_atom[i]]=ARG;
    7750       28082 :     } else if(Rname=="ASN") {
    7751        1620 :       atoi[residue_atom[i]]=ASN;
    7752       26462 :     } else if(Rname=="ASP") {
    7753        1404 :       atoi[residue_atom[i]]=ASP;
    7754       25058 :     } else if(Rname=="CYS") {
    7755         108 :       atoi[residue_atom[i]]=CYS;
    7756       24950 :     } else if(Rname=="CYX") {
    7757           0 :       atoi[residue_atom[i]]=CYX;
    7758       24950 :     } else if(Rname=="GLN") {
    7759        2356 :       atoi[residue_atom[i]]=GLN;
    7760       22594 :     } else if(Rname=="GLU") {
    7761        1071 :       atoi[residue_atom[i]]=GLU;
    7762       21523 :     } else if(Rname=="GLY") {
    7763        1422 :       atoi[residue_atom[i]]=GLY;
    7764       20101 :     } else if(Rname=="HIS") {
    7765           0 :       atoi[residue_atom[i]]=HIS;
    7766       20101 :     } else if(Rname=="HID") {
    7767           0 :       atoi[residue_atom[i]]=HIS;
    7768       20101 :     } else if(Rname=="HIE") {
    7769         324 :       atoi[residue_atom[i]]=HIS;
    7770       19777 :     } else if(Rname=="HIP") {
    7771           0 :       atoi[residue_atom[i]]=HIP;
    7772             :       // CHARMM NAMING FOR PROTONATION STATES OF HISTIDINE
    7773       19777 :     } else if(Rname=="HSD") {
    7774           0 :       atoi[residue_atom[i]]=HIS;
    7775       19777 :     } else if(Rname=="HSE") {
    7776           0 :       atoi[residue_atom[i]]=HIS;
    7777       19777 :     } else if(Rname=="HSP") {
    7778           0 :       atoi[residue_atom[i]]=HIP;
    7779       19777 :     } else if(Rname=="ILE") {
    7780        1944 :       atoi[residue_atom[i]]=ILE;
    7781       17833 :     } else if(Rname=="LEU") {
    7782        3420 :       atoi[residue_atom[i]]=LEU;
    7783       14413 :     } else if(Rname=="LYS") {
    7784        2340 :       atoi[residue_atom[i]]=LYS;
    7785       12073 :     } else if(Rname=="MET") {
    7786        1292 :       atoi[residue_atom[i]]=MET;
    7787       10781 :     } else if(Rname=="PHE") {
    7788        2268 :       atoi[residue_atom[i]]=PHE;
    7789        8513 :     } else if(Rname=="PRO") {
    7790        1683 :       atoi[residue_atom[i]]=PRO;
    7791        6830 :     } else if(Rname=="SER") {
    7792        1164 :       atoi[residue_atom[i]]=SER;
    7793        5666 :     } else if(Rname=="THR") {
    7794        1106 :       atoi[residue_atom[i]]=THR;
    7795        4560 :     } else if(Rname=="TRP") {
    7796           0 :       atoi[residue_atom[i]]=TRP;
    7797        4560 :     } else if(Rname=="TYR") {
    7798        1188 :       atoi[residue_atom[i]]=TYR;
    7799        3372 :     } else if(Rname=="VAL") {
    7800        2416 :       atoi[residue_atom[i]]=VAL;
    7801             :     }
    7802             :     // NUCLEIC ACIDS
    7803             :     // nucleobases are not automatically populated as an additional check on the health of the PDB.
    7804             :     // RNA - G
    7805         956 :     else if(Rname=="G") {
    7806           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    7807           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    7808           0 :         atoi [residue_atom[i]]=BB_PO2;
    7809           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7810           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7811           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7812           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    7813           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    7814           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    7815           0 :         atoi[residue_atom[i]]=BB_RNA;
    7816           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    7817           0 :                  Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    7818           0 :                  Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    7819           0 :                  Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    7820           0 :         atoi[residue_atom[i]]=BASE_G;
    7821             :       } else {
    7822           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7823             :       }
    7824             :       // RNA - G3
    7825         956 :     } else if(Rname=="G3") {
    7826           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    7827           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    7828           0 :         atoi [residue_atom[i]]=BB_PO2;
    7829           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    7830           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    7831           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    7832           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    7833           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    7834           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    7835           0 :         atoi[residue_atom[i]]=BB_RNA_3;
    7836           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    7837           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    7838           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    7839           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    7840           0 :         atoi[residue_atom[i]]=BASE_G;
    7841             :       } else {
    7842           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7843             :       }
    7844             :       // RNA - G5
    7845         956 :     } else if(Rname=="G5") {
    7846           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7847           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7848           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7849           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    7850           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    7851           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    7852           0 :         atoi[residue_atom[i]]=BB_RNA_5;
    7853           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    7854           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    7855           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    7856           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    7857           0 :         atoi[residue_atom[i]]=BASE_G;
    7858             :       } else {
    7859           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7860             :       }
    7861             :       // RNA - GT
    7862         956 :     } else if(Rname=="GT") {
    7863           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    7864           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    7865           0 :         atoi [residue_atom[i]]=BB_PO3;
    7866           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7867           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7868           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7869           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    7870           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    7871           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    7872           0 :         atoi[residue_atom[i]]=BB_RNA;
    7873           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    7874           0 :                  Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    7875           0 :                  Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    7876           0 :                  Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    7877           0 :         atoi[residue_atom[i]]=BASE_G;
    7878             :       } else {
    7879           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7880             :       }
    7881             :       // RNA - U
    7882         956 :     } else if(Rname=="U") {
    7883         754 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    7884        1482 :           Aname=="O1P" || Aname=="O2P"  ) {
    7885          78 :         atoi [residue_atom[i]]=BB_PO2;
    7886         676 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7887         598 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7888         494 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7889         390 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    7890         312 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    7891         988 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    7892         416 :         atoi[residue_atom[i]]=BB_RNA;
    7893         260 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    7894         182 :                  Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    7895         364 :                  Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    7896         286 :         atoi[residue_atom[i]]=BASE_U;
    7897             :       } else {
    7898           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7899             :       }
    7900             :       // RNA - U3
    7901         176 :     } else if(Rname=="U3") {
    7902          60 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    7903         118 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    7904           6 :         atoi [residue_atom[i]]=BB_PO2;
    7905          54 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    7906          48 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    7907          40 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    7908          32 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    7909          26 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    7910          78 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    7911          34 :         atoi[residue_atom[i]]=BB_RNA_3;
    7912          20 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    7913          14 :                 Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    7914          28 :                 Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    7915          22 :         atoi[residue_atom[i]]=BASE_U;
    7916             :       } else {
    7917           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7918             :       }
    7919             :       // RNA - U5
    7920         114 :     } else if(Rname=="U5") {
    7921         108 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7922          96 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7923          80 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7924          64 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    7925          48 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    7926         156 :           Aname=="H2'1" || Aname=="H5T" ) {
    7927          68 :         atoi[residue_atom[i]]=BB_RNA_5;
    7928          40 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    7929          28 :                 Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    7930          56 :                 Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    7931          44 :         atoi[residue_atom[i]]=BASE_U;
    7932             :       } else {
    7933           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7934             :       }
    7935             :       // RNA - UT
    7936           2 :     } else if(Rname=="UT") {
    7937           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    7938           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    7939           0 :         atoi [residue_atom[i]]=BB_PO3;
    7940           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7941           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7942           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7943           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    7944           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    7945           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    7946           0 :         atoi[residue_atom[i]]=BB_RNA;
    7947           0 :       } else if( Aname=="N1" || Aname=="C2"  || Aname=="O2" || Aname=="N3" ||
    7948           0 :                  Aname=="C4" || Aname=="O4"  || Aname=="C5" || Aname=="C6" ||
    7949           0 :                  Aname=="H3" || Aname=="H5"  || Aname=="H6") {
    7950           0 :         atoi[residue_atom[i]]=BASE_U;
    7951             :       } else {
    7952           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7953             :       }
    7954             :       // RNA - A
    7955           2 :     } else if(Rname=="A") {
    7956           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    7957           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    7958           0 :         atoi [residue_atom[i]]=BB_PO2;
    7959           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7960           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7961           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7962           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    7963           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    7964           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    7965           0 :         atoi[residue_atom[i]]=BB_RNA;
    7966           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    7967           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    7968           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    7969           0 :                 Aname=="H61" || Aname=="H62" ) {
    7970           0 :         atoi[residue_atom[i]]=BASE_A;
    7971             :       } else {
    7972           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7973             :       }
    7974             :       // RNA - A3
    7975           2 :     } else if(Rname=="A3") {
    7976           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    7977           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    7978           0 :         atoi [residue_atom[i]]=BB_PO2;
    7979           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    7980           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    7981           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    7982           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    7983           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    7984           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    7985           0 :         atoi[residue_atom[i]]=BB_RNA_3;
    7986           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    7987           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    7988           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    7989           0 :                 Aname=="H61" || Aname=="H62" ) {
    7990           0 :         atoi[residue_atom[i]]=BASE_A;
    7991             :       } else {
    7992           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    7993             :       }
    7994             :       // RNA - A5
    7995           2 :     } else if(Rname=="A5") {
    7996           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    7997           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    7998           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    7999           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    8000           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    8001           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    8002           0 :         atoi[residue_atom[i]]=BB_RNA_5;
    8003           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    8004           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    8005           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    8006           0 :                 Aname=="H61" || Aname=="H62" ) {
    8007           0 :         atoi[residue_atom[i]]=BASE_A;
    8008             :       } else {
    8009           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8010             :       }
    8011             :       // RNA - AT
    8012           2 :     } else if(Rname=="AT") {
    8013           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    8014           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    8015           0 :         atoi [residue_atom[i]]=BB_PO3;
    8016           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8017           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    8018           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    8019           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    8020           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    8021           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    8022           0 :         atoi[residue_atom[i]]=BB_RNA;
    8023           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    8024           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    8025           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    8026           0 :                 Aname=="H61" || Aname=="H62" ) {
    8027           0 :         atoi[residue_atom[i]]=BASE_A;
    8028             :       } else {
    8029           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8030             :       }
    8031             :       // RNA - C
    8032           2 :     } else if(Rname=="C") {
    8033           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    8034           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    8035           0 :         atoi [residue_atom[i]]=BB_PO2;
    8036           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8037           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    8038           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    8039           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    8040           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    8041           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    8042           0 :         atoi[residue_atom[i]]=BB_RNA;
    8043           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8044           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8045           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8046           0 :         atoi[residue_atom[i]]=BASE_C;
    8047             :       } else {
    8048           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8049             :       }
    8050             :       // RNA - C3
    8051           2 :     } else if(Rname=="C3") {
    8052           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    8053           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    8054           0 :         atoi [residue_atom[i]]=BB_PO2;
    8055           0 :       } else if(Aname=="O5'"  || Aname=="C5'" || Aname=="O4'"  || Aname=="C4'"  ||
    8056           0 :                 Aname=="O3'"  || Aname=="C3'" || Aname=="O2'"  || Aname=="C2'"  ||
    8057           0 :                 Aname=="C1'"  || Aname=="H5'" || Aname=="H5''" || Aname=="H4'"  ||
    8058           0 :                 Aname=="H3'"  || Aname=="H2'" || Aname=="H1'"  || Aname=="H3T"  ||
    8059           0 :                 Aname=="H2'1" || Aname=="HO3'"|| Aname=="HO2'" || Aname=="H5'1" ||
    8060           0 :                 Aname=="H5'2" || Aname=="HO'2" ) {
    8061           0 :         atoi[residue_atom[i]]=BB_RNA_3;
    8062           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8063           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8064           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8065           0 :         atoi[residue_atom[i]]=BASE_C;
    8066             :       } else {
    8067           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8068             :       }
    8069             :       // RNA - C5
    8070           2 :     } else if(Rname=="C5") {
    8071           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8072           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    8073           0 :           Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    8074           0 :           Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="HO5'" ||
    8075           0 :           Aname=="HO2'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="HO'2" ||
    8076           0 :           Aname=="H2'1" || Aname=="H5T" ) {
    8077           0 :         atoi[residue_atom[i]]=BB_RNA_5;
    8078           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8079           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8080           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8081           0 :         atoi[residue_atom[i]]=BASE_C;
    8082             :       } else {
    8083           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8084             :       }
    8085             :       // RNA - CT
    8086           2 :     } else if(Rname=="CT") {
    8087           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    8088           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    8089           0 :         atoi [residue_atom[i]]=BB_PO3;
    8090           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8091           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="O2'"  || Aname=="C2'"  ||
    8092           0 :                 Aname=="C1'"  || Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  ||
    8093           0 :                 Aname=="H3'"  || Aname=="H2'"  || Aname=="H1'"  || Aname=="H3T"  ||
    8094           0 :                 Aname=="HO5'" || Aname=="HO3'" || Aname=="HO2'" || Aname=="H5'1" ||
    8095           0 :                 Aname=="H5'2" || Aname=="HO'2" || Aname=="H2'1" || Aname=="H5T" ) {
    8096           0 :         atoi[residue_atom[i]]=BB_RNA;
    8097           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8098           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8099           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8100           0 :         atoi[residue_atom[i]]=BASE_C;
    8101             :       } else {
    8102           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8103             :       }
    8104             :       // DNA - G
    8105           2 :     } else if(Rname=="DG") {
    8106           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    8107           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    8108           0 :         atoi [residue_atom[i]]=BB_PO2;
    8109           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8110           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8111           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8112           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8113           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8114           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8115           0 :         atoi[residue_atom[i]]=BB_DNA;
    8116           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    8117           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    8118           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    8119           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    8120           0 :         atoi[residue_atom[i]]=BASE_G;
    8121             :       } else {
    8122           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8123             :       }
    8124             :       // DNA - G3
    8125           2 :     } else if(Rname=="DG3") {
    8126           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    8127           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    8128           0 :         atoi [residue_atom[i]]=BB_PO2;
    8129           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8130           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8131           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8132           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    8133           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8134           0 :                 Aname=="H3T" ) {
    8135           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    8136           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    8137           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    8138           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    8139           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    8140           0 :         atoi[residue_atom[i]]=BASE_G;
    8141             :       } else {
    8142           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8143             :       }
    8144             :       // DNA - G5
    8145           2 :     } else if(Rname=="DG5") {
    8146           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8147           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    8148           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8149           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8150           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8151           0 :           Aname=="H5T" ) {
    8152           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    8153           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    8154           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    8155           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    8156           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    8157           0 :         atoi[residue_atom[i]]=BASE_G;
    8158             :       } else {
    8159           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8160             :       }
    8161             :       // DNA - GT
    8162           2 :     } else if(Rname=="DGT") {
    8163           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    8164           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    8165           0 :         atoi [residue_atom[i]]=BB_PO3;
    8166           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8167           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8168           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8169           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8170           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8171           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8172           0 :         atoi[residue_atom[i]]=BB_DNA;
    8173           0 :       } else if(Aname=="N1" || Aname=="C2"  || Aname=="N2" || Aname=="N3" ||
    8174           0 :                 Aname=="C4" || Aname=="C5"  || Aname=="C6" || Aname=="O6" ||
    8175           0 :                 Aname=="N7" || Aname=="C8"  || Aname=="N9" || Aname=="H1" ||
    8176           0 :                 Aname=="H8" || Aname=="H21" || Aname=="H22" ) {
    8177           0 :         atoi[residue_atom[i]]=BASE_G;
    8178             :       } else {
    8179           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8180             :       }
    8181             :       // DNA - T
    8182           2 :     } else if(Rname=="DT") {
    8183           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    8184           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    8185           0 :         atoi [residue_atom[i]]=BB_PO2;
    8186           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8187           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8188           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8189           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8190           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8191           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8192           0 :         atoi[residue_atom[i]]=BB_DNA;
    8193           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    8194           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    8195           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    8196           0 :                 Aname=="H72" || Aname=="H73" ) {
    8197           0 :         atoi[residue_atom[i]]=BASE_T;
    8198             :       } else {
    8199           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8200             :       }
    8201             :       // DNA - T3
    8202           2 :     } else if(Rname=="DT3") {
    8203           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    8204           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    8205           0 :         atoi [residue_atom[i]]=BB_PO2;
    8206           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8207           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8208           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8209           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    8210           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8211           0 :                 Aname=="H3T" ) {
    8212           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    8213           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    8214           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    8215           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    8216           0 :                 Aname=="H72" || Aname=="H73" ) {
    8217           0 :         atoi[residue_atom[i]]=BASE_T;
    8218             :       } else {
    8219           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8220             :       }
    8221             :       // DNA - T5
    8222           2 :     } else if(Rname=="DT5") {
    8223           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8224           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    8225           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8226           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8227           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8228           0 :           Aname=="H5T" ) {
    8229           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    8230           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    8231           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    8232           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    8233           0 :                 Aname=="H72" || Aname=="H73" ) {
    8234           0 :         atoi[residue_atom[i]]=BASE_T;
    8235             :       } else {
    8236           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8237             :       }
    8238             :       // DNA - TT
    8239           2 :     } else if(Rname=="DTT") {
    8240           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    8241           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    8242           0 :         atoi [residue_atom[i]]=BB_PO3;
    8243           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8244           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8245           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8246           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8247           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8248           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8249           0 :         atoi[residue_atom[i]]=BB_DNA;
    8250           0 :       } else if(Aname=="N1"  || Aname=="C2"  || Aname=="O2"  || Aname=="N3"  ||
    8251           0 :                 Aname=="C4"  || Aname=="O4"  || Aname=="C5"  || Aname=="C6"  ||
    8252           0 :                 Aname=="C7"  || Aname=="H3"  || Aname=="H6"  || Aname=="H71" ||
    8253           0 :                 Aname=="H72" || Aname=="H73" ) {
    8254           0 :         atoi[residue_atom[i]]=BASE_T;
    8255             :       } else {
    8256           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8257             :       }
    8258             :       // DNA - A
    8259           2 :     } else if(Rname=="DA") {
    8260           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    8261           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    8262           0 :         atoi [residue_atom[i]]=BB_PO2;
    8263           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8264           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8265           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8266           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8267           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8268           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8269           0 :         atoi[residue_atom[i]]=BB_DNA;
    8270           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    8271           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    8272           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    8273           0 :                 Aname=="H61" || Aname=="H62" ) {
    8274           0 :         atoi[residue_atom[i]]=BASE_A;
    8275             :       } else {
    8276           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8277             :       }
    8278             :       // DNA - A3
    8279           2 :     } else if(Rname=="DA3") {
    8280           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    8281           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    8282           0 :         atoi [residue_atom[i]]=BB_PO2;
    8283           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8284           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8285           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8286           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    8287           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8288           0 :                 Aname=="H3T" ) {
    8289           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    8290           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    8291           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    8292           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    8293           0 :                 Aname=="H61" || Aname=="H62" ) {
    8294           0 :         atoi[residue_atom[i]]=BASE_A;
    8295             :       } else {
    8296           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8297             :       }
    8298             :       // DNA - A5
    8299           2 :     } else if(Rname=="DA5") {
    8300           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8301           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    8302           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8303           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8304           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8305           0 :           Aname=="H5T" ) {
    8306           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    8307           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    8308           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    8309           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    8310           0 :                 Aname=="H61" || Aname=="H62" ) {
    8311           0 :         atoi[residue_atom[i]]=BASE_A;
    8312             :       } else {
    8313           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8314             :       }
    8315             :       // DNA - AT
    8316           2 :     } else if(Rname=="DAT") {
    8317           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    8318           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    8319           0 :         atoi [residue_atom[i]]=BB_PO3;
    8320           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8321           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8322           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8323           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8324           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8325           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8326           0 :         atoi[residue_atom[i]]=BB_DNA;
    8327           0 :       } else if(Aname=="N1"  || Aname=="C2" || Aname=="N3" || Aname=="C4" ||
    8328           0 :                 Aname=="C5"  || Aname=="C6" || Aname=="N6" || Aname=="N7" ||
    8329           0 :                 Aname=="C8"  || Aname=="N9" || Aname=="H2" || Aname=="H8" ||
    8330           0 :                 Aname=="H61" || Aname=="H62" ) {
    8331           0 :         atoi[residue_atom[i]]=BASE_A;
    8332             :       } else {
    8333           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8334             :       }
    8335             :       // DNA - C
    8336           2 :     } else if(Rname=="DC") {
    8337           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="HP" ||
    8338           0 :           Aname=="O1P" || Aname=="O2P"  ) {
    8339           0 :         atoi [residue_atom[i]]=BB_PO2;
    8340           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8341           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8342           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8343           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8344           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8345           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8346           0 :         atoi[residue_atom[i]]=BB_DNA;
    8347           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8348           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8349           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8350           0 :         atoi[residue_atom[i]]=BASE_C;
    8351             :       } else {
    8352           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8353             :       }
    8354             :       // DNA - C3
    8355           2 :     } else if(Rname=="DC3") {
    8356           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3" ||
    8357           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" ) {
    8358           0 :         atoi [residue_atom[i]]=BB_PO2;
    8359           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8360           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8361           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8362           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO3'" ||
    8363           0 :                 Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8364           0 :                 Aname=="H3T" ) {
    8365           0 :         atoi[residue_atom[i]]=BB_DNA_3;
    8366           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8367           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8368           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8369           0 :         atoi[residue_atom[i]]=BASE_C;
    8370             :       } else {
    8371           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8372             :       }
    8373             :       // DNA - C5
    8374           2 :     } else if(Rname=="DC5") {
    8375           0 :       if( Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8376           0 :           Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  ||  Aname=="C1'" ||
    8377           0 :           Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8378           0 :           Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8379           0 :           Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" || Aname=="H2'2" ||
    8380           0 :           Aname=="H5T" ) {
    8381           0 :         atoi[residue_atom[i]]=BB_DNA_5;
    8382           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8383           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8384           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8385           0 :         atoi[residue_atom[i]]=BASE_C;
    8386             :       } else {
    8387           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8388             :       }
    8389             :       // DNA - CT
    8390           2 :     } else if(Rname=="DCT") {
    8391           0 :       if( Aname=="P"   || Aname=="OP1" || Aname=="OP2" || Aname=="OP3"  ||
    8392           0 :           Aname=="O1P" || Aname=="O2P" || Aname=="O3P" || Aname=="HOP3" ) {
    8393           0 :         atoi [residue_atom[i]]=BB_PO3;
    8394           0 :       } else if(Aname=="O5'"  || Aname=="C5'"  || Aname=="O4'"  || Aname=="C4'"  ||
    8395           0 :                 Aname=="O3'"  || Aname=="C3'"  || Aname=="C2'"  || Aname=="C1'"  ||
    8396           0 :                 Aname=="H5'"  || Aname=="H5''" || Aname=="H4'"  || Aname=="H3'"  ||
    8397           0 :                 Aname=="H2'"  || Aname=="H2''" || Aname=="H1'"  || Aname=="HO5'" ||
    8398           0 :                 Aname=="HO3'" || Aname=="H5'1" || Aname=="H5'2" || Aname=="H2'1" ||
    8399           0 :                 Aname=="H2'2" || Aname=="H5T"  || Aname=="H3T" ) {
    8400           0 :         atoi[residue_atom[i]]=BB_DNA;
    8401           0 :       } else if(Aname=="N1" || Aname=="C2" || Aname=="O2"  || Aname=="N3" ||
    8402           0 :                 Aname=="C4" || Aname=="N4" || Aname=="C5"  || Aname=="C6" ||
    8403           0 :                 Aname=="H5" || Aname=="H6" || Aname=="H41" || Aname=="H42" ) {
    8404           0 :         atoi[residue_atom[i]]=BASE_C;
    8405             :       } else {
    8406           0 :         error("Atom name "+Aname+" is not defined for residue "+Rname+". Check the PDB.");
    8407             :       }
    8408           2 :     } else if(glyc_type[i] >= 0) {
    8409             :       // monosaccharide: the bead type was resolved once, from the residue name and
    8410             :       // from the presence of an N-acetyl group, in getOnebeadMapping()
    8411           0 :       atoi[residue_atom[i]] = static_cast<unsigned>(glyc_type[i]);
    8412           2 :     } else if(isUnsupportedGlycan(Rname)) {
    8413           0 :       error("Residue "+Rname+" is a monosaccharide for which no ONEBEAD parameters are available.");
    8414           2 :     } else if(ionTypeFromResname(Rname) >= 0) {
    8415             :       // monoatomic ion: assign its onebead bead type (terms filled in getOnebeadIonparam_sans).
    8416           2 :       atoi[residue_atom[i]] = obSlot(ionTypeFromResname(Rname));
    8417             :     } else {
    8418           0 :       error("Residue not known: "+Rname);
    8419             :     }
    8420             :   }
    8421          11 : }
    8422             : 
    8423             : // ----------------------------------------------------------------------------
    8424             : // Monoatomic-ion parameters, shared by the ATOMISTIC and ONEBEAD routes.
    8425             : //
    8426             : // X-ray Cromer-Mann coefficients (a1..a4, b1..b4, c) are taken from the
    8427             : // charged-ion scattering-factor entries tabulated in the International Tables
    8428             : // for Crystallography / International Tables for X-ray Crystallography, based
    8429             : // on Cromer & Mann, Acta Cryst. A24, 321-324 (1968).
    8430             : // For each ion, Sum(a)+c gives the q=0 electron count of the ion
    8431             : // (atomic number minus charge), as expected for the forward X-ray factor.
    8432             : //
    8433             : // Neutron bound coherent scattering lengths are taken from the NIST NCNR table,
    8434             : // based on Sears, Neutron News 3, No. 3, 1992. These values are nuclear/isotopic
    8435             : // scattering lengths, so they do not depend on the ion oxidation state in this
    8436             : // model; for example Fe2+ and Fe3+ use the same Fe neutron value.
    8437             : //
    8438             : // The displaced-solvent volume is estimated from Shannon effective ionic radii
    8439             : // (Shannon, Acta Cryst. A32, 751-767 (1976); here using a fixed coordination
    8440             : // choice, currently 6-fold) as the volume of a sphere with that radius.
    8441             : // It is used instead of neutral-atom van der Waals radii because neutral vdW
    8442             : // radii are too large for small cations and would over-subtract the solvent
    8443             : // excluded-volume contribution.
    8444             : // ----------------------------------------------------------------------------
    8445         318 : void SAXS::getIonData(unsigned ion, std::vector<double> &cm_a, std::vector<double> &cm_b, double &cm_c, double &vol, double &neutron_b, double &mass) const {
    8446         318 :   cm_a.resize(4);
    8447         318 :   cm_b.resize(4);
    8448         318 :   switch(ion) {
    8449          35 :   case ION_NA: // Na1+
    8450          35 :     cm_a = {3.2565, 3.9362, 1.3998, 1.0032};
    8451          35 :     cm_b = {2.6671, 6.1153, 0.2001, 14.039};
    8452          35 :     cm_c = 0.404;
    8453          35 :     vol = 4.445;
    8454          35 :     neutron_b = 0.363;
    8455          35 :     mass = 22.990;
    8456          35 :     break;
    8457          35 :   case ION_K: // K1+
    8458          35 :     cm_a = {7.9578, 7.4917, 6.359, 1.1915};
    8459          35 :     cm_b = {12.6331, 0.7674, -0.0020, 31.9128};
    8460          35 :     cm_c = -4.9978;
    8461          35 :     vol = 11.008;
    8462          35 :     neutron_b = 0.367;
    8463          35 :     mass = 39.098;
    8464          35 :     break;
    8465          35 :   case ION_CL: // Cl1-
    8466          35 :     cm_a = {18.2915, 7.2084, 6.5337, 2.3386};
    8467          35 :     cm_b = {0.0066, 1.1717, 19.5424, 60.4486};
    8468          35 :     cm_c = -16.378;
    8469          35 :     vol = 24.838;
    8470          35 :     neutron_b = 0.9577;
    8471          35 :     mass = 35.453;
    8472          35 :     break;
    8473          37 :   case ION_CA: // Ca2+
    8474          37 :     cm_a = {15.6348, 7.9518, 8.4372, 0.8537};
    8475          37 :     cm_b = {-0.0074, 0.6089, 10.3116, 25.9905};
    8476          37 :     cm_c = -14.875;
    8477          37 :     vol = 4.189;
    8478          37 :     neutron_b = 0.47;
    8479          37 :     mass = 40.078;
    8480          37 :     break;
    8481          35 :   case ION_MG: // Mg2+
    8482          35 :     cm_a = {3.4988, 3.8378, 1.3284, 0.8497};
    8483          35 :     cm_b = {2.1676, 4.7542, 0.185, 10.1411};
    8484          35 :     cm_c = 0.4853;
    8485          35 :     vol = 1.563;
    8486          35 :     neutron_b = 0.5375;
    8487          35 :     mass = 24.305;
    8488          35 :     break;
    8489          35 :   case ION_ZN: // Zn2+
    8490          35 :     cm_a = {11.9719, 7.3862, 6.4668, 1.394};
    8491          35 :     cm_b = {2.9946, 0.2031, 7.0826, 18.0995};
    8492          35 :     cm_c = 0.7807;
    8493          35 :     vol = 1.697;
    8494          35 :     neutron_b = 0.568;
    8495          35 :     mass = 65.38;
    8496          35 :     break;
    8497          35 :   case ION_FE2: // Fe2+
    8498          35 :     cm_a = {11.0424, 7.374, 4.1346, 0.4399};
    8499          35 :     cm_b = {4.6538, 0.3053, 12.0546, 31.2809};
    8500          35 :     cm_c = 1.0097;
    8501          35 :     vol = 1.988;
    8502          35 :     neutron_b = 0.945;
    8503          35 :     mass = 55.845;
    8504          35 :     break;
    8505          35 :   case ION_FE3: // Fe3+
    8506          35 :     cm_a = {11.1764, 7.3863, 3.3948, 0.0724};
    8507          35 :     cm_b = {4.6147, 0.3005, 11.6729, 38.5566};
    8508          35 :     cm_c = 0.9707;
    8509          35 :     vol = 1.124;
    8510          35 :     neutron_b = 0.945;
    8511          35 :     mass = 55.845;
    8512          35 :     break;
    8513          36 :   case ION_MN: // Mn2+
    8514          36 :     cm_a = {10.8061, 7.362, 3.5268, 0.2184};
    8515          36 :     cm_b = {5.2796, 0.3435, 14.343, 41.3235};
    8516          36 :     cm_c = 1.0874;
    8517          36 :     vol = 2.395;
    8518          36 :     neutron_b = -0.373;
    8519          36 :     mass = 54.938;
    8520          36 :     break;
    8521           0 :   default:
    8522           0 :     plumed_merror("getIonData called with an unknown ion id");
    8523             :   }
    8524         318 : }
    8525             : 
    8526             : // Detect a monoatomic ion from its residue name. Detection is by RESIDUE name only.
    8527             : // The protein/nucleic-acid branches are matched before this is reached.
    8528             : // Accepted aliases follow the RCSB PDB het codes plus the AMBER and CHARMM ion residue names.
    8529      257500 : int SAXS::ionTypeFromResname(const std::string &resname) const {
    8530      257500 :   std::string r = resname;
    8531      257500 :   r.erase(std::remove_if(r.begin(), r.end(), ::isspace), r.end());
    8532             :   std::transform(r.begin(), r.end(), r.begin(), ::toupper);
    8533      257500 :   if(r=="NA"  || r=="SOD" || r=="NA+") {
    8534             :     return ION_NA;
    8535             :   }
    8536      257500 :   if(r=="K"   || r=="POT" || r=="K+") {
    8537             :     return ION_K;
    8538             :   }
    8539      257500 :   if(r=="CL"  || r=="CLA" || r=="CL-") {
    8540             :     return ION_CL;
    8541             :   }
    8542      257500 :   if(r=="CA"  || r=="CAL" || r=="CA2+") {
    8543             :     return ION_CA;
    8544             :   }
    8545      257486 :   if(r=="MG"  || r=="MG2+") {
    8546             :     return ION_MG;
    8547             :   }
    8548      257486 :   if(r=="ZN"  || r=="ZN2" || r=="ZN2+") {
    8549             :     return ION_ZN;
    8550             :   }
    8551      257486 :   if(r=="FE2") {
    8552             :     return ION_FE2;
    8553             :   }
    8554      257486 :   if(r=="FE3") {
    8555             :     return ION_FE3;
    8556             :   }
    8557      257486 :   if(r=="MN"  || r=="MN2+") {
    8558           8 :     return ION_MN;
    8559             :   }
    8560             :   return -1;
    8561             : }
    8562             : 
    8563             : // Fill, for every ION_* bead type, the SAXS vac/solv/mix terms across q, and the q=0 Iq0 values
    8564             : // for the corresponding beads. For a one-atom bead vac=(f^a)^2, solv=(f^s)^2, mix=2 f^a f^s, so
    8565             : // the existing runtime combination sqrt(|vac + rho^2 solv - rho mix|) reproduces |f^a - rho f^s|
    8566             : // exactly, keeping rho a live SOLVDENS knob. q_list is in A^-1. This runs before the A^-1 ->
    8567             : // nm^-1 conversion in the constructor).
    8568             : // Maps a monosaccharide residue name onto one of the eight ONEBEAD glycan bead
    8569             : // types. Both the PDB chemical-component codes and the usual force-field spellings
    8570             : // are accepted. hasN tells whether the residue carries an amide nitrogen in the
    8571             : // TEMPLATE: it resolves the N-acetylhexosamines when the input file names them
    8572             : // after their parent hexose, which is the convention used by several builders.
    8573             : // Some builders rename the amino acid that carries a glycan (GLYCAM writes NLN for
    8574             : // an N-linked Asn, OLS/OLT for an O-linked Ser/Thr). Only a hydrogen is lost to the
    8575             : // glycosidic bond, so the bead is the parent amino acid and is treated as such. The
    8576             : // alias is applied to the name used everywhere downstream, including the LCPO key,
    8577             : // so no duplicate tables are needed.
    8578      106156 : std::string SAXS::onebeadResidueAlias(const std::string &resname) const {
    8579      106156 :   if(resname=="NLN") {
    8580           0 :     return "ASN";
    8581             :   }
    8582      106156 :   if(resname=="OLS") {
    8583           0 :     return "SER";
    8584             :   }
    8585      106156 :   if(resname=="OLT") {
    8586           0 :     return "THR";
    8587             :   }
    8588      106156 :   return resname;
    8589             : }
    8590             : 
    8591             : // Residues that the ONEBEAD model represents with a single bead per residue.
    8592             : // PDB::allowedResidue already covers all of them, CYX included; the explicit test is
    8593             : // kept only so that this stays correct if the module is ever pointed at
    8594             : // MolDataClass::allowedResidue, whose protein list does not contain CYX.
    8595       74492 : bool SAXS::isOnebeadProteinResidue(const PDB &pdb, const std::string &resname) const {
    8596      148984 :   return pdb.allowedResidue("protein",resname) || resname=="CYX";
    8597             : }
    8598             : 
    8599        4145 : int SAXS::glycanTypeFromResname(const std::string &resname, bool hasN) const {
    8600             :   const std::string &r = resname;
    8601             : 
    8602             :   // explicitly N-acetylated hexosamines
    8603        4145 :   if(r=="NAG" || r=="NDG" || r=="AGLCNA" || r=="BGLCNA") {
    8604             :     return GLYC_NAG;
    8605             :   }
    8606        4145 :   if(r=="NGA" || r=="A2G" || r=="AGALNA" || r=="BGALNA") {
    8607             :     return GLYC_NGA;
    8608             :   }
    8609             :   // glucose / galactose: N-acetylated or not
    8610        4145 :   if(r=="GLC" || r=="BGC" || r=="AGLC" || r=="BGLC") {
    8611           0 :     return hasN ? GLYC_NAG : GLYC_GLC;
    8612             :   }
    8613        4145 :   if(r=="GAL" || r=="GLA" || r=="AGAL" || r=="BGAL") {
    8614           0 :     return hasN ? GLYC_NGA : GLYC_GAL;
    8615             :   }
    8616             :   // mannose: the two anomers have their own parameter sets
    8617        4145 :   if(r=="MAN" || r=="AMAN") {
    8618             :     return GLYC_MAN;
    8619             :   }
    8620        4145 :   if(r=="BMA" || r=="BMAN") {
    8621             :     return GLYC_BMA;
    8622             :   }
    8623             :   // 6-deoxyhexoses. FUC/FUL are alpha/beta-L-fucose and FCA/FCB their D enantiomers:
    8624             :   // all four have exactly the same composition and differ only in configuration, which
    8625             :   // no scattering experiment resolves. Rhamnose (RAM, RM4) is deliberately NOT here:
    8626             :   // it shares the formula but is a different sugar, so it belongs to the unsupported
    8627             :   // list rather than being silently given fucose parameters.
    8628        4145 :   if(r=="FUC" || r=="FUL" || r=="FCA" || r=="FCB" || r=="AFUC" || r=="BFUC") {
    8629             :     return GLYC_FUC;
    8630             :   }
    8631             :   // N-acetylneuraminic acid
    8632        4145 :   if(r=="SIA" || r=="SLB" || r=="ANE5AC" || r=="BNE5AC") {
    8633           0 :     return GLYC_SIA;
    8634             :   }
    8635             :   return -1;
    8636             : }
    8637             : 
    8638             : // Monosaccharides that the ONEBEAD model recognises but has no parameters for. They
    8639             : // are listed separately so that the user gets a specific message instead of the
    8640             : // generic "Residue not known".
    8641        4150 : bool SAXS::isUnsupportedGlycan(const std::string &r) const {
    8642        4150 :   return (r=="RAM" || r=="RM4" || r=="XXR" ||               // rhamnose
    8643        4150 :           r=="XYL" || r=="XYS" || r=="XYP" || r=="LXZ" ||   // xylose
    8644        4150 :           r=="GCU" || r=="BDP" || r=="GCV" ||               // glucuronic acid
    8645        4150 :           r=="IDS" || r=="IDR" ||                           // iduronic acid
    8646        4150 :           r=="SGN" || r=="SUS" || r=="UAP" ||               // sulfated sugars
    8647        4150 :           r=="NGC" || r=="NGE" ||                           // Neu5Gc
    8648        4150 :           r=="RIB" || r=="ARA" || r=="ARB" || r=="AHR" ||   // pentoses
    8649        8300 :           r=="GLP" || r=="PA1" || r=="GCS");                // glucosamine
    8650             : }
    8651             : 
    8652          12 : void SAXS::getOnebeadIonparam_saxs(std::vector<std::vector<long double> > &FF_tmp_vac, std::vector<std::vector<long double> > &FF_tmp_mix, std::vector<std::vector<long double> > &FF_tmp_solv, std::vector<double> &iq0_vac, std::vector<double> &iq0_mix, std::vector<double> &iq0_solv) const {
    8653          12 :   const unsigned numq = q_list.size();
    8654         120 :   for(unsigned t=0; t<NIONS; ++t) {
    8655         108 :     std::vector<double> a, b;
    8656             :     double c, v, bN, m;
    8657         108 :     getIonData(t, a, b, c, v, bN, m);
    8658             :     const unsigned slot = obSlot(t);
    8659         108 :     const double volr = std::pow(v, 2.0/3.0)/(4.*M_PI);
    8660        1026 :     for(unsigned k=0; k<numq; ++k) {
    8661         918 :       const double q = q_list[k];
    8662         918 :       const double s = q/(4.*M_PI);
    8663         918 :       double fa = c;
    8664        4590 :       for(unsigned j=0; j<4; ++j) {
    8665        3672 :         fa += a[j]*std::exp(-b[j]*s*s);
    8666             :       }
    8667         918 :       const double fs = v*std::exp(-volr*q*q);
    8668         918 :       FF_tmp_vac[k][slot]  = static_cast<long double>(fa*fa);
    8669         918 :       FF_tmp_solv[k][slot] = static_cast<long double>(fs*fs);
    8670         918 :       FF_tmp_mix[k][slot]  = static_cast<long double>(2.*fa*fs);
    8671             :     }
    8672             :     // q=0 forward values (exp(0)=1): f^a(0) = sum(a)+c, f^s(0) = v
    8673         108 :     double fa0 = c;
    8674         540 :     for(unsigned j=0; j<4; ++j) {
    8675         432 :       fa0 += a[j];
    8676             :     }
    8677             :     const double fs0 = v;
    8678       21375 :     for(unsigned i=0; i<nres; ++i) {
    8679       21267 :       if(atoi[i]==slot) {
    8680           1 :         iq0_vac[i]  = fa0*fa0;
    8681           1 :         iq0_solv[i] = fs0*fs0;
    8682           1 :         iq0_mix[i]  = 2.*fa0*fs0;
    8683             :       }
    8684             :     }
    8685             :   }
    8686          12 : }
    8687             : 
    8688             : // SANS analogue. The neutron amplitude b is real and q-independent, so vac = b^2 (constant)
    8689             : // and mix = 2 b f^s; the solvent term f^s depends only on the volume and is shared with SAXS.
    8690             : // Ions have no exchangeable hydrogens, so the deuterated terms equal the hydrogenated ones
    8691             : // (vac_D = vac_H, mix_D = mix_H).
    8692          11 : void SAXS::getOnebeadIonparam_sans(std::vector<std::vector<long double> > &FF_tmp_vac_H, std::vector<std::vector<long double> > &FF_tmp_mix_H, std::vector<std::vector<long double> > &FF_tmp_solv_H, std::vector<std::vector<long double> > &FF_tmp_vac_D, std::vector<std::vector<long double> > &FF_tmp_mix_D, std::vector<double> &iq0_vac_H, std::vector<double> &iq0_mix_H, std::vector<double> &iq0_solv_H, std::vector<double> &iq0_vac_D, std::vector<double> &iq0_mix_D) const {
    8693          11 :   const unsigned numq = q_list.size();
    8694         110 :   for(unsigned t=0; t<NIONS; ++t) {
    8695          99 :     std::vector<double> a, b;
    8696             :     double c, v, bN, m;
    8697          99 :     getIonData(t, a, b, c, v, bN, m);
    8698             :     const unsigned slot = obSlot(t);
    8699          99 :     const double volr = std::pow(v, 2.0/3.0)/(4.*M_PI);
    8700         927 :     for(unsigned k=0; k<numq; ++k) {
    8701         828 :       const double q = q_list[k];
    8702         828 :       const double fs = v*std::exp(-volr*q*q);
    8703         828 :       FF_tmp_vac_H[k][slot] = static_cast<long double>(bN*bN);
    8704         828 :       FF_tmp_vac_D[k][slot] = static_cast<long double>(bN*bN);
    8705         828 :       FF_tmp_solv_H[k][slot] = static_cast<long double>(fs*fs);
    8706         828 :       FF_tmp_mix_H[k][slot] = static_cast<long double>(2.*bN*fs);
    8707         828 :       FF_tmp_mix_D[k][slot] = static_cast<long double>(2.*bN*fs);
    8708             :     }
    8709             :     const double fs0 = v;
    8710       17478 :     for(unsigned i=0; i<nres; ++i) {
    8711       17379 :       if(atoi[i]==slot) {
    8712           2 :         iq0_vac_H[i] = bN*bN;
    8713           2 :         iq0_vac_D[i] = bN*bN;
    8714           2 :         iq0_solv_H[i] = fs0*fs0;
    8715           2 :         iq0_mix_H[i] = 2.*bN*fs0;
    8716           2 :         iq0_mix_D[i] = 2.*bN*fs0;
    8717             :       }
    8718             :     }
    8719             :   }
    8720          11 : }
    8721             : 
    8722           8 : double SAXS::calculateAFF(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &FF_tmp, const double Rho) {
    8723             :   std::map<std::string, unsigned> AA_map;
    8724           8 :   AA_map["H"] = H;
    8725           8 :   AA_map["C"] = C;
    8726           8 :   AA_map["N"] = N;
    8727           8 :   AA_map["O"] = O;
    8728           8 :   AA_map["P"] = P;
    8729           8 :   AA_map["S"] = S;
    8730             : 
    8731           8 :   std::vector<std::vector<double> > param_a;
    8732           8 :   std::vector<std::vector<double> > param_b;
    8733           8 :   std::vector<double> param_c;
    8734           8 :   std::vector<double> param_v;
    8735             : 
    8736           8 :   param_a.resize(NTT, std::vector<double>(5));
    8737           8 :   param_b.resize(NTT, std::vector<double>(5));
    8738           8 :   param_c.resize(NTT);
    8739           8 :   param_v.resize(NTT);
    8740             : 
    8741           8 :   param_a[H][0] = 0.493002;
    8742           8 :   param_b[H][0] = 10.5109;
    8743           8 :   param_c[H] = 0.003038;
    8744           8 :   param_a[H][1] = 0.322912;
    8745           8 :   param_b[H][1] = 26.1257;
    8746           8 :   param_v[H] = 5.15;
    8747           8 :   param_a[H][2] = 0.140191;
    8748           8 :   param_b[H][2] = 3.14236;
    8749           8 :   param_a[H][3] = 0.040810;
    8750           8 :   param_b[H][3] = 57.7997;
    8751           8 :   param_a[H][4] = 0.0;
    8752           8 :   param_b[H][4] = 1.0;
    8753             : 
    8754           8 :   param_a[C][0] = 2.31000;
    8755           8 :   param_b[C][0] = 20.8439;
    8756           8 :   param_c[C] = 0.215600;
    8757           8 :   param_a[C][1] = 1.02000;
    8758           8 :   param_b[C][1] = 10.2075;
    8759           8 :   param_v[C] = 16.44;
    8760           8 :   param_a[C][2] = 1.58860;
    8761           8 :   param_b[C][2] = 0.56870;
    8762           8 :   param_a[C][3] = 0.86500;
    8763           8 :   param_b[C][3] = 51.6512;
    8764           8 :   param_a[C][4] = 0.0;
    8765           8 :   param_b[C][4] = 1.0;
    8766             : 
    8767           8 :   param_a[N][0] = 12.2126;
    8768           8 :   param_b[N][0] = 0.00570;
    8769           8 :   param_c[N] = -11.529;
    8770           8 :   param_a[N][1] = 3.13220;
    8771           8 :   param_b[N][1] = 9.89330;
    8772           8 :   param_v[N] = 2.49;
    8773           8 :   param_a[N][2] = 2.01250;
    8774           8 :   param_b[N][2] = 28.9975;
    8775           8 :   param_a[N][3] = 1.16630;
    8776           8 :   param_b[N][3] = 0.58260;
    8777           8 :   param_a[N][4] = 0.0;
    8778           8 :   param_b[N][4] = 1.0;
    8779             : 
    8780           8 :   param_a[O][0] = 3.04850;
    8781           8 :   param_b[O][0] = 13.2771;
    8782           8 :   param_c[O] = 0.250800 ;
    8783           8 :   param_a[O][1] = 2.28680;
    8784           8 :   param_b[O][1] = 5.70110;
    8785           8 :   param_v[O] = 9.13;
    8786           8 :   param_a[O][2] = 1.54630;
    8787           8 :   param_b[O][2] = 0.32390;
    8788           8 :   param_a[O][3] = 0.86700;
    8789           8 :   param_b[O][3] = 32.9089;
    8790           8 :   param_a[O][4] = 0.0;
    8791           8 :   param_b[O][4] = 1.0;
    8792             : 
    8793           8 :   param_a[P][0] = 6.43450;
    8794           8 :   param_b[P][0] = 1.90670;
    8795           8 :   param_c[P] = 1.11490;
    8796           8 :   param_a[P][1] = 4.17910;
    8797           8 :   param_b[P][1] = 27.1570;
    8798           8 :   param_v[P] = 5.73;
    8799           8 :   param_a[P][2] = 1.78000;
    8800           8 :   param_b[P][2] = 0.52600;
    8801           8 :   param_a[P][3] = 1.49080;
    8802           8 :   param_b[P][3] = 68.1645;
    8803           8 :   param_a[P][4] = 0.0;
    8804           8 :   param_b[P][4] = 1.0;
    8805             : 
    8806           8 :   param_a[S][0] = 6.90530;
    8807           8 :   param_b[S][0] = 1.46790;
    8808           8 :   param_c[S] = 0.866900;
    8809           8 :   param_a[S][1] = 5.20340;
    8810           8 :   param_b[S][1] = 22.2151;
    8811           8 :   param_v[S] = 19.86;
    8812           8 :   param_a[S][2] = 1.43790;
    8813           8 :   param_b[S][2] = 0.25360;
    8814           8 :   param_a[S][3] = 1.58630;
    8815           8 :   param_b[S][3] = 56.1720;
    8816           8 :   param_a[S][4] = 0.0;
    8817           8 :   param_b[S][4] = 1.0;
    8818             : 
    8819             :   // monoatomic-ion X-ray Cromer-Mann parameters (charged-ion rows; see getIonData)
    8820          80 :   for(unsigned t=0; t<NIONS; ++t) {
    8821          72 :     std::vector<double> a, b;
    8822             :     double c, v, bN, m;
    8823          72 :     getIonData(t, a, b, c, v, bN, m);
    8824             :     const unsigned idx = affSlot(t);
    8825         360 :     for(unsigned j=0; j<4; ++j) {
    8826         288 :       param_a[idx][j] = a[j];
    8827         288 :       param_b[idx][j] = b[j];
    8828             :     }
    8829          72 :     param_c[idx] = c;
    8830          72 :     param_v[idx] = v;
    8831             :   }
    8832             : 
    8833           8 :   auto* moldat=plumed.getActionSet().selectLatest<GenericMolInfo*>(this);
    8834             : 
    8835             :   double Iq_0=0.;
    8836           8 :   if( moldat ) {
    8837             :     // cycle over the atom types
    8838         128 :     for(unsigned i=0; i<NTT; ++i) {
    8839         120 :       const double volr = std::pow(param_v[i], (2.0/3.0)) /(4. * M_PI);
    8840             :       // cycle over q
    8841        1200 :       for(unsigned k=0; k<q_list.size(); ++k) {
    8842        1080 :         const double q = q_list[k];
    8843        1080 :         const double s = q / (4. * M_PI);
    8844        1080 :         FF_tmp[k][i] = param_c[i];
    8845             :         // SUM [a_i * EXP( - b_i * (q/4pi)^2 )] Waasmaier and Kirfel (1995)
    8846        5400 :         for(unsigned j=0; j<4; ++j) {
    8847        4320 :           FF_tmp[k][i] += param_a[i][j]*std::exp(-param_b[i][j]*s*s);
    8848             :         }
    8849             :         // subtract solvation: rho * v_i * EXP( (- v_i^(2/3) / (4pi)) * q^2  ) // since  D in Fraser 1978 is 2*s
    8850        1080 :         FF_tmp[k][i] -= Rho*param_v[i]*std::exp(-volr*q*q);
    8851             :       }
    8852             :     }
    8853             :     // cycle over the atoms to assign the atom type and calculate I0
    8854       28382 :     for(unsigned i=0; i<atoms.size(); ++i) {
    8855             :       // ions are detected by residue name (never by the leading element letter,
    8856             :       // which would misread CL/CA as carbon, NA as nitrogen, ...)
    8857       28374 :       int ion = ionTypeFromResname(moldat->getResidueName(atoms[i]));
    8858       28374 :       if(ion >= 0) {
    8859           0 :         const unsigned index = affSlot(ion);
    8860           0 :         atoi[i] = index;
    8861           0 :         for(unsigned j=0; j<4; ++j) {
    8862           0 :           Iq_0 += param_a[index][j];
    8863             :         }
    8864           0 :         Iq_0 -= Rho*param_v[index] - param_c[index];
    8865           0 :         continue;
    8866           0 :       }
    8867             :       // get atom name
    8868       28374 :       std::string name = moldat->getAtomName(atoms[i]);
    8869             :       char type;
    8870             :       // get atom type
    8871       28374 :       char first = name.at(0);
    8872             :       // GOLDEN RULE: type is first letter, if not a number
    8873       28374 :       if (!isdigit(first)) {
    8874             :         type = first;
    8875             :         // otherwise is the second
    8876             :       } else {
    8877           0 :         type = name.at(1);
    8878             :       }
    8879             :       std::string type_s = std::string(1,type);
    8880       28374 :       if(AA_map.find(type_s) != AA_map.end()) {
    8881       28374 :         const unsigned index=AA_map[type_s];
    8882       28374 :         atoi[i] = AA_map[type_s];
    8883      141870 :         for(unsigned j=0; j<4; ++j) {
    8884      113496 :           Iq_0 += param_a[index][j];
    8885             :         }
    8886       28374 :         Iq_0 -= Rho*param_v[index] - param_c[index];
    8887             :       } else {
    8888           0 :         error("Wrong atom type "+type_s+" from atom name "+name+"\n");
    8889             :       }
    8890             :     }
    8891             :   } else {
    8892           0 :     error("MOLINFO DATA not found\n");
    8893             :   }
    8894           8 :   if(absolute) {
    8895             :     Iq_0 = 1;
    8896             :   }
    8897             : 
    8898           8 :   return Iq_0;
    8899           8 : }
    8900             : 
    8901           4 : double SAXS::calculateAFFsans(const std::vector<AtomNumber> &atoms, std::vector<std::vector<long double> > &FF_tmp, const double deuterConc) {
    8902             :   std::map<std::string, unsigned> AA_map;
    8903           4 :   AA_map["H"] = H;
    8904           4 :   AA_map["C"] = C;
    8905           4 :   AA_map["N"] = N;
    8906           4 :   AA_map["O"] = O;
    8907           4 :   AA_map["P"] = P;
    8908           4 :   AA_map["S"] = S;
    8909             : 
    8910           4 :   std::vector<double> param_b;
    8911           4 :   std::vector<double> param_v;
    8912             : 
    8913           4 :   param_b.resize(NTT);
    8914           4 :   param_v.resize(NTT);
    8915             : 
    8916           4 :   param_b[H] = -0.374;
    8917           4 :   param_v[H] = 5.15;
    8918             :   // param_b[D] = 0.667;
    8919           4 :   param_b[C] =  0.665;
    8920           4 :   param_v[C] = 16.44;
    8921           4 :   param_b[N] =  0.94;
    8922           4 :   param_v[N] = 2.49;
    8923           4 :   param_b[O] =  0.580;
    8924           4 :   param_v[O] = 9.13;
    8925           4 :   param_b[P] =  0.51;
    8926           4 :   param_v[P] = 5.73;
    8927           4 :   param_b[S] =  0.28;
    8928           4 :   param_v[S] = 19.86;
    8929             : 
    8930             :   // monoatomic-ion neutron scattering lengths (nuclear, charge-independent) and volumes
    8931          40 :   for(unsigned t=0; t<NIONS; ++t) {
    8932          36 :     std::vector<double> a, b;
    8933             :     double c, v, bN, m;
    8934          36 :     getIonData(t, a, b, c, v, bN, m);
    8935             :     const unsigned idx = affSlot(t);
    8936          36 :     param_b[idx] = bN;
    8937          36 :     param_v[idx] = v;
    8938             :   }
    8939             : 
    8940           4 :   double solv_sc_length = 0.1*(param_b[O] + 2.*((1. - deuterConc) * param_b[H] + deuterConc * 0.667)); // per water electron (10 electrons)
    8941             : 
    8942           4 :   auto* moldat=plumed.getActionSet().selectLatest<GenericMolInfo*>(this);
    8943             : 
    8944             :   double Iq_0=0.;
    8945           4 :   if( moldat ) {
    8946             :     // cycle over the atom types
    8947          64 :     for(unsigned i=0; i<NTT; ++i) {
    8948          60 :       double volr = std::pow(param_v[i], (2.0/3.0)) /(4. * M_PI);
    8949             :       // cycle over q
    8950         600 :       for(unsigned k=0; k<q_list.size(); ++k) {
    8951         540 :         const double q = q_list[k];
    8952         540 :         FF_tmp[k][i] = param_b[i];
    8953             :         // subtract solvation: rho * v_i * EXP( (- v_i^(2/3) / (4pi)) * q^2  ) // since  D in Fraser 1978 is 2*s
    8954         540 :         FF_tmp[k][i] -= solv_sc_length*rho*param_v[i]*std::exp(-volr*q*q);
    8955             :       }
    8956             :     }
    8957             :     // cycle over the atoms to assign the atom type and calculate I0
    8958       13922 :     for(unsigned i=0; i<atoms.size(); ++i) {
    8959             :       // ions are detected by residue name (never by the leading element letter)
    8960       13918 :       int ion = ionTypeFromResname(moldat->getResidueName(atoms[i]));
    8961       13918 :       if(ion >= 0) {
    8962           0 :         const unsigned index = affSlot(ion);
    8963           0 :         atoi[i] = index;
    8964           0 :         Iq_0 += param_b[index]-solv_sc_length*rho*param_v[index];
    8965           0 :         continue;
    8966           0 :       }
    8967             :       // get atom name
    8968       13918 :       std::string name = moldat->getAtomName(atoms[i]);
    8969             :       char type;
    8970             :       // get atom type
    8971       13918 :       char first = name.at(0);
    8972             :       // GOLDEN RULE: type is first letter, if not a number
    8973       13918 :       if (!isdigit(first)) {
    8974             :         type = first;
    8975             :         // otherwise is the second
    8976             :       } else {
    8977           0 :         type = name.at(1);
    8978             :       }
    8979             :       std::string type_s = std::string(1,type);
    8980       13918 :       if(AA_map.find(type_s) != AA_map.end()) {
    8981       13918 :         const unsigned index=AA_map[type_s];
    8982       13918 :         atoi[i] = AA_map[type_s];
    8983       13918 :         Iq_0 += param_b[index]-solv_sc_length*rho*param_v[index];
    8984             :       } else {
    8985           0 :         error("Wrong atom type "+type_s+" from atom name "+name+"\n");
    8986             :       }
    8987             :     }
    8988             :   } else {
    8989           0 :     error("MOLINFO DATA not found\n");
    8990             :   }
    8991           4 :   if(absolute) {
    8992             :     Iq_0 = 1;
    8993             :   }
    8994             : 
    8995           4 :   return Iq_0;
    8996             : }
    8997             : 
    8998          23 : std::map<std::string, std::vector<double> > SAXS::setupLCPOparam() {
    8999             :   std::map<std::string, std::vector<double> > lcpomap;
    9000             : 
    9001             :   // We arbitrarily set OC1/OT1 as the charged oxygen.
    9002             : 
    9003          23 :   lcpomap["ALA_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9004          23 :   lcpomap["ALA_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9005          23 :   lcpomap["ALA_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9006          23 :   lcpomap["ALA_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9007          23 :   lcpomap["ALA_CB"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9008          23 :   lcpomap["ALA_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9009          23 :   lcpomap["ALA_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9010          23 :   lcpomap["ALA_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9011          23 :   lcpomap["ALA_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9012          23 :   lcpomap["ALA_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9013             : 
    9014          23 :   lcpomap["ASP_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9015          23 :   lcpomap["ASP_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9016          23 :   lcpomap["ASP_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9017          23 :   lcpomap["ASP_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9018          23 :   lcpomap["ASP_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9019          23 :   lcpomap["ASP_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9020          23 :   lcpomap["ASP_OD1"] = { 1.6,  0.77914,  -0.25262,  -0.0016056,  0.00035071};
    9021          23 :   lcpomap["ASP_OD2"] = { 1.6,  0.77914,  -0.25262,  -0.0016056,  0.00035071};
    9022          23 :   lcpomap["ASP_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9023          23 :   lcpomap["ASP_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9024          23 :   lcpomap["ASP_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9025          23 :   lcpomap["ASP_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9026          23 :   lcpomap["ASP_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9027             : 
    9028          23 :   lcpomap["ASN_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9029          23 :   lcpomap["ASN_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9030          23 :   lcpomap["ASN_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9031          23 :   lcpomap["ASN_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9032          23 :   lcpomap["ASN_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9033          23 :   lcpomap["ASN_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9034          23 :   lcpomap["ASN_OD1"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9035          23 :   lcpomap["ASN_ND2"] = { 1.65,  0.73511,  -0.22116,  -0.00089148,  0.0002523};
    9036          23 :   lcpomap["ASN_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9037          23 :   lcpomap["ASN_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9038          23 :   lcpomap["ASN_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9039          23 :   lcpomap["ASN_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9040          23 :   lcpomap["ASN_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9041             : 
    9042          23 :   lcpomap["ARG_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9043          23 :   lcpomap["ARG_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9044          23 :   lcpomap["ARG_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9045          23 :   lcpomap["ARG_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9046          23 :   lcpomap["ARG_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9047          23 :   lcpomap["ARG_CG"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9048          23 :   lcpomap["ARG_CD"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9049          23 :   lcpomap["ARG_NE"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9050          23 :   lcpomap["ARG_NH1"] = { 1.65,  0.73511,  -0.22116,  -0.00089148,  0.0002523};
    9051          23 :   lcpomap["ARG_NH2"] = { 1.65,  0.73511,  -0.22116,  -0.00089148,  0.0002523};
    9052          23 :   lcpomap["ARG_CZ"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9053          23 :   lcpomap["ARG_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9054          23 :   lcpomap["ARG_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9055          23 :   lcpomap["ARG_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9056          23 :   lcpomap["ARG_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9057          23 :   lcpomap["ARG_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9058             : 
    9059          23 :   lcpomap["CYS_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9060          23 :   lcpomap["CYS_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9061          23 :   lcpomap["CYS_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9062          23 :   lcpomap["CYS_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9063          23 :   lcpomap["CYS_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9064          23 :   lcpomap["CYS_SG"] = { 1.9,  0.54581,  -0.19477,  -0.0012873,  0.00029247};
    9065          23 :   lcpomap["CYS_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9066          23 :   lcpomap["CYS_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9067          23 :   lcpomap["CYS_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9068          23 :   lcpomap["CYS_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9069          23 :   lcpomap["CYS_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9070             : 
    9071          23 :   lcpomap["CYX_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9072          23 :   lcpomap["CYX_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9073          23 :   lcpomap["CYX_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9074          23 :   lcpomap["CYX_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9075          23 :   lcpomap["CYX_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9076          23 :   lcpomap["CYX_SG"] = { 1.9,  0.54581,  -0.19477,  -0.0012873,  0.00029247};
    9077          23 :   lcpomap["CYX_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9078          23 :   lcpomap["CYX_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9079          23 :   lcpomap["CYX_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9080          23 :   lcpomap["CYX_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9081          23 :   lcpomap["CYX_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9082             : 
    9083          23 :   lcpomap["GLU_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9084          23 :   lcpomap["GLU_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9085          23 :   lcpomap["GLU_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9086          23 :   lcpomap["GLU_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9087          23 :   lcpomap["GLU_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9088          23 :   lcpomap["GLU_CG"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9089          23 :   lcpomap["GLU_CD"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9090          23 :   lcpomap["GLU_OE1"] = { 1.6,  0.77914,  -0.25262,  -0.0016056,  0.00035071};
    9091          23 :   lcpomap["GLU_OE2"] = { 1.6,  0.77914,  -0.25262,  -0.0016056,  0.00035071};
    9092          23 :   lcpomap["GLU_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9093          23 :   lcpomap["GLU_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9094          23 :   lcpomap["GLU_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9095          23 :   lcpomap["GLU_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9096          23 :   lcpomap["GLU_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9097             : 
    9098          23 :   lcpomap["GLN_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9099          23 :   lcpomap["GLN_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9100          23 :   lcpomap["GLN_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9101          23 :   lcpomap["GLN_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9102          23 :   lcpomap["GLN_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9103          23 :   lcpomap["GLN_CG"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9104          23 :   lcpomap["GLN_CD"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9105          23 :   lcpomap["GLN_OE1"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9106          23 :   lcpomap["GLN_NE2"] = { 1.65,  0.73511,  -0.22116,  -0.00089148,  0.0002523};
    9107          23 :   lcpomap["GLN_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9108          23 :   lcpomap["GLN_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9109          23 :   lcpomap["GLN_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9110          23 :   lcpomap["GLN_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9111          23 :   lcpomap["GLN_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9112             : 
    9113          23 :   lcpomap["GLY_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9114          23 :   lcpomap["GLY_CA"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9115          23 :   lcpomap["GLY_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9116          23 :   lcpomap["GLY_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9117          23 :   lcpomap["GLY_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9118          23 :   lcpomap["GLY_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9119          23 :   lcpomap["GLY_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9120          23 :   lcpomap["GLY_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9121          23 :   lcpomap["GLY_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9122             : 
    9123          23 :   lcpomap["HIS_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9124          23 :   lcpomap["HIS_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9125          23 :   lcpomap["HIS_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9126          23 :   lcpomap["HIS_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9127          23 :   lcpomap["HIS_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9128          23 :   lcpomap["HIS_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9129          23 :   lcpomap["HIS_ND1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9130          23 :   lcpomap["HIS_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9131          23 :   lcpomap["HIS_NE2"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9132          23 :   lcpomap["HIS_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9133          23 :   lcpomap["HIS_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9134          23 :   lcpomap["HIS_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9135          23 :   lcpomap["HIS_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9136             : 
    9137          23 :   lcpomap["HIE_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9138          23 :   lcpomap["HIE_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9139          23 :   lcpomap["HIE_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9140          23 :   lcpomap["HIE_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9141          23 :   lcpomap["HIE_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9142          23 :   lcpomap["HIE_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9143          23 :   lcpomap["HIE_ND1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9144          23 :   lcpomap["HIE_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9145          23 :   lcpomap["HIE_NE2"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9146          23 :   lcpomap["HIE_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9147          23 :   lcpomap["HIE_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9148          23 :   lcpomap["HIE_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9149          23 :   lcpomap["HIE_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9150             : 
    9151          23 :   lcpomap["HSE_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9152          23 :   lcpomap["HSE_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9153          23 :   lcpomap["HSE_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9154          23 :   lcpomap["HSE_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9155          23 :   lcpomap["HSE_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9156          23 :   lcpomap["HSE_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9157          23 :   lcpomap["HSE_ND1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9158          23 :   lcpomap["HSE_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9159          23 :   lcpomap["HSE_NE2"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9160          23 :   lcpomap["HSE_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9161          23 :   lcpomap["HSE_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9162          23 :   lcpomap["HSE_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9163          23 :   lcpomap["HSE_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9164             : 
    9165          23 :   lcpomap["HID_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9166          23 :   lcpomap["HID_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9167          23 :   lcpomap["HID_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9168          23 :   lcpomap["HID_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9169          23 :   lcpomap["HID_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9170          23 :   lcpomap["HID_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9171          23 :   lcpomap["HID_ND1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9172          23 :   lcpomap["HID_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9173          23 :   lcpomap["HID_NE2"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9174          23 :   lcpomap["HID_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9175          23 :   lcpomap["HID_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9176          23 :   lcpomap["HID_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9177          23 :   lcpomap["HID_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9178             : 
    9179          23 :   lcpomap["HSD_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9180          23 :   lcpomap["HSD_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9181          23 :   lcpomap["HSD_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9182          23 :   lcpomap["HSD_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9183          23 :   lcpomap["HSD_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9184          23 :   lcpomap["HSD_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9185          23 :   lcpomap["HSD_ND1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9186          23 :   lcpomap["HSD_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9187          23 :   lcpomap["HSD_NE2"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9188          23 :   lcpomap["HSD_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9189          23 :   lcpomap["HSD_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9190          23 :   lcpomap["HSD_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9191          23 :   lcpomap["HSD_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9192             : 
    9193          23 :   lcpomap["HIP_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9194          23 :   lcpomap["HIP_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9195          23 :   lcpomap["HIP_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9196          23 :   lcpomap["HIP_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9197          23 :   lcpomap["HIP_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9198          23 :   lcpomap["HIP_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9199          23 :   lcpomap["HIP_ND1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9200          23 :   lcpomap["HIP_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9201          23 :   lcpomap["HIP_NE2"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9202          23 :   lcpomap["HIP_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9203          23 :   lcpomap["HIP_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9204          23 :   lcpomap["HIP_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9205          23 :   lcpomap["HIP_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9206             : 
    9207          23 :   lcpomap["HSP_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9208          23 :   lcpomap["HSP_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9209          23 :   lcpomap["HSP_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9210          23 :   lcpomap["HSP_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9211          23 :   lcpomap["HSP_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9212          23 :   lcpomap["HSP_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9213          23 :   lcpomap["HSP_ND1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9214          23 :   lcpomap["HSP_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9215          23 :   lcpomap["HSP_NE2"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9216          23 :   lcpomap["HSP_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9217          23 :   lcpomap["HSP_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9218          23 :   lcpomap["HSP_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9219          23 :   lcpomap["HSP_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9220             : 
    9221          23 :   lcpomap["ILE_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9222          23 :   lcpomap["ILE_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9223          23 :   lcpomap["ILE_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9224          23 :   lcpomap["ILE_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9225          23 :   lcpomap["ILE_CB"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9226          23 :   lcpomap["ILE_CG2"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9227          23 :   lcpomap["ILE_CG1"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9228          23 :   lcpomap["ILE_CD1"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9229          23 :   lcpomap["ILE_CD"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9230          23 :   lcpomap["ILE_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9231          23 :   lcpomap["ILE_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9232          23 :   lcpomap["ILE_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9233          23 :   lcpomap["ILE_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9234          23 :   lcpomap["ILE_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9235             : 
    9236          23 :   lcpomap["LEU_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9237          23 :   lcpomap["LEU_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9238          23 :   lcpomap["LEU_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9239          23 :   lcpomap["LEU_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9240          23 :   lcpomap["LEU_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9241          23 :   lcpomap["LEU_CG"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9242          23 :   lcpomap["LEU_CD1"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9243          23 :   lcpomap["LEU_CD2"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9244          23 :   lcpomap["LEU_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9245          23 :   lcpomap["LEU_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9246          23 :   lcpomap["LEU_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9247          23 :   lcpomap["LEU_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9248          23 :   lcpomap["LEU_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9249             : 
    9250          23 :   lcpomap["LYS_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9251          23 :   lcpomap["LYS_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9252          23 :   lcpomap["LYS_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9253          23 :   lcpomap["LYS_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9254          23 :   lcpomap["LYS_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9255          23 :   lcpomap["LYS_CG"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9256          23 :   lcpomap["LYS_CD"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9257          23 :   lcpomap["LYS_CE"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9258          23 :   lcpomap["LYS_NZ"] = { 1.65,  0.73511,  -0.22116,  -0.00089148,  0.0002523};
    9259          23 :   lcpomap["LYS_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9260          23 :   lcpomap["LYS_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9261          23 :   lcpomap["LYS_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9262          23 :   lcpomap["LYS_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9263          23 :   lcpomap["LYS_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9264             : 
    9265          23 :   lcpomap["MET_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9266          23 :   lcpomap["MET_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9267          23 :   lcpomap["MET_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9268          23 :   lcpomap["MET_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9269          23 :   lcpomap["MET_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9270          23 :   lcpomap["MET_CG"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9271          23 :   lcpomap["MET_SD"] = { 1.9,  0.54581,  -0.19477,  -0.0012873,  0.00029247};
    9272          23 :   lcpomap["MET_CE"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9273          23 :   lcpomap["MET_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9274          23 :   lcpomap["MET_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9275          23 :   lcpomap["MET_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9276          23 :   lcpomap["MET_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9277          23 :   lcpomap["MET_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9278             : 
    9279          23 :   lcpomap["PHE_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9280          23 :   lcpomap["PHE_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9281          23 :   lcpomap["PHE_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9282          23 :   lcpomap["PHE_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9283          23 :   lcpomap["PHE_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9284          23 :   lcpomap["PHE_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9285          23 :   lcpomap["PHE_CD1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9286          23 :   lcpomap["PHE_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9287          23 :   lcpomap["PHE_CZ"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9288          23 :   lcpomap["PHE_CE2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9289          23 :   lcpomap["PHE_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9290          23 :   lcpomap["PHE_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9291          23 :   lcpomap["PHE_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9292          23 :   lcpomap["PHE_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9293          23 :   lcpomap["PHE_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9294          23 :   lcpomap["PHE_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9295             : 
    9296          23 :   lcpomap["PRO_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9297          23 :   lcpomap["PRO_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9298          23 :   lcpomap["PRO_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9299          23 :   lcpomap["PRO_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9300          23 :   lcpomap["PRO_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9301          23 :   lcpomap["PRO_CG"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9302          23 :   lcpomap["PRO_CD"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9303          23 :   lcpomap["PRO_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9304          23 :   lcpomap["PRO_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9305          23 :   lcpomap["PRO_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9306          23 :   lcpomap["PRO_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9307          23 :   lcpomap["PRO_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9308             : 
    9309          23 :   lcpomap["SER_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9310          23 :   lcpomap["SER_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9311          23 :   lcpomap["SER_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9312          23 :   lcpomap["SER_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9313          23 :   lcpomap["SER_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9314          23 :   lcpomap["SER_OG"] = { 1.6,  0.77914,  -0.25262,  -0.0016056,  0.00035071};
    9315          23 :   lcpomap["SER_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9316          23 :   lcpomap["SER_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9317          23 :   lcpomap["SER_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9318          23 :   lcpomap["SER_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9319          23 :   lcpomap["SER_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9320             : 
    9321          23 :   lcpomap["THR_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9322          23 :   lcpomap["THR_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9323          23 :   lcpomap["THR_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9324          23 :   lcpomap["THR_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9325          23 :   lcpomap["THR_CB"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9326          23 :   lcpomap["THR_CG2"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9327          23 :   lcpomap["THR_OG1"] = { 1.6,  0.77914,  -0.25262,  -0.0016056,  0.00035071};
    9328          23 :   lcpomap["THR_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9329          23 :   lcpomap["THR_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9330          23 :   lcpomap["THR_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9331          23 :   lcpomap["THR_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9332          23 :   lcpomap["THR_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9333             : 
    9334          23 :   lcpomap["TRP_N"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9335          23 :   lcpomap["TRP_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9336          23 :   lcpomap["TRP_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9337          23 :   lcpomap["TRP_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9338          23 :   lcpomap["TRP_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9339          23 :   lcpomap["TRP_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9340          23 :   lcpomap["TRP_CD1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9341          23 :   lcpomap["TRP_NE1"] = { 1.65,  0.41102,  -0.12254,  -7.5448e-05,  0.00011804};
    9342          23 :   lcpomap["TRP_CE2"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9343          23 :   lcpomap["TRP_CZ2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9344          23 :   lcpomap["TRP_CH2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9345          23 :   lcpomap["TRP_CZ3"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9346          23 :   lcpomap["TRP_CE3"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9347          23 :   lcpomap["TRP_CD2"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9348          23 :   lcpomap["TRP_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9349          23 :   lcpomap["TRP_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9350          23 :   lcpomap["TRP_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9351          23 :   lcpomap["TRP_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9352          23 :   lcpomap["TRP_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9353             : 
    9354          23 :   lcpomap["TYR_N"] = { 1.65,  0.062577,  -0.017874,  -8.312e-05,  1.9849e-05};
    9355          23 :   lcpomap["TYR_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9356          23 :   lcpomap["TYR_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9357          23 :   lcpomap["TYR_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9358          23 :   lcpomap["TYR_CB"] = { 1.7,  0.56482,  -0.19608,  -0.0010219,  0.0002658};
    9359          23 :   lcpomap["TYR_CG"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9360          23 :   lcpomap["TYR_CD1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9361          23 :   lcpomap["TYR_CE1"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9362          23 :   lcpomap["TYR_CZ"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9363          23 :   lcpomap["TYR_OH"] = { 1.6,  0.77914,  -0.25262,  -0.0016056,  0.00035071};
    9364          23 :   lcpomap["TYR_CE2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9365          23 :   lcpomap["TYR_CD2"] = { 1.7,  0.51245,  -0.15966,  -0.00019781,  0.00016392};
    9366          23 :   lcpomap["TYR_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9367          23 :   lcpomap["TYR_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9368          23 :   lcpomap["TYR_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9369          23 :   lcpomap["TYR_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9370          23 :   lcpomap["TYR_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9371             : 
    9372          23 :   lcpomap["VAL_N"] = { 1.65,  0.062577,  -0.017874,  -8.312e-05,  1.9849e-05};
    9373          23 :   lcpomap["VAL_CA"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9374          23 :   lcpomap["VAL_C"] = { 1.7,  0.070344,  -0.019015,  -2.2009e-05,  1.6875e-05};
    9375          23 :   lcpomap["VAL_O"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9376          23 :   lcpomap["VAL_CB"] = { 1.7,  0.23348,  -0.072627,  -0.00020079,  7.967e-05};
    9377          23 :   lcpomap["VAL_CG1"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9378          23 :   lcpomap["VAL_CG2"] = { 1.7,  0.77887,  -0.28063,  -0.0012968,  0.00039328};
    9379          23 :   lcpomap["VAL_OC1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9380          23 :   lcpomap["VAL_OC2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9381          23 :   lcpomap["VAL_OT1"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9382          23 :   lcpomap["VAL_OT2"] = { 1.6,  0.68563,  -0.1868,  -0.00135573,  0.00023743};
    9383          23 :   lcpomap["VAL_OXT"] = { 1.6,  0.88857,  -0.33421,  -0.0018683,  0.00049372};
    9384             : 
    9385             :   // nucleic acids - WARNING: ONLY AMBER (OL3-rna/OL15-dna) FORMAT
    9386             : 
    9387          23 :   lcpomap["A3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9388          23 :   lcpomap["A3_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9389          23 :   lcpomap["A3_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9390          23 :   lcpomap["A3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9391          23 :   lcpomap["A3_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9392          23 :   lcpomap["A3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9393          23 :   lcpomap["A3_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9394          23 :   lcpomap["A3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9395          23 :   lcpomap["A3_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9396          23 :   lcpomap["A3_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9397          23 :   lcpomap["A3_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9398          23 :   lcpomap["A3_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9399          23 :   lcpomap["A3_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9400          23 :   lcpomap["A3_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9401          23 :   lcpomap["A3_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9402          23 :   lcpomap["A3_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9403          23 :   lcpomap["A3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9404          23 :   lcpomap["A3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9405          23 :   lcpomap["A3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9406          23 :   lcpomap["A3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9407          23 :   lcpomap["A3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9408          23 :   lcpomap["A3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9409          23 :   lcpomap["A3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9410          23 :   lcpomap["A3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9411          23 :   lcpomap["A3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9412          23 :   lcpomap["A3_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9413             : 
    9414          23 :   lcpomap["A5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9415          23 :   lcpomap["A5_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9416          23 :   lcpomap["A5_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9417          23 :   lcpomap["A5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9418          23 :   lcpomap["A5_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9419          23 :   lcpomap["A5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9420          23 :   lcpomap["A5_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9421          23 :   lcpomap["A5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9422          23 :   lcpomap["A5_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9423          23 :   lcpomap["A5_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9424          23 :   lcpomap["A5_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9425          23 :   lcpomap["A5_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9426          23 :   lcpomap["A5_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9427          23 :   lcpomap["A5_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9428          23 :   lcpomap["A5_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9429          23 :   lcpomap["A5_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9430          23 :   lcpomap["A5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9431          23 :   lcpomap["A5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9432          23 :   lcpomap["A5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9433          23 :   lcpomap["A5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9434          23 :   lcpomap["A5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9435          23 :   lcpomap["A5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9436          23 :   lcpomap["A5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9437          23 :   lcpomap["A5_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9438             : 
    9439          23 :   lcpomap["AT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9440          23 :   lcpomap["AT_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9441          23 :   lcpomap["AT_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9442          23 :   lcpomap["AT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9443          23 :   lcpomap["AT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9444          23 :   lcpomap["AT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9445          23 :   lcpomap["AT_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9446          23 :   lcpomap["AT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9447          23 :   lcpomap["AT_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9448          23 :   lcpomap["AT_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9449          23 :   lcpomap["AT_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9450          23 :   lcpomap["AT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9451          23 :   lcpomap["AT_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9452          23 :   lcpomap["AT_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9453          23 :   lcpomap["AT_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9454          23 :   lcpomap["AT_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9455          23 :   lcpomap["AT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9456          23 :   lcpomap["AT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9457          23 :   lcpomap["AT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9458          23 :   lcpomap["AT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9459          23 :   lcpomap["AT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9460          23 :   lcpomap["AT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9461          23 :   lcpomap["AT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9462          23 :   lcpomap["AT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9463          23 :   lcpomap["AT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9464          23 :   lcpomap["AT_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9465             : 
    9466          23 :   lcpomap["A_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9467          23 :   lcpomap["A_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9468          23 :   lcpomap["A_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9469          23 :   lcpomap["A_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9470          23 :   lcpomap["A_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9471          23 :   lcpomap["A_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9472          23 :   lcpomap["A_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9473          23 :   lcpomap["A_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9474          23 :   lcpomap["A_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9475          23 :   lcpomap["A_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9476          23 :   lcpomap["A_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9477          23 :   lcpomap["A_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9478          23 :   lcpomap["A_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9479          23 :   lcpomap["A_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9480          23 :   lcpomap["A_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9481          23 :   lcpomap["A_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9482          23 :   lcpomap["A_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9483          23 :   lcpomap["A_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9484          23 :   lcpomap["A_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9485          23 :   lcpomap["A_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9486          23 :   lcpomap["A_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9487          23 :   lcpomap["A_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9488          23 :   lcpomap["A_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9489          23 :   lcpomap["A_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9490          23 :   lcpomap["A_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9491          23 :   lcpomap["A_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9492             : 
    9493          23 :   lcpomap["C3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9494          23 :   lcpomap["C3_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9495          23 :   lcpomap["C3_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9496          23 :   lcpomap["C3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9497          23 :   lcpomap["C3_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9498          23 :   lcpomap["C3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9499          23 :   lcpomap["C3_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9500          23 :   lcpomap["C3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9501          23 :   lcpomap["C3_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9502          23 :   lcpomap["C3_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9503          23 :   lcpomap["C3_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9504          23 :   lcpomap["C3_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9505          23 :   lcpomap["C3_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9506          23 :   lcpomap["C3_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9507          23 :   lcpomap["C3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9508          23 :   lcpomap["C3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9509          23 :   lcpomap["C3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9510          23 :   lcpomap["C3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9511          23 :   lcpomap["C3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9512          23 :   lcpomap["C3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9513          23 :   lcpomap["C3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9514          23 :   lcpomap["C3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9515          23 :   lcpomap["C3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9516          23 :   lcpomap["C3_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9517             : 
    9518          23 :   lcpomap["C5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9519          23 :   lcpomap["C5_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9520          23 :   lcpomap["C5_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9521          23 :   lcpomap["C5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9522          23 :   lcpomap["C5_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9523          23 :   lcpomap["C5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9524          23 :   lcpomap["C5_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9525          23 :   lcpomap["C5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9526          23 :   lcpomap["C5_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9527          23 :   lcpomap["C5_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9528          23 :   lcpomap["C5_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9529          23 :   lcpomap["C5_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9530          23 :   lcpomap["C5_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9531          23 :   lcpomap["C5_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9532          23 :   lcpomap["C5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9533          23 :   lcpomap["C5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9534          23 :   lcpomap["C5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9535          23 :   lcpomap["C5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9536          23 :   lcpomap["C5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9537          23 :   lcpomap["C5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9538          23 :   lcpomap["C5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9539          23 :   lcpomap["C5_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9540             : 
    9541          23 :   lcpomap["CT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9542          23 :   lcpomap["CT_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9543          23 :   lcpomap["CT_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9544          23 :   lcpomap["CT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9545          23 :   lcpomap["CT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9546          23 :   lcpomap["CT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9547          23 :   lcpomap["CT_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9548          23 :   lcpomap["CT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9549          23 :   lcpomap["CT_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9550          23 :   lcpomap["CT_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9551          23 :   lcpomap["CT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9552          23 :   lcpomap["CT_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9553          23 :   lcpomap["CT_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9554          23 :   lcpomap["CT_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9555          23 :   lcpomap["CT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9556          23 :   lcpomap["CT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9557          23 :   lcpomap["CT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9558          23 :   lcpomap["CT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9559          23 :   lcpomap["CT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9560          23 :   lcpomap["CT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9561          23 :   lcpomap["CT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9562          23 :   lcpomap["CT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9563          23 :   lcpomap["CT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9564          23 :   lcpomap["CT_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9565             : 
    9566          23 :   lcpomap["C_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9567          23 :   lcpomap["C_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9568          23 :   lcpomap["C_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9569          23 :   lcpomap["C_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9570          23 :   lcpomap["C_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9571          23 :   lcpomap["C_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9572          23 :   lcpomap["C_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9573          23 :   lcpomap["C_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9574          23 :   lcpomap["C_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9575          23 :   lcpomap["C_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9576          23 :   lcpomap["C_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9577          23 :   lcpomap["C_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9578          23 :   lcpomap["C_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9579          23 :   lcpomap["C_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9580          23 :   lcpomap["C_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9581          23 :   lcpomap["C_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9582          23 :   lcpomap["C_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9583          23 :   lcpomap["C_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9584          23 :   lcpomap["C_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9585          23 :   lcpomap["C_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9586          23 :   lcpomap["C_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9587          23 :   lcpomap["C_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9588          23 :   lcpomap["C_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9589          23 :   lcpomap["C_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9590             : 
    9591          23 :   lcpomap["DA3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9592          23 :   lcpomap["DA3_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9593          23 :   lcpomap["DA3_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9594          23 :   lcpomap["DA3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9595          23 :   lcpomap["DA3_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9596          23 :   lcpomap["DA3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9597          23 :   lcpomap["DA3_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9598          23 :   lcpomap["DA3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9599          23 :   lcpomap["DA3_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9600          23 :   lcpomap["DA3_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9601          23 :   lcpomap["DA3_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9602          23 :   lcpomap["DA3_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9603          23 :   lcpomap["DA3_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9604          23 :   lcpomap["DA3_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9605          23 :   lcpomap["DA3_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9606          23 :   lcpomap["DA3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9607          23 :   lcpomap["DA3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9608          23 :   lcpomap["DA3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9609          23 :   lcpomap["DA3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9610          23 :   lcpomap["DA3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9611          23 :   lcpomap["DA3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9612          23 :   lcpomap["DA3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9613          23 :   lcpomap["DA3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9614          23 :   lcpomap["DA3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9615          23 :   lcpomap["DA3_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9616             : 
    9617          23 :   lcpomap["DA5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9618          23 :   lcpomap["DA5_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9619          23 :   lcpomap["DA5_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9620          23 :   lcpomap["DA5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9621          23 :   lcpomap["DA5_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9622          23 :   lcpomap["DA5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9623          23 :   lcpomap["DA5_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9624          23 :   lcpomap["DA5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9625          23 :   lcpomap["DA5_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9626          23 :   lcpomap["DA5_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9627          23 :   lcpomap["DA5_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9628          23 :   lcpomap["DA5_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9629          23 :   lcpomap["DA5_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9630          23 :   lcpomap["DA5_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9631          23 :   lcpomap["DA5_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9632          23 :   lcpomap["DA5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9633          23 :   lcpomap["DA5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9634          23 :   lcpomap["DA5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9635          23 :   lcpomap["DA5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9636          23 :   lcpomap["DA5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9637          23 :   lcpomap["DA5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9638          23 :   lcpomap["DA5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9639          23 :   lcpomap["DA5_P"]   = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9640             : 
    9641          23 :   lcpomap["DAT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9642          23 :   lcpomap["DAT_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9643          23 :   lcpomap["DAT_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9644          23 :   lcpomap["DAT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9645          23 :   lcpomap["DAT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9646          23 :   lcpomap["DAT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9647          23 :   lcpomap["DAT_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9648          23 :   lcpomap["DAT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9649          23 :   lcpomap["DAT_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9650          23 :   lcpomap["DAT_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9651          23 :   lcpomap["DAT_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9652          23 :   lcpomap["DAT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9653          23 :   lcpomap["DAT_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9654          23 :   lcpomap["DAT_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9655          23 :   lcpomap["DAT_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9656          23 :   lcpomap["DAT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9657          23 :   lcpomap["DAT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9658          23 :   lcpomap["DAT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9659          23 :   lcpomap["DAT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9660          23 :   lcpomap["DAT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9661          23 :   lcpomap["DAT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9662          23 :   lcpomap["DAT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9663          23 :   lcpomap["DAT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9664          23 :   lcpomap["DAT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9665          23 :   lcpomap["DAT_P"]   = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9666             : 
    9667          23 :   lcpomap["DA_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9668          23 :   lcpomap["DA_C2"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9669          23 :   lcpomap["DA_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9670          23 :   lcpomap["DA_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9671          23 :   lcpomap["DA_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9672          23 :   lcpomap["DA_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9673          23 :   lcpomap["DA_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9674          23 :   lcpomap["DA_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9675          23 :   lcpomap["DA_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9676          23 :   lcpomap["DA_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9677          23 :   lcpomap["DA_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9678          23 :   lcpomap["DA_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9679          23 :   lcpomap["DA_N6"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9680          23 :   lcpomap["DA_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9681          23 :   lcpomap["DA_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9682          23 :   lcpomap["DA_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9683          23 :   lcpomap["DA_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9684          23 :   lcpomap["DA_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9685          23 :   lcpomap["DA_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9686          23 :   lcpomap["DA_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9687          23 :   lcpomap["DA_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9688          23 :   lcpomap["DA_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9689          23 :   lcpomap["DA_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9690          23 :   lcpomap["DA_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9691          23 :   lcpomap["DA_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9692             : 
    9693          23 :   lcpomap["DC3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9694          23 :   lcpomap["DC3_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9695          23 :   lcpomap["DC3_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9696          23 :   lcpomap["DC3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9697          23 :   lcpomap["DC3_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9698          23 :   lcpomap["DC3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9699          23 :   lcpomap["DC3_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9700          23 :   lcpomap["DC3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9701          23 :   lcpomap["DC3_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9702          23 :   lcpomap["DC3_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9703          23 :   lcpomap["DC3_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9704          23 :   lcpomap["DC3_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9705          23 :   lcpomap["DC3_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9706          23 :   lcpomap["DC3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9707          23 :   lcpomap["DC3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9708          23 :   lcpomap["DC3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9709          23 :   lcpomap["DC3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9710          23 :   lcpomap["DC3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9711          23 :   lcpomap["DC3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9712          23 :   lcpomap["DC3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9713          23 :   lcpomap["DC3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9714          23 :   lcpomap["DC3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9715          23 :   lcpomap["DC3_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9716             : 
    9717          23 :   lcpomap["DC5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9718          23 :   lcpomap["DC5_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9719          23 :   lcpomap["DC5_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9720          23 :   lcpomap["DC5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9721          23 :   lcpomap["DC5_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9722          23 :   lcpomap["DC5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9723          23 :   lcpomap["DC5_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9724          23 :   lcpomap["DC5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9725          23 :   lcpomap["DC5_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9726          23 :   lcpomap["DC5_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9727          23 :   lcpomap["DC5_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9728          23 :   lcpomap["DC5_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9729          23 :   lcpomap["DC5_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9730          23 :   lcpomap["DC5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9731          23 :   lcpomap["DC5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9732          23 :   lcpomap["DC5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9733          23 :   lcpomap["DC5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9734          23 :   lcpomap["DC5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9735          23 :   lcpomap["DC5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9736          23 :   lcpomap["DC5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9737          23 :   lcpomap["DC5_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9738             : 
    9739          23 :   lcpomap["DCT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9740          23 :   lcpomap["DCT_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05};
    9741          23 :   lcpomap["DCT_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9742          23 :   lcpomap["DCT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9743          23 :   lcpomap["DCT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05};
    9744          23 :   lcpomap["DCT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9745          23 :   lcpomap["DCT_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9746          23 :   lcpomap["DCT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9747          23 :   lcpomap["DCT_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9748          23 :   lcpomap["DCT_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05};
    9749          23 :   lcpomap["DCT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9750          23 :   lcpomap["DCT_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9751          23 :   lcpomap["DCT_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9752          23 :   lcpomap["DCT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9753          23 :   lcpomap["DCT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9754          23 :   lcpomap["DCT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9755          23 :   lcpomap["DCT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9756          23 :   lcpomap["DCT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9757          23 :   lcpomap["DCT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9758          23 :   lcpomap["DCT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9759          23 :   lcpomap["DCT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9760          23 :   lcpomap["DCT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9761          23 :   lcpomap["DCT_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9762             : 
    9763          23 :   lcpomap["DC_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9764          23 :   lcpomap["DC_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9765          23 :   lcpomap["DC_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9766          23 :   lcpomap["DC_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9767          23 :   lcpomap["DC_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9768          23 :   lcpomap["DC_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9769          23 :   lcpomap["DC_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9770          23 :   lcpomap["DC_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9771          23 :   lcpomap["DC_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9772          23 :   lcpomap["DC_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9773          23 :   lcpomap["DC_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9774          23 :   lcpomap["DC_N4"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9775          23 :   lcpomap["DC_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9776          23 :   lcpomap["DC_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9777          23 :   lcpomap["DC_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9778          23 :   lcpomap["DC_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9779          23 :   lcpomap["DC_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9780          23 :   lcpomap["DC_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9781          23 :   lcpomap["DC_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9782          23 :   lcpomap["DC_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9783          23 :   lcpomap["DC_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9784          23 :   lcpomap["DC_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9785          23 :   lcpomap["DC_P"]   = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9786             : 
    9787          23 :   lcpomap["DG3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9788          23 :   lcpomap["DG3_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9789          23 :   lcpomap["DG3_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9790          23 :   lcpomap["DG3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9791          23 :   lcpomap["DG3_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9792          23 :   lcpomap["DG3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9793          23 :   lcpomap["DG3_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9794          23 :   lcpomap["DG3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9795          23 :   lcpomap["DG3_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9796          23 :   lcpomap["DG3_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9797          23 :   lcpomap["DG3_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9798          23 :   lcpomap["DG3_N2"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9799          23 :   lcpomap["DG3_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9800          23 :   lcpomap["DG3_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9801          23 :   lcpomap["DG3_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9802          23 :   lcpomap["DG3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9803          23 :   lcpomap["DG3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9804          23 :   lcpomap["DG3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9805          23 :   lcpomap["DG3_O6"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9806          23 :   lcpomap["DG3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9807          23 :   lcpomap["DG3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9808          23 :   lcpomap["DG3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9809          23 :   lcpomap["DG3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9810          23 :   lcpomap["DG3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9811          23 :   lcpomap["DG3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9812          23 :   lcpomap["DG3_P"]   = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9813             : 
    9814          23 :   lcpomap["DG5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9815          23 :   lcpomap["DG5_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9816          23 :   lcpomap["DG5_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9817          23 :   lcpomap["DG5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9818          23 :   lcpomap["DG5_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9819          23 :   lcpomap["DG5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9820          23 :   lcpomap["DG5_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9821          23 :   lcpomap["DG5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9822          23 :   lcpomap["DG5_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9823          23 :   lcpomap["DG5_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9824          23 :   lcpomap["DG5_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9825          23 :   lcpomap["DG5_N2"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9826          23 :   lcpomap["DG5_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9827          23 :   lcpomap["DG5_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9828          23 :   lcpomap["DG5_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9829          23 :   lcpomap["DG5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9830          23 :   lcpomap["DG5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9831          23 :   lcpomap["DG5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9832          23 :   lcpomap["DG5_O6"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9833          23 :   lcpomap["DG5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9834          23 :   lcpomap["DG5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9835          23 :   lcpomap["DG5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9836          23 :   lcpomap["DG5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9837          23 :   lcpomap["DG5_P"]   = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9838             : 
    9839          23 :   lcpomap["DGT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9840          23 :   lcpomap["DGT_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9841          23 :   lcpomap["DGT_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9842          23 :   lcpomap["DGT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9843          23 :   lcpomap["DGT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9844          23 :   lcpomap["DGT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9845          23 :   lcpomap["DGT_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9846          23 :   lcpomap["DGT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9847          23 :   lcpomap["DGT_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9848          23 :   lcpomap["DGT_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9849          23 :   lcpomap["DGT_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9850          23 :   lcpomap["DGT_N2"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9851          23 :   lcpomap["DGT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9852          23 :   lcpomap["DGT_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9853          23 :   lcpomap["DGT_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9854          23 :   lcpomap["DGT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9855          23 :   lcpomap["DGT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9856          23 :   lcpomap["DGT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9857          23 :   lcpomap["DGT_O6"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9858          23 :   lcpomap["DGT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9859          23 :   lcpomap["DGT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9860          23 :   lcpomap["DGT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9861          23 :   lcpomap["DGT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9862          23 :   lcpomap["DGT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9863          23 :   lcpomap["DGT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9864          23 :   lcpomap["DGT_P"]   = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9865             : 
    9866          23 :   lcpomap["DG_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9867          23 :   lcpomap["DG_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9868          23 :   lcpomap["DG_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9869          23 :   lcpomap["DG_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9870          23 :   lcpomap["DG_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9871          23 :   lcpomap["DG_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9872          23 :   lcpomap["DG_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9873          23 :   lcpomap["DG_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9874          23 :   lcpomap["DG_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9875          23 :   lcpomap["DG_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9876          23 :   lcpomap["DG_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9877          23 :   lcpomap["DG_N2"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
    9878          23 :   lcpomap["DG_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9879          23 :   lcpomap["DG_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9880          23 :   lcpomap["DG_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9881          23 :   lcpomap["DG_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9882          23 :   lcpomap["DG_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9883          23 :   lcpomap["DG_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9884          23 :   lcpomap["DG_O6"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9885          23 :   lcpomap["DG_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9886          23 :   lcpomap["DG_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9887          23 :   lcpomap["DG_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9888          23 :   lcpomap["DG_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9889          23 :   lcpomap["DG_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9890          23 :   lcpomap["DG_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9891          23 :   lcpomap["DG_P"]   = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9892             : 
    9893          23 :   lcpomap["DT3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9894          23 :   lcpomap["DT3_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9895          23 :   lcpomap["DT3_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9896          23 :   lcpomap["DT3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9897          23 :   lcpomap["DT3_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9898          23 :   lcpomap["DT3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9899          23 :   lcpomap["DT3_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9900          23 :   lcpomap["DT3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9901          23 :   lcpomap["DT3_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9902          23 :   lcpomap["DT3_C7"]  = { 1.7,  0.77887, -0.28063, -1.2968e-03, 3.9328e-04 };
    9903          23 :   lcpomap["DT3_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9904          23 :   lcpomap["DT3_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9905          23 :   lcpomap["DT3_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9906          23 :   lcpomap["DT3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9907          23 :   lcpomap["DT3_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9908          23 :   lcpomap["DT3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9909          23 :   lcpomap["DT3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9910          23 :   lcpomap["DT3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9911          23 :   lcpomap["DT3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9912          23 :   lcpomap["DT3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9913          23 :   lcpomap["DT3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9914          23 :   lcpomap["DT3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9915          23 :   lcpomap["DT3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9916          23 :   lcpomap["DT3_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9917             : 
    9918          23 :   lcpomap["DT5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9919          23 :   lcpomap["DT5_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9920          23 :   lcpomap["DT5_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9921          23 :   lcpomap["DT5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9922          23 :   lcpomap["DT5_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9923          23 :   lcpomap["DT5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9924          23 :   lcpomap["DT5_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9925          23 :   lcpomap["DT5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9926          23 :   lcpomap["DT5_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9927          23 :   lcpomap["DT5_C7"]  = { 1.7,  0.77887, -0.28063, -1.2968e-03, 3.9328e-04 };
    9928          23 :   lcpomap["DT5_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9929          23 :   lcpomap["DT5_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9930          23 :   lcpomap["DT5_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9931          23 :   lcpomap["DT5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9932          23 :   lcpomap["DT5_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9933          23 :   lcpomap["DT5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9934          23 :   lcpomap["DT5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9935          23 :   lcpomap["DT5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9936          23 :   lcpomap["DT5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9937          23 :   lcpomap["DT5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9938          23 :   lcpomap["DT5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9939          23 :   lcpomap["DT5_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9940             : 
    9941          23 :   lcpomap["DTT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9942          23 :   lcpomap["DTT_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9943          23 :   lcpomap["DTT_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9944          23 :   lcpomap["DTT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9945          23 :   lcpomap["DTT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9946          23 :   lcpomap["DTT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9947          23 :   lcpomap["DTT_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9948          23 :   lcpomap["DTT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9949          23 :   lcpomap["DTT_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9950          23 :   lcpomap["DTT_C7"]  = { 1.7,  0.77887, -0.28063, -1.2968e-03, 3.9328e-04 };
    9951          23 :   lcpomap["DTT_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9952          23 :   lcpomap["DTT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9953          23 :   lcpomap["DTT_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9954          23 :   lcpomap["DTT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9955          23 :   lcpomap["DTT_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9956          23 :   lcpomap["DTT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9957          23 :   lcpomap["DTT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9958          23 :   lcpomap["DTT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9959          23 :   lcpomap["DTT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9960          23 :   lcpomap["DTT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9961          23 :   lcpomap["DTT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9962          23 :   lcpomap["DTT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9963          23 :   lcpomap["DTT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9964          23 :   lcpomap["DTT_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9965             : 
    9966          23 :   lcpomap["DT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9967          23 :   lcpomap["DT_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9968          23 :   lcpomap["DT_C2'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9969          23 :   lcpomap["DT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9970          23 :   lcpomap["DT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9971          23 :   lcpomap["DT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9972          23 :   lcpomap["DT_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9973          23 :   lcpomap["DT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9974          23 :   lcpomap["DT_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
    9975          23 :   lcpomap["DT_C7"]  = { 1.7,  0.77887, -0.28063, -1.2968e-03, 3.9328e-04 };
    9976          23 :   lcpomap["DT_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
    9977          23 :   lcpomap["DT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
    9978          23 :   lcpomap["DT_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9979          23 :   lcpomap["DT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9980          23 :   lcpomap["DT_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
    9981          23 :   lcpomap["DT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9982          23 :   lcpomap["DT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
    9983          23 :   lcpomap["DT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9984          23 :   lcpomap["DT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9985          23 :   lcpomap["DT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9986          23 :   lcpomap["DT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
    9987          23 :   lcpomap["DT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9988          23 :   lcpomap["DT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
    9989          23 :   lcpomap["DT_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
    9990             : 
    9991          23 :   lcpomap["G3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9992          23 :   lcpomap["G3_C2"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9993          23 :   lcpomap["G3_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9994          23 :   lcpomap["G3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9995          23 :   lcpomap["G3_C4"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9996          23 :   lcpomap["G3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
    9997          23 :   lcpomap["G3_C5"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
    9998          23 :   lcpomap["G3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
    9999          23 :   lcpomap["G3_C6"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10000          23 :   lcpomap["G3_C8"] = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10001          23 :   lcpomap["G3_N1"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10002          23 :   lcpomap["G3_N2"] = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
   10003          23 :   lcpomap["G3_N3"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10004          23 :   lcpomap["G3_N7"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10005          23 :   lcpomap["G3_N9"] = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10006          23 :   lcpomap["G3_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10007          23 :   lcpomap["G3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10008          23 :   lcpomap["G3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10009          23 :   lcpomap["G3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10010          23 :   lcpomap["G3_O6"] = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10011          23 :   lcpomap["G3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10012          23 :   lcpomap["G3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10013          23 :   lcpomap["G3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10014          23 :   lcpomap["G3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10015          23 :   lcpomap["G3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10016          23 :   lcpomap["G3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10017          23 :   lcpomap["G3_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10018             : 
   10019          23 :   lcpomap["G5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10020          23 :   lcpomap["G5_C2"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10021          23 :   lcpomap["G5_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10022          23 :   lcpomap["G5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10023          23 :   lcpomap["G5_C4"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10024          23 :   lcpomap["G5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10025          23 :   lcpomap["G5_C5"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10026          23 :   lcpomap["G5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
   10027          23 :   lcpomap["G5_C6"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10028          23 :   lcpomap["G5_C8"] = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10029          23 :   lcpomap["G5_N1"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10030          23 :   lcpomap["G5_N2"] = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
   10031          23 :   lcpomap["G5_N3"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10032          23 :   lcpomap["G5_N7"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10033          23 :   lcpomap["G5_N9"] = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10034          23 :   lcpomap["G5_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10035          23 :   lcpomap["G5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10036          23 :   lcpomap["G5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10037          23 :   lcpomap["G5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10038          23 :   lcpomap["G5_O6"] = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10039          23 :   lcpomap["G5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10040          23 :   lcpomap["G5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10041          23 :   lcpomap["G5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10042          23 :   lcpomap["G5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10043          23 :   lcpomap["G5_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10044             : 
   10045          23 :   lcpomap["GT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10046          23 :   lcpomap["GT_C2"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10047          23 :   lcpomap["GT_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10048          23 :   lcpomap["GT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10049          23 :   lcpomap["GT_C4"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10050          23 :   lcpomap["GT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10051          23 :   lcpomap["GT_C5"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10052          23 :   lcpomap["GT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
   10053          23 :   lcpomap["GT_C6"] = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10054          23 :   lcpomap["GT_C8"] = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10055          23 :   lcpomap["GT_N1"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10056          23 :   lcpomap["GT_N2"] = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
   10057          23 :   lcpomap["GT_N3"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10058          23 :   lcpomap["GT_N7"] = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10059          23 :   lcpomap["GT_N9"] = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10060          23 :   lcpomap["GT_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10061          23 :   lcpomap["GT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10062          23 :   lcpomap["GT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10063          23 :   lcpomap["GT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10064          23 :   lcpomap["GT_O6"] = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10065          23 :   lcpomap["GT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10066          23 :   lcpomap["GT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10067          23 :   lcpomap["GT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10068          23 :   lcpomap["GT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10069          23 :   lcpomap["GT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10070          23 :   lcpomap["GT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10071          23 :   lcpomap["GT_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10072             : 
   10073          23 :   lcpomap["G_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10074          23 :   lcpomap["G_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10075          23 :   lcpomap["G_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10076          23 :   lcpomap["G_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10077          23 :   lcpomap["G_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10078          23 :   lcpomap["G_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10079          23 :   lcpomap["G_C5"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10080          23 :   lcpomap["G_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
   10081          23 :   lcpomap["G_C6"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10082          23 :   lcpomap["G_C8"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10083          23 :   lcpomap["G_N1"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10084          23 :   lcpomap["G_N2"]  = { 1.65,  0.73511, -0.22116, -8.9148e-04, 2.523e-04 };
   10085          23 :   lcpomap["G_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10086          23 :   lcpomap["G_N7"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10087          23 :   lcpomap["G_N9"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10088          23 :   lcpomap["G_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10089          23 :   lcpomap["G_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10090          23 :   lcpomap["G_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10091          23 :   lcpomap["G_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10092          23 :   lcpomap["G_O6"] = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10093          23 :   lcpomap["G_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10094          23 :   lcpomap["G_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10095          23 :   lcpomap["G_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10096          23 :   lcpomap["G_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10097          23 :   lcpomap["G_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10098          23 :   lcpomap["G_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10099          23 :   lcpomap["G_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10100             : 
   10101          23 :   lcpomap["U3_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10102          23 :   lcpomap["U3_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10103          23 :   lcpomap["U3_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10104          23 :   lcpomap["U3_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10105          23 :   lcpomap["U3_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10106          23 :   lcpomap["U3_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10107          23 :   lcpomap["U3_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10108          23 :   lcpomap["U3_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
   10109          23 :   lcpomap["U3_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10110          23 :   lcpomap["U3_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10111          23 :   lcpomap["U3_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10112          23 :   lcpomap["U3_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10113          23 :   lcpomap["U3_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10114          23 :   lcpomap["U3_O3'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10115          23 :   lcpomap["U3_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10116          23 :   lcpomap["U3_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10117          23 :   lcpomap["U3_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10118          23 :   lcpomap["U3_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10119          23 :   lcpomap["U3_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10120          23 :   lcpomap["U3_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10121          23 :   lcpomap["U3_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10122          23 :   lcpomap["U3_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10123          23 :   lcpomap["U3_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10124          23 :   lcpomap["U3_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10125             : 
   10126          23 :   lcpomap["U5_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10127          23 :   lcpomap["U5_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10128          23 :   lcpomap["U5_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10129          23 :   lcpomap["U5_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10130          23 :   lcpomap["U5_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10131          23 :   lcpomap["U5_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10132          23 :   lcpomap["U5_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10133          23 :   lcpomap["U5_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
   10134          23 :   lcpomap["U5_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10135          23 :   lcpomap["U5_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10136          23 :   lcpomap["U5_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10137          23 :   lcpomap["U5_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10138          23 :   lcpomap["U5_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10139          23 :   lcpomap["U5_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10140          23 :   lcpomap["U5_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10141          23 :   lcpomap["U5_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10142          23 :   lcpomap["U5_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10143          23 :   lcpomap["U5_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10144          23 :   lcpomap["U5_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10145          23 :   lcpomap["U5_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10146          23 :   lcpomap["U5_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10147          23 :   lcpomap["U5_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10148             : 
   10149          23 :   lcpomap["UT_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10150          23 :   lcpomap["UT_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10151          23 :   lcpomap["UT_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10152          23 :   lcpomap["UT_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10153          23 :   lcpomap["UT_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10154          23 :   lcpomap["UT_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10155          23 :   lcpomap["UT_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10156          23 :   lcpomap["UT_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
   10157          23 :   lcpomap["UT_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10158          23 :   lcpomap["UT_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10159          23 :   lcpomap["UT_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10160          23 :   lcpomap["UT_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10161          23 :   lcpomap["UT_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10162          23 :   lcpomap["UT_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10163          23 :   lcpomap["UT_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10164          23 :   lcpomap["UT_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10165          23 :   lcpomap["UT_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10166          23 :   lcpomap["UT_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10167          23 :   lcpomap["UT_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10168          23 :   lcpomap["UT_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10169          23 :   lcpomap["UT_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10170          23 :   lcpomap["UT_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10171          23 :   lcpomap["UT_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10172          23 :   lcpomap["UT_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10173             : 
   10174          23 :   lcpomap["U_C1'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10175          23 :   lcpomap["U_C2"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10176          23 :   lcpomap["U_C2'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10177          23 :   lcpomap["U_C3'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10178          23 :   lcpomap["U_C4"]  = { 1.7,  0.070344, -0.019015, -2.2009e-05, 1.6875e-05 };
   10179          23 :   lcpomap["U_C4'"] = { 1.7,  0.23348, -0.072627, -2.0079e-04, 7.967e-05 };
   10180          23 :   lcpomap["U_C5"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10181          23 :   lcpomap["U_C5'"] = { 1.7,  0.56482, -0.19608, -1.0219e-03, 2.658e-04 };
   10182          23 :   lcpomap["U_C6"]  = { 1.7,  0.51245, -0.15966, -1.9781e-04, 1.6392e-04 };
   10183          23 :   lcpomap["U_N1"]  = { 1.65,  0.062577, -0.017874, -8.312e-05, 1.9849e-05 };
   10184          23 :   lcpomap["U_N3"]  = { 1.65,  0.41102, -0.12254, -7.5448e-05, 1.1804e-04 };
   10185          23 :   lcpomap["U_O2"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10186          23 :   lcpomap["U_O2'"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10187          23 :   lcpomap["U_O3'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10188          23 :   lcpomap["U_O4"]  = { 1.6,  0.68563, -0.1868, -1.35573e-03, 2.3743e-04 };
   10189          23 :   lcpomap["U_O4'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10190          23 :   lcpomap["U_O5'"] = { 1.6,  0.49392, -0.16038, -1.5512e-04, 1.6453e-04 };
   10191          23 :   lcpomap["U_OP1"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10192          23 :   lcpomap["U_OP2"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10193          23 :   lcpomap["U_OP3"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10194          23 :   lcpomap["U_O1P"] = { 1.6,  0.77914, -0.25262, -1.6056e-03, 3.5071e-04 };
   10195          23 :   lcpomap["U_O2P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10196          23 :   lcpomap["U_O3P"] = { 1.6,  0.88857, -0.33421, -1.8683e-03, 4.9372e-04 };
   10197          23 :   lcpomap["U_P"] = { 1.9,  0.03873,  -0.0089339, 8.3582e-06,  3.0381e-06};
   10198             : 
   10199             :   // ---------------------------------------------------------------------------
   10200             :   // Glycans.
   10201             :   //
   10202             :   // No new fitting is involved here. The LCPO atom classes of Weiser, Shenkin and
   10203             :   // Still (J. Comput. Chem. 20 (1999) 217) are selected, exactly as for the amino
   10204             :   // acids and the nucleotides above, from the element, its hybridisation and its
   10205             :   // number of bonded heavy atoms, all of which follow from the covalent structure
   10206             :   // of a pyranose. The three groups a monosaccharide is made of already appear in
   10207             :   // the table above:
   10208             :   //   - the ring is the direct analogue of the ribose (compare A_C1'-A_C4' for the
   10209             :   //     CH carbons, A_C5' for the exocyclic CH2 and A_O4' for the ring ether);
   10210             :   //   - the N-acetyl group is the ASN side-chain amide (ASN_CG, ASN_OD1, ASN_ND2),
   10211             :   //     except that the sugar amide nitrogen is secondary and therefore takes the
   10212             :   //     two-neighbour class, like a backbone N;
   10213             :   //   - the sialic-acid carboxylate is GLU_OE1/OE2.
   10214             :   //
   10215             :   // The one genuinely context-dependent case is a hydroxyl oxygen, which becomes a
   10216             :   // bridging ether when it carries a glycosidic bond. Both variants are tabulated
   10217             :   // and readLCPOparam() picks the "_L" entry for the oxygens that
   10218             :   // getOnebeadMapping() found to be two-coordinate in the TEMPLATE.
   10219             :   {
   10220          23 :     const std::vector<double> gC1 = { 1.7,  0.77887,  -0.28063,   -1.2968e-03, 3.9328e-04}; // C sp3, 1 heavy neighbour
   10221          23 :     const std::vector<double> gC2 = { 1.7,  0.56482,  -0.19608,   -1.0219e-03, 2.658e-04 }; // C sp3, 2
   10222          23 :     const std::vector<double> gC3 = { 1.7,  0.23348,  -0.072627,  -2.0079e-04, 7.967e-05 }; // C sp3, 3
   10223          23 :     const std::vector<double> gC4 = { 1.7,  0.0,       0.0,        0.0,         0.0      }; // C sp3, 4 (no accessible surface)
   10224          23 :     const std::vector<double> gCA = { 1.7,  0.070344, -0.019015,  -2.2009e-05, 1.6875e-05}; // C sp2, 3 (amide / carboxyl carbon)
   10225          23 :     const std::vector<double> gN2 = { 1.65, 0.41102,  -0.12254,   -7.5448e-05, 1.1804e-04}; // N sp2, 2 (secondary amide)
   10226          23 :     const std::vector<double> gOH = { 1.6,  0.77914,  -0.25262,   -1.6056e-03, 3.5071e-04}; // O sp3, 1 (hydroxyl, carboxylate)
   10227          23 :     const std::vector<double> gOE = { 1.6,  0.49392,  -0.16038,   -1.5512e-04, 1.6453e-04}; // O sp3, 2 (ring or glycosidic ether)
   10228          23 :     const std::vector<double> gOC = { 1.6,  0.68563,  -0.1868,    -1.35573e-03,2.3743e-04}; // O sp2, 1 (amide carbonyl)
   10229             : 
   10230             :     // aldohexopyranoses, including the N-acetylhexosamines: exocyclic C6-O6
   10231             :     const std::vector<std::string> glyc_hexo = {
   10232             :       "GLC", "BGC", "GAL", "GLA", "MAN", "BMA", "NAG", "NDG", "NGA", "A2G",
   10233             :       "AGLC", "BGLC", "AGAL", "BGAL", "AMAN", "BMAN", "AGLCNA", "BGLCNA", "AGALNA", "BGALNA"
   10234          23 :     };
   10235             :     // 6-deoxyhexopyranoses: C6 is a methyl and there is no O6
   10236             :     const std::vector<std::string> glyc_dhexo = {
   10237             :       "FUC", "FUL", "FCA", "FCB", "AFUC", "BFUC"
   10238          23 :     };
   10239             :     // N-acetylneuraminic acid
   10240          23 :     const std::vector<std::string> glyc_neu = { "SIA", "SLB", "ANE5AC", "BNE5AC" };
   10241             : 
   10242         621 :     for(unsigned s=0; s<glyc_hexo.size()+glyc_dhexo.size(); ++s) {
   10243             :       const bool deoxy = (s>=glyc_hexo.size());
   10244        1058 :       const std::string r = deoxy ? glyc_dhexo[s-glyc_hexo.size()] : glyc_hexo[s];
   10245         598 :       lcpomap[r+"_C1"] = gC3;                 // anomeric: O5, C2 and the glycosidic (or anomeric) oxygen
   10246         598 :       lcpomap[r+"_C2"] = gC3;
   10247         598 :       lcpomap[r+"_C3"] = gC3;
   10248         598 :       lcpomap[r+"_C4"] = gC3;
   10249         598 :       lcpomap[r+"_C5"] = gC3;
   10250        1058 :       lcpomap[r+"_C6"] = deoxy ? gC1 : gC2;   // methyl in a 6-deoxyhexose, CH2OH otherwise
   10251         598 :       lcpomap[r+"_O5"] = gOE;                 // ring oxygen
   10252         598 :       std::vector<std::string> oh = {"O1", "O2", "O3", "O4"};
   10253         598 :       if(!deoxy) {
   10254         920 :         oh.push_back("O6");
   10255             :       }
   10256        3450 :       for(unsigned k=0; k<oh.size(); ++k) {
   10257        5704 :         lcpomap[r+"_"+oh[k]]      = gOH;
   10258        8556 :         lcpomap[r+"_"+oh[k]+"_L"] = gOE;
   10259             :       }
   10260             :       // N-acetyl group, in the force-field (N, C, O, CT) and PDB-CCD (N2, C7, O7, C8) spellings
   10261         598 :       lcpomap[r+"_N"]  = gN2;
   10262         598 :       lcpomap[r+"_N2"] = gN2;
   10263         598 :       lcpomap[r+"_C"]  = gCA;
   10264         598 :       lcpomap[r+"_C7"] = gCA;
   10265         598 :       lcpomap[r+"_O"]  = gOC;
   10266         598 :       lcpomap[r+"_O7"] = gOC;
   10267         598 :       lcpomap[r+"_CT"] = gC1;
   10268         598 :       lcpomap[r+"_C8"] = gC1;
   10269         598 :     }
   10270             : 
   10271             :     // Glycosylation acceptors. Flagged by getOnebeadMapping() when they actually
   10272             :     // carry a glycan; the base entries above stay in force otherwise.
   10273          23 :     lcpomap["ASN_ND2_L"] = gN2;   // N-glycosylation: primary -> secondary amide
   10274          23 :     lcpomap["SER_OG_L"]  = gOE;   // O-glycosylation: hydroxyl -> ether
   10275          23 :     lcpomap["THR_OG1_L"] = gOE;
   10276          23 :     lcpomap["TYR_OH_L"]  = gOE;
   10277          23 :     lcpomap["HIS_ND1_L"] = gN2;
   10278          23 :     lcpomap["TRP_CD1_L"] = gCA;   // C-mannosylation: C sp2 2 -> C sp2 3
   10279          23 :     lcpomap["CYS_SG_L"]  = { 1.9, 0.54581, -0.19477, -0.0012873, 0.00029247}; // S-glycosylation
   10280          46 :     lcpomap["CYX_SG_L"]  = lcpomap["CYS_SG_L"];
   10281             :     // nucleic-acid acceptors (glucosylated hydroxymethyl bases and the like)
   10282          23 :     const std::vector<std::string> glyc_na = {"A", "C", "G", "U", "DA", "DC", "DG", "DT"};
   10283         207 :     for(unsigned s=0; s<glyc_na.size(); ++s) {
   10284         184 :       const std::string r = glyc_na[s];
   10285         368 :       if(lcpomap.count(r+"_O2'")>0) {
   10286         184 :         lcpomap[r+"_O2'_L"] = gOE;
   10287             :       }
   10288             :     }
   10289             : 
   10290         115 :     for(unsigned s=0; s<glyc_neu.size(); ++s) {
   10291          92 :       const std::string r = glyc_neu[s];
   10292          92 :       lcpomap[r+"_C1"]  = gCA;                // carboxylate carbon
   10293          92 :       lcpomap[r+"_C2"]  = gC4;                // quaternary anomeric carbon: C1, C3, O6 and O2
   10294          92 :       lcpomap[r+"_C3"]  = gC2;
   10295          92 :       lcpomap[r+"_C4"]  = gC3;
   10296          92 :       lcpomap[r+"_C5"]  = gC3;
   10297          92 :       lcpomap[r+"_C6"]  = gC3;
   10298          92 :       lcpomap[r+"_C7"]  = gC3;
   10299          92 :       lcpomap[r+"_C8"]  = gC3;
   10300          92 :       lcpomap[r+"_C9"]  = gC2;
   10301          92 :       lcpomap[r+"_O6"]  = gOE;                // ring oxygen
   10302          92 :       lcpomap[r+"_O11"] = gOH;                // carboxylate, force-field naming
   10303          92 :       lcpomap[r+"_O12"] = gOH;
   10304          92 :       lcpomap[r+"_O1A"] = gOH;                // carboxylate, PDB-CCD naming
   10305          92 :       lcpomap[r+"_O1B"] = gOH;
   10306          92 :       lcpomap[r+"_N"]   = gN2;                // acetamido group, force-field naming
   10307          92 :       lcpomap[r+"_C"]   = gCA;
   10308          92 :       lcpomap[r+"_O"]   = gOC;
   10309          92 :       lcpomap[r+"_CT"]  = gC1;
   10310          92 :       lcpomap[r+"_N5"]  = gN2;                // acetamido group, PDB-CCD naming
   10311          92 :       lcpomap[r+"_C10"] = gCA;
   10312          92 :       lcpomap[r+"_O10"] = gOC;
   10313          92 :       lcpomap[r+"_C11"] = gC1;
   10314          92 :       const std::vector<std::string> oh = {"O2", "O4", "O7", "O8", "O9"};
   10315         552 :       for(unsigned k=0; k<oh.size(); ++k) {
   10316         920 :         lcpomap[r+"_"+oh[k]]      = gOH;
   10317        1380 :         lcpomap[r+"_"+oh[k]+"_L"] = gOE;
   10318             :       }
   10319          92 :     }
   10320          23 :   }
   10321             : 
   10322          23 :   return lcpomap;
   10323             : }
   10324             : 
   10325             : // assigns LCPO parameters to each atom reading from database
   10326          23 : void SAXS::readLCPOparam(const std::vector<std::vector<std::string> > &AtomResidueName, unsigned natoms) {
   10327          23 :   std::map<std::string, std::vector<double> > lcpomap = setupLCPOparam();
   10328             : 
   10329       70373 :   for(unsigned i=0; i<natoms; ++i) {
   10330             :     // ions are excluded from the SASA calculation: skip so they keep an empty
   10331             :     // LCPOparam (this also avoids a spurious lookup, e.g. for Cl/Ca whose names start with C)
   10332       70350 :     if (ionTypeFromResname(AtomResidueName[1][i]) >= 0) {
   10333           3 :       continue;
   10334             :     }
   10335       70347 :     if ((AtomResidueName[0][i][0]=='O') || (AtomResidueName[0][i][0]=='N') || (AtomResidueName[0][i][0]=='C') || (AtomResidueName[0][i][0]=='S' || (AtomResidueName[0][i][0]=='P'))) {
   10336       65734 :       std::string identifier = AtomResidueName[1][i]+"_"+AtomResidueName[0][i];
   10337             :       // a glycan oxygen that carries a glycosidic bond is an ether, not a hydroxyl
   10338       32867 :       if(i<glyc_bridge.size() && glyc_bridge[i] && lcpomap.count(identifier+"_L")>0) {
   10339             :         identifier += "_L";
   10340             :       }
   10341             :       std::map<std::string, std::vector<double> >::const_iterator lcpoit = lcpomap.find(identifier);
   10342       32867 :       if(lcpoit==lcpomap.end()) {
   10343           0 :         error("Could not find LCPO parameters for atom "+AtomResidueName[0][i]+
   10344           0 :               " of residue "+AtomResidueName[1][i]+". Check the PDB.");
   10345             :       }
   10346             :       const std::vector<double> &LCPOparamVector = lcpoit->second;
   10347             :       double rs = 0.14;
   10348       32867 :       LCPOparam[i].push_back(LCPOparamVector[0]+rs*10.);
   10349       32867 :       LCPOparam[i].push_back(LCPOparamVector[1]);
   10350       32867 :       LCPOparam[i].push_back(LCPOparamVector[2]);
   10351       32867 :       LCPOparam[i].push_back(LCPOparamVector[3]);
   10352       32867 :       LCPOparam[i].push_back(LCPOparamVector[4]);
   10353             :     }
   10354             :   }
   10355             : 
   10356       70373 :   for(unsigned i=0; i<natoms; ++i) {
   10357       70350 :     if (ionTypeFromResname(AtomResidueName[1][i]) >= 0) {
   10358           3 :       continue;
   10359             :     }
   10360       70347 :     if (LCPOparam[i].size()==0 ) {
   10361       37480 :       if ((AtomResidueName[0][i][0]=='O') || (AtomResidueName[0][i][0]=='N') || (AtomResidueName[0][i][0]=='C') || (AtomResidueName[0][i][0]=='S') || (AtomResidueName[0][i][0]=='P')) {
   10362           0 :         std::cout << "Could not find LCPO parameters for atom " << AtomResidueName[0][i] << " of residue " << AtomResidueName[1][i] << std::endl;
   10363           0 :         error ("missing LCPO parameters\n");
   10364             :       }
   10365             :     }
   10366             :   }
   10367             : 
   10368             :   // Terminal corrections. These used to be applied to the very first and very last
   10369             :   // atom of the system; with a glycan written after the protein that is a sugar atom,
   10370             :   // so the protein terminus silently lost its correction. The first and last atoms
   10371             :   // that belong to a one-bead amino acid are used instead, which is the same thing
   10372             :   // for a protein on its own.
   10373          23 :   unsigned ifirst = 0, ilast = natoms-1;
   10374             :   bool have_first = false, have_last = false;
   10375       70373 :   for(unsigned i=0; i<natoms; ++i) {
   10376       70350 :     if(i<glyc_type.size() && glyc_type[i]>=0) {
   10377           0 :       continue;
   10378             :     }
   10379       70350 :     if(ionTypeFromResname(AtomResidueName[1][i]) >= 0) {
   10380           3 :       continue;
   10381             :     }
   10382       70347 :     if(!have_first) {
   10383             :       ifirst = i;
   10384             :       have_first = true;
   10385             :     }
   10386             :     ilast = i;
   10387             :     have_last = true;
   10388             :   }
   10389             : 
   10390          23 :   if (have_first && AtomResidueName[0][ifirst] == "N" && LCPOparam[ifirst].size()>4) {
   10391          21 :     LCPOparam[ifirst][1] = 7.3511e-01;
   10392          21 :     LCPOparam[ifirst][2] = -2.2116e-01;
   10393          21 :     LCPOparam[ifirst][3] = -8.9148e-04;
   10394          21 :     LCPOparam[ifirst][4] = 2.5230e-04;
   10395             :   }
   10396             : 
   10397          23 :   if (have_last && AtomResidueName[0][ilast] == "O" && LCPOparam[ilast].size()>4) {
   10398           0 :     LCPOparam[ilast][1] = 8.8857e-01;
   10399           0 :     LCPOparam[ilast][2] = -3.3421e-01;
   10400           0 :     LCPOparam[ilast][3] = -1.8683e-03;
   10401           0 :     LCPOparam[ilast][4] = 4.9372e-04;
   10402             :   }
   10403          23 : }
   10404             : 
   10405           8 : void SAXS::resolution_function() {
   10406           8 :   const unsigned numq = q_list.size();
   10407             : 
   10408             :   // only OpenMP because numq might be smaller than the number of ranks
   10409           8 :   #pragma omp parallel for num_threads(OpenMP::getNumThreads())
   10410             :   for (unsigned i=0; i<numq; i++) {
   10411             :     double qi = q_list[i];
   10412             :     double dq = 6*sigma_res[i]/(Nj-1);
   10413             :     double sigma_sq = sigma_res[i]*sigma_res[i];
   10414             :     double qstart = qi - 3*sigma_res[i];
   10415             :     for (unsigned j=0; j<Nj; j++) {
   10416             :       double qj = qstart + j*dq;
   10417             :       double I0exp = i0e(qj*qi/sigma_sq);
   10418             : 
   10419             :       qj_list[i][j] = qj;
   10420             :       Rij[i][j] = (qj/sigma_sq)*std::exp(-0.5*(qj - qi)*(qj - qi)/sigma_sq)*I0exp;
   10421             :     }
   10422             :   }
   10423           8 : }
   10424             : 
   10425             : // i0e function from cephes
   10426             : // compute I0(x) * exp (-x), with I0 being the modified Bessel function
   10427             : // of first kind and zeroth order.
   10428        1260 : inline double SAXS::i0e(double x) {
   10429             :   double y = 0.0;
   10430             : 
   10431        1260 :   if (x < 0) {
   10432           0 :     x = -x;
   10433             :   }
   10434        1260 :   if (x <= 8.0) {
   10435           0 :     y = (x/2.0) - 2.0;
   10436           0 :     return chbevl(y, A);
   10437             :   }
   10438             : 
   10439        1260 :   return chbevl(32.0/x - 2.0, B) / sqrt(x);
   10440             : }
   10441             : 
   10442        1260 : double SAXS::chbevl(double x, const std::vector<double> &coeffs) {
   10443             :   double b0, b1, b2;
   10444        1260 :   unsigned n = coeffs.size();
   10445             : 
   10446        1260 :   b0 = coeffs[0];
   10447             :   b1 = 0.0;
   10448             :   b2 = 0.0;
   10449             : 
   10450       31500 :   for (unsigned i = 1; i < n; i++) {
   10451             :     b2 = b1;
   10452             :     b1 = b0;
   10453       30240 :     b0 = x * b1 - b2 + coeffs[i];
   10454             :   }
   10455        1260 :   return 0.5 * (b0 - b2);
   10456             : }
   10457             : 
   10458       18900 : inline double SAXS::interpolation(std::vector<SplineCoeffs> &coeffs, double x) {
   10459             :   unsigned s = 0;
   10460      141360 :   while ((x >= q_list[s+1]) && (s+1 < q_list.size()-1)) {
   10461             :     s++;
   10462             :   }
   10463             : 
   10464       18900 :   double dx = x - coeffs[s].x;
   10465       18900 :   return coeffs[s].a + coeffs[s].b*dx + coeffs[s].c*dx*dx + coeffs[s].d*dx*dx*dx;
   10466             : }
   10467             : 
   10468             : // natural bc cubic spline implementation from the Wikipedia algorithm
   10469             : // modified from https://stackoverflow.com/a/19216702/3254658
   10470         120 : std::vector<SAXS::SplineCoeffs> SAXS::spline_coeffs(std::vector<double> &x, std::vector<double> &y) {
   10471         120 :   unsigned n = x.size()-1;
   10472         120 :   std::vector<double> a;
   10473         120 :   a.insert(a.begin(), y.begin(), y.end());
   10474         120 :   std::vector<double> b(n);
   10475         120 :   std::vector<double> d(n);
   10476         120 :   std::vector<double> h;
   10477             : 
   10478        1800 :   for(unsigned i=0; i<n; i++) {
   10479        1680 :     h.push_back(x[i+1]-x[i]);
   10480             :   }
   10481             : 
   10482         120 :   std::vector<double> alpha;
   10483         120 :   alpha.push_back(0);
   10484        1680 :   for(unsigned i=1; i<n; i++) {
   10485        1560 :     alpha.push_back( 3*(a[i+1]-a[i])/h[i] - 3*(a[i]-a[i-1])/h[i-1]  );
   10486             :   }
   10487             : 
   10488         120 :   std::vector<double> c(n+1);
   10489         120 :   std::vector<double> l(n+1);
   10490         120 :   std::vector<double> mu(n+1);
   10491         120 :   std::vector<double> z(n+1);
   10492         120 :   l[0] = 1;
   10493         120 :   mu[0] = 0;
   10494         120 :   z[0] = 0;
   10495             : 
   10496        1680 :   for(unsigned i=1; i<n; i++) {
   10497        1560 :     l[i] = 2 *(x[i+1]-x[i-1])-h[i-1]*mu[i-1];
   10498        1560 :     mu[i] = h[i]/l[i];
   10499        1560 :     z[i] = (alpha[i]-h[i-1]*z[i-1])/l[i];
   10500             :   }
   10501             : 
   10502         120 :   l[n] = 1;
   10503         120 :   z[n] = 0;
   10504         120 :   c[n] = 0;
   10505             : 
   10506        1800 :   for(int j=n-1; j>=0; j--) {
   10507        1680 :     c[j] = z[j] - mu[j] * c[j+1];
   10508        1680 :     b[j] = (a[j+1]-a[j])/h[j]-h[j]*(c[j+1]+2*c[j])/3;
   10509        1680 :     d[j] = (c[j+1]-c[j])/3/h[j];
   10510             :   }
   10511             : 
   10512         120 :   std::vector<SplineCoeffs> output_set(n);
   10513        1800 :   for(unsigned i=0; i<n; i++) {
   10514        1680 :     output_set[i].a = a[i];
   10515        1680 :     output_set[i].b = b[i];
   10516        1680 :     output_set[i].c = c[i];
   10517        1680 :     output_set[i].d = d[i];
   10518        1680 :     output_set[i].x = x[i];
   10519             :   }
   10520             : 
   10521         120 :   return output_set;
   10522             : }
   10523             : 
   10524             : 
   10525             : }//namespace isdb
   10526             : }//namespace PLMD

Generated by: LCOV version 1.16